MySQL ERROR 1045 (28000): доступ запрещен для пользователя 'bill' @'localhost' (с использованием пароля: YES)

Сначала позвольте мне упомянуть, что я рассмотрел многие предложенные вопросы и не нашел никакого релевантного ответа. Вот что я делаю.

Я подключен к экземпляру Amazon EC2. Я могу войти в MySQL с помощью этой команды:

mysql -u root -p

Затем я создал новый счет пользователя с хостом%

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

Предоставлено все привилегии пользователю:

grant all privileges on *.* to 'bill'@'%' with grant option;

Затем я выхожу из пользователя root и пытаюсь войти с помощью счета:

mysql -u bill -p

введите правильный пароль и получили эту ошибку:

ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill' @'localhost' (с использованием пароля: YES)

Ответ 1

Вероятно, у вас есть анонимный пользователь ''@'localhost' или ''@'127.0.0.1'.

В соответствии с руководством:

Если возможно несколько совпадений, сервер должен определить, какой из их использовать. Он решает эту проблему следующим образом: (...)

  • Когда клиент пытается подключиться, сервер просматривает строки [таблицы mysql.user] в отсортированном порядке.
  • Сервер использует первую строку, которая соответствует имени хоста клиента и имени пользователя.

(...) Сервер использует правила сортировки, которые сначала упорядочивают строки с наиболее важными значениями хоста. Буквенные имена хостов [такие как "localhost" ] и IP-адреса являются наиболее конкретными.

Следовательно, такой анонимный пользователь будет "маскировать" любого другого пользователя, например '[any_username]'@'%' при подключении от localhost.

'bill'@'localhost' соответствует 'bill'@'%', но будет соответствовать (например,) ''@'localhost' перед вызовами.

Рекомендуемое решение - отказаться от этого анонимного пользователя (обычно это хорошо делать в любом случае).


Ниже редактирование в основном не имеет отношения к основному вопросу. Они предназначены только для ответа на некоторые вопросы, поднятые в других комментариях в этом потоке.

Изменить 1

Аутентификация как 'bill'@'%' через сокет.

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
    Welcome to the MySQL monitor (...)

    mysql> SELECT user, host FROM mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | bill | %         |
    | root | 127.0.0.1 |
    | root | ::1       |
    | root | localhost |
    +------+-----------+
    4 rows in set (0.00 sec)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | [email protected] | [email protected]%         |
    +----------------+----------------+
    1 row in set (0.02 sec)

    mysql> SHOW VARIABLES LIKE 'skip_networking';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | skip_networking | ON    |
    +-----------------+-------+
    1 row in set (0.00 sec)

Изменить 2

Точная настройка, за исключением того, что я активировал сеть, и теперь я создаю анонимного пользователя ''@'localhost'.

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    Welcome to the MySQL monitor (...)

    mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
    Query OK, 0 rows affected (0.00 sec)

    mysql> Bye

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket=/tmp/mysql-5.5.sock
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

Изменить 3

В той же ситуации, что и в редакторе 2, теперь предоставляющей пароль анонимного пользователя.

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    Welcome to the MySQL monitor (...)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | [email protected] | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

Заключение 1, из edit 1: через сокет можно аутентифицироваться как 'bill'@'%'.

Заключение 2 из 2: Независимо от того, подключается ли через TCP или через сокет, не влияет на процесс аутентификации (за исключением того, что я не могу подключиться, как никто другой, но 'something'@'localhost' через сокет, очевидно).

Заключение 3, из edit 3: Хотя я указал -ubill, мне был предоставлен доступ как анонимный пользователь. Это из-за описанных выше "правил сортировки". Обратите внимание, что в большинстве установок по умолчанию нет пароля, анонимный пользователь существует (и должен быть защищен/удален).

Ответ 2

Try:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to [email protected] identified by 'pass' with grant option;

Ответ 3

Когда вы запустили

mysql -u bill -p

и получил эту ошибку

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

mysqld ожидает, что вы будете подключаться как [email protected]

Попробуйте создать [email protected]

CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] with grant option;

Если вы хотите подключиться удаленно, вы должны указать либо имя DNS, общедоступный IP-адрес, либо 127.0.0.1, используя TCP/IP:

mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

После входа в систему запустите

SELECT USER(),CURRENT_USER();

USER() сообщает, как вы пытались выполнить аутентификацию в MySQL

CURRENT_USER() сообщает, как вам было разрешено пройти аутентификацию в MySQL из таблицы mysql.user

Это даст вам лучшее представление о том, как и почему вам разрешили войти в mysql. Почему это мнение важно знать? Он связан с протоколом упорядочения аутентификации пользователя.

Вот пример: я создам анонимного пользователя на моем рабочем столе MySQL

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)

mysql> grant all on *.* to [email protected]'%';
Query OK, 0 rows affected (0.02 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| x       | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
|         | %         |
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql>

ОК следите за мной как анонимным пользователем:

C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user(),current_user();
+---------------+----------------+
| user()        | current_user() |
+---------------+----------------+
| [email protected] | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

Порядок аутентификации очень строгий. Он проверяет от самого особого к минимуму. Я написал об этом стиле аутентификации в DBA StackExchange.

Не забудьте явно вызвать TCP в качестве протокола для клиента mysql, когда это необходимо.

Ответ 4

При вводе mysql -u root -p вы подключаетесь к серверу mysql через локальный сокет unix.

Однако предоставленный вами грант 'bill'@'%' достаточно точно соответствует соединениям TCP/IP.

Если вы хотите предоставить доступ к локальному сокету unix, вам нужно предоставить привилегии "bill" @ "localhost", что, как ни странно, не совпадает с "bill" @ "127.0.0.1"

Вы также можете подключиться с использованием TCP/IP с клиентом командной строки mysql, чтобы соответствовать привилегиям, которые вы уже предоставили, например. запустите mysql -u root -p -h 192.168.1.123 или какой бы локальный IP-адрес у вас не был.

Ответ 5

Супер поздно к этому

Я пробовал все эти другие ответы и запускал разные версии mysql -u root -p, но никогда не запускал


mysql -u root -p

И просто нажмите [ENTER] для пароля.


Как только я это сделал, он сработал. Надеюсь, это поможет кому-то.

Ответ 6

Сохраните головную боль MAJOR... Возможно, проблема заключается в том, что вам не хватает котировок вокруг пароля. По крайней мере, это был мой случай, который оттащил меня на 3 часа.

[client]
user = myusername
password = "mypassword"   # <----------------------- VERY IMPORTANT (quotes)
host = localhost

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

Найдите "Вот типичный файл пользовательских параметров:" и посмотрите пример, который они там укажут. Удачи, и я надеюсь немного сэкономить время.

Ответ 7

Связанная с этим проблема в моем случае пыталась подключиться, используя:

mysql -u mike -p mypass

Пробел. По-видимому, разрешен между -u # uname #, но NOT между -p и #password #

Поэтому необходимо:

mysql -u mike -pmypass

В противном случае с пробелом между -p mypass mysql принимает 'mypass' как имя db

Ответ 8

Если вы забыли свой пароль или хотите изменить свой пароль. Вы можете выполнить следующие действия:

1: остановите свой mysql

[root @maomao ~] # служба mysqld stop
Остановка MySQL: [OK]

2: используйте "-skip-grant-tables" для перезагрузки mysql

[root @mcy400 ~] # mysqld_safe --skip-grant-tables
[root @cy400 ~] # Запуск mysqld-демона с базами данных из /var/lib/mysql

3: откройте новое окно и введите корень mysql -u

[root @cy400 ~] # mysql -u root
Добро пожаловать на монитор MySQL. Команды заканчиваются; или \g.

4: изменение базы данных пользователя

mysql> использовать mysql
Чтение информации о таблицах для заполнения имен таблиц и столбцов. Вы можете отключить эту функцию, чтобы быстрее запустить с измененной базой данных -A

5: измените свой пароль, ваш новый пароль должен быть введен в "()"

mysql> update user set password = password ('root123') где user = 'root';
Запрос ОК, 3 строки затронуты (0.00 сек)
Соответствие строк: 3 Изменено: 3 Предупреждения: 0

6: флеш

mysql> привилегии flush;

7: выйти

mysql> quit
до свидания

8: перезапустить mysql

[root @cy400 ~] # служба mysqld restart;
Остановка MySQL: [OK]
Запуск MySQL: [OK]

Bingo! Вы можете подключить свою базу данных с вашим именем пользователя и новым паролем:

[[email protected] ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor.  Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye

Ответ 9

Решение состоит в том, чтобы удалить анонимного пользователя (любого)!

Я также столкнулся с той же проблемой при настройке сервера кем-то другим. Обычно я не хочу создавать анонимного пользователя при установке MySQL, поэтому не заметил этого. Сначала я вошел в систему как пользователь root и создал пару "обычных" пользователей (например, пользователей с привилегиями только на dbs с их именем пользователя в качестве префикса), а затем вышел из системы, а затем продолжил проверку первого обычного пользователя. Я не мог войти в систему. Ни через phpMyAdmin, ни через оболочку. Оказывается, виновником является этот "Любой" пользователь.

Ответ 10

Лучшее решение, которое я нашел для себя, - это.

мой пользователь является сонаром и всякий раз, когда я пытаюсь подключиться к моей базе данных с внешней или другой машины, я получаю ошибку как

ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)

Также, как я пытаюсь это сделать с другой машины и через работу Jenkins мой URL для доступа

alm-lt-test.xyz.com

если вы хотите подключиться удаленно, вы можете указать его различными способами следующим образом:

mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP

Чтобы получить доступ к этому URL-адресу, вам просто нужно выполнить следующий запрос.

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';

Ответ 11

Хорошо, я не уверен, но, вероятно, это файл my.cnf внутри каталога установки mysql является виновником. Прокомментируйте эту строку, и проблема может быть решена.

bind-address = 127.0.0.1

Ответ 12

Просто хотел сообщить вам необычное обстоятельство, что я получил ту же ошибку. Возможно, это поможет кому-то в будущем.

Я разработал несколько базовых представлений, созданных на сайте разработки и перенесенных на сайт-изготовитель. Позже на этой неделе я сменил PHP script, и внезапно возникли ошибки, из-за которых Access был запрещен для пользователя local-web-пользователя пользователя @localhost. Объект datasource не изменился, поэтому я сосредоточился на пользователе базы данных в MySQL, беспокоясь тем временем, что кто-то взломал мой сайт. К счастью, остальная часть сайта казалась невредимой.

Позже выяснилось, что взгляды были виновниками. Наши переносы объектов выполняются с использованием другого (и удаленного: admin @ip-address) пользователя, чем пользователя локального веб-сайта. Таким образом, представления были созданы с помощью "admin" @ip-address в качестве определителя. По умолчанию для создания SECURITY установлено значение

SQL SECURITY DEFINER

Когда пользователь local-web пытается использовать представление, он натыкается на недостающие привилегии определителя для использования таблиц. После того, как безопасность была изменена на:

SQL SECURITY INVOKER

проблема была решена. Фактическая проблема была совершенно иной, чем предполагалось на основе сообщения об ошибке.

Ответ 13

Это разница между:

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

и

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

Проверьте это:

mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user          | host                       |
+---------------+----------------------------+
| bill          | %                          | <=== created by first
| root          | 127.0.0.1                  |
| root          | ::1                        |
| root          | localhost                  |
| bill          | localhost                  | <=== created by second
+---------------+----------------------------+

Команда

mysql -u bill -p

доступ неявно к 'bill' @'localhost' и NOT для 'bill' @'%'.

Нет разрешений для 'bill' @'localhost'

вы получите сообщение об ошибке:

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

решение проблемы:

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

grant all privileges on . to 'bill'@'localhost' with grant option;

Ответ 14

Это также происходит, когда ваш пароль содержит некоторые специальные символы, такие как @, $и т.д. Чтобы избежать этой ситуации, вы можете обернуть пароль в одинарные кавычки:

$ mysql -usomeuser -p'[email protected]$$w0Rd'

Или вместо этого не используйте пароль при вводе. Оставьте поле пустым и введите его, когда терминал запросит. Это рекомендуемый способ.

$ mysql -usomeuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 191
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Ответ 15

Для меня эта проблема была вызвана новой функцией MySQL 5.7.2: записи user игнорируются, если их поле plugin пусто.

Установите его, например. mysql_native_password для их повторного использования:

UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;

См. примечания к выпуску для MySQL 5.7.2 в разделе "Заметки об аутентификации".

По какой-то причине (возможно, из-за того, что мои хэш-коды до 4.1 были удалены), mysql_upgrade script не установил значение плагина по умолчанию.

Я узнал, заметив следующее предупреждение в /var/log/mysql/error.log:

[Warning] Пользовательская запись 'foo' @'%' имеет пустое значение плагина. Пользователь будет проигнорирован, и никто больше не сможет входить в систему с этим пользователем.

Я размещаю этот ответ здесь, чтобы спасти кого-то от использования такого же смешного количества времени на этом, как и я.

Ответ 16

У меня была несколько схожая проблема - при первой попытке войти в MySql, как root, мне сказали, что доступ запрещен. Оказывается, я забыл использовать sudo...

Итак, если вы не выполнили первую попытку root, попробуйте:

sudo mysql -u root -p

а затем введите свой пароль, это должно сработать.

Ответ 17

Я надеюсь, что вы не нанесли дополнительного урона, также удалив пользователя debian-sys-maint в mysql

Пусть ваш демон mysql работает обычным способом. Запустите клиент mysql, как показано ниже.

mysql -u debian-sys-maint -p

В другом терминале, cat файл /etc/mysql/debian.cnf. Этот файл содержит пароль; вставьте этот пароль при появлении запроса.

http://ubuntuforums.org/showthread.php?t=1836919

Ответ 18

Не уверен, что кто-нибудь еще найдет это полезным, но я столкнулся с той же ошибкой и обыскал всех анонимных пользователей... и их не было. Проблема заключалась в том, что для учетной записи пользователя было установлено значение "Требовать SSL", которое я нашел в PHPMyAdmin, перейдя в Учетные записи пользователей и нажав "Изменить привилегии" для пользователя. Как только я отключил этот параметр, все сработало, как ожидалось!

Ответ 19

Сводка отладки

  • Проверьте наличие ошибки опечатки: имя пользователя или пароль.
  • Проверьте имя хоста и сравните его с именем узла таблицы mysql.user.
  • Проверить, существует ли пользователь.
  • Проверьте, содержит ли хост IP-адрес или имя хоста.

Существует большая вероятность, что вы могли столкнуться с этой проблемой несколько раз в своей работе. Эта проблема возникала у меня в большинстве случаев из-за неправильного ввода имени пользователя или пароля. Хотя это одна из причин, есть и другие шансы, что вы можете получить эту проблему. Иногда это выглядит очень похоже, но когда вы копаете глубже, вы поймете несколько факторов, способствующих этой ошибке. Эта статья будет подробно объяснять, большинство общих причин и работать, чтобы исправить эту проблему.

Возможные причины:

  • Случай 1: ошибка Typo: имя пользователя или пароль.

Это наиболее распространенная причина этой ошибки. Если вы ошибочно ввели имя пользователя или пароль, вы обязательно получите эту ошибку.

Решение:

Решение для такого типа ошибок очень просто. Просто введите правильное имя пользователя и пароль. Эта ошибка будет решена. Если вы забыли пароль, вы можете reset указать имя пользователя/пароль. Если вы забыли пароль для учетной записи admin/root, существует много способов reset/recapture root password. Я буду публиковать еще одно сообщение о том, как reset пароль root в случае, если вы забыли пароль root.

  • Случай 2: доступ с неправильного хоста.

MySQL предоставляет ограничение на основе хоста для доступа пользователей в качестве функций безопасности. В нашей производственной среде мы ограничивали запрос доступа только серверами приложений. Эта функция действительно полезна во многих сценариях производства.

Решение:

Когда вы сталкиваетесь с этим типом проблемы, сначала проверьте, разрешен ли ваш хост или нет, проверив таблицу mysql.user. Если он не определен, вы можете обновить или вставить новую запись в таблицу mysql.user. Как правило, доступ к корневому пользователю с удаленной машины отключен, и это не лучшая практика из-за проблем с безопасностью. Если у вас есть требования для доступа к вашему серверу с нескольких компьютеров, дайте доступ только этим машинам. Лучше не использовать подстановочные знаки (%) и дает универсальный доступ. Позвольте мне обновить таблицу mysql.user, теперь демоверсер может получить доступ к серверу MySQL с любого хоста.

  • Случай 3: Пользователь не существует на сервере.

Этот тип ошибки возникает, когда пользователь, к которому вы пытаетесь получить доступ, не существует на сервере MySQL.

Решения:

Когда вы сталкиваетесь с этим типом проблемы, просто проверьте, существует ли пользователь в таблице mysql.user или нет. Если запись не существует, пользователь не может получить доступ. Если для этого пользователя требуется требование, создайте нового пользователя с этим именем пользователя.

  • Случай 4: объединение числовых и именных хостов.

Важные моменты

  • Не рекомендуется использовать подстановочные знаки при определении пользовательского хоста, попробуйте использовать точное имя хоста.

  • Отключить вход root с удаленной машины.

  • Использовать концепцию пользователя прокси.

Есть несколько других концепций, связанных с этой темой, и вникание в детали этих тем - это очень разные области применения этой статьи. Мы рассмотрим следующие связанные темы в следующих статьях.

  • Что делать, если вы забыли пароль root на сервере MySQL.
  • Проблемы с правами доступа MySQL и связанные с ними таблицы.
  • Функции безопасности MySQL с лучшими практиками.

Я надеюсь, что этот пост поможет вам исправить код ошибки MySQL 1045 Access, запрещенный для пользователя в MySQL.

Ответ 20

Я обнаружил еще один случай, который на поверхности кажется краевым; Я могу экспортировать в файловую систему через SELECT INTO.. OUTFILE как root, но не как обычный пользователь. Хотя это может быть вопросом разрешений, я посмотрел на это и не вижу ничего особенно очевидного. Все, что я могу сказать, это то, что выполнение запроса обычным пользователем, имеющим все разрешения для рассматриваемой базы данных, возвращает ошибку отказа в доступе, которая привела меня к этой теме. Когда я нашел расшифровку успешного использования SELECT INTO… OUTFILE в старом проекте, я заметил, что вошел в систему как root. Конечно, когда я вошел в систему как root, запрос выполнялся как ожидалось.

Ответ 21

Я решил это, удалив старые записи багги пользователя (это важная часть: как из mysql.user, так и mysql.db), а затем создана тот же пользователь, что и раньше:

FLUSH PRIVILEGES;
CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] with grant option;
FLUSH PRIVILEGES;

Работает, пользователь подключается. Теперь я удалю некоторые прелести из него:)

Ответ 22

Это сработало для меня:

UPDATE mysql.user SET user='xxxx', password=PASSWORD('xxxx') WHERE user='';
FLUSH PRIVILEGES;

Как @RandomSeed сказал, что у вас должен быть анонимный пользователь в вашей СУБД. Дайте им имя. он будет работать

Ответ 23

В окне "Как разрешить ERROR 1045 (28000): доступ запрещен для пользователя" root "@" localhost "(с использованием пароля: НЕТ)

1) Uninstall mysql from control panel
2)Delete MySql folder from C:\Program Files,C:\Program Files (x86) and C:\ProgramData
3)Install mysql

Ответ 24

Я столкнулся с той же ошибкой. Установка, которая не работала, выглядит следующим образом:

define("HOSTNAME", "localhost");
define("HOSTUSER", "van");
define("HOSTPASS", "helsing");
define("DBNAME", "crossbow");
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

Ниже приведена отредактированная настройка, которая заставила ее работать. Обратите внимание на разницу?

define('HOSTNAME', 'localhost');
define('HOSTUSER', 'van');
define('HOSTPASS', 'helsing');
define('DBNAME', 'crossbow');
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

Разница заключается в двойных кавычках. Они кажутся довольно значительными в PHP, в отличие от Java, и они оказывают влияние, когда речь идет об экранировании символов, настройке URL-адресов и передаче параметров в функцию. Они красивее (я знаю), но всегда используют одинарные кавычки как можно больше, тогда двойные кавычки могут быть вложены в них, если это необходимо.

Эта ошибка возникла, когда я протестировал свое приложение на ящике Linux, а не в среде Windows.

Ответ 25

ОС: окна

Мое сообщение об ошибке: "MySQL ERROR 1045 (28000): доступ запрещен для пользователя" root "@" localhost "(с использованием пароля: YES)"

Моя причина не открыта cmd с administrator permission

поэтому мое решение: открыть cmd с administrator permission, затем он работает.

Ответ 26

Это может относиться к очень немногим людям, но здесь идет. Не используйте восклицательный знак (!) В своем пароле. Я сделал и получил вышеупомянутую ошибку, используя MariaDB. Когда я упростил это до просто цифр и букв, это сработало. Другие символы, такие как @и $, работают нормально - я использовал эти символы у другого пользователя в том же экземпляре. Пятый ответ по этому адресу привел меня к решению проблемы.

Ответ 27

Это может также произойти, если MySQL работает на нечувствительной к регистру * ОС, такой как Windows.

Например, я обнаружил, что попытка подключения к базе данных с использованием этих учетных данных не удалась:

mysql> grant select в базе данных V105. * для 'specialuser', идентифицированного как 's3curepa5wrd';

но это удалось:

mysql> grant select в базе данных V105. * для 'specialuser', идентифицированного как 's3curepa5wrd';

Ответ 28

Имена учетных записей MySQL состоят из имени пользователя и имени узла. Имя "localhost" в имени хоста указывает на локальный хост. Вы также можете использовать подстановочные знаки "%" и "_" в именах хостов или IP-адресах. Они имеют то же значение, что и для операций согласования шаблонов, выполняемых с оператором LIKE. Например, значение хоста "%" соответствует любому имени хоста, тогда как значение "%.mysql.com" соответствует любому хосту в домене mysql.com. '192.168.1.%' Соответствует любому хосту в сети класса 192.168.1.

Выше было только введение:

на самом деле оба пользователя 'bill'@'localhost' и 'bill'@'%' - это разные учетные записи MySQL, поэтому оба должны использовать свои собственные данные аутентификации, такие как пароль.

Для получения дополнительной информации см. http://dev.mysql.com/doc/refman//5.5/en/account-names.html

Ответ 29

Когда вы запустите mysql -u bill -p, localhost будет разрешен для вашего ip, так как это 127.0.0.1 и в вашем /etc/hosts файле, по умолчанию 127.0.0.1 localhost существует. Итак, mysql интерпретирует вас как [email protected], который не предоставляется с помощью [email protected]'%'. Вот почему есть 2 разных записи для пользователя root в результате запроса select host, user from mysql.user;.

Существует два способа решения этой проблемы.

Один из них указывает ip, который не ревертируется при помощи файла /etc/hosts при попытке входа в систему. Например, ip сервера 10.0.0.2. Когда вы запустите команду mysql -u bill -p -h 10.0.0.2, вы сможете войти в систему. Если вы наберете select user();, вы получите [email protected]. Конечно, любое имя домена не должно быть разрешено для этого ip в вашем файле /etc/hosts.

Во-вторых, вам необходимо предоставить доступ для этого конкретного доменного имени. Для [email protected] вы должны вызвать команду grant all privileges on *.* to [email protected] identified by 'billpass';. В этом случае вы сможете войти в систему с помощью команды mysql -u bill -p. После входа в систему команда select user(); возвращает [email protected].

Но это только для того, что вы пытаетесь войти в систему с сервером mysql на том же хосте. От удаленных хостов mysql ведет себя нормально, "%" предоставит вам логин.

Ответ 30

Убедитесь, что нет других экземпляров SQL, которые используют сообщение localhost. В нашем случае на локальном хосте запускался другой экземпляр, который противоречил логину. Отключение этой проблемы решило эту проблему.