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

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

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

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’ (с использованием пароля: ДА)

354

Решение

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

Согласно руководство:

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

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

(…)
Сервер использует правила сортировки, которые упорядочивают строки с самые специфические значения хоста в первую очередь.
Литеральные имена хостов [такой как ‘localhost’] и IP-адреса являются наиболее конкретными.

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

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

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


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

Редактировать 1

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


root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
Добро пожаловать на монитор MySQL (...)

mysql> ВЫБЕРИТЕ пользователя, хост FROM mysql.user;
+ ------ + ----------- +
| пользователь | хозяин |
+ ------ + ----------- +
| счет | % |
| корень | 127.0.0.1 |
| корень | :: 1 |
| корень | местный хост |
+ ------ + ----------- +
4 ряда в наборе (0,00 сек)

mysql> SELECT USER (), CURRENT_USER ();
+ ---------------- + ---------------- +
| ПОЛЬЗОВАТЕЛЬ () | CURRENT_USER () |
+ ---------------- + ---------------- +
| счет @ localhost | счет @% |
+ ---------------- + ---------------- +
1 ряд в наборе (0,02 сек)

mysql> SHOW VARIABLES LIKE 'skip_networking';
+ ----------------- + ------- +
| Переменное_имя | Значение |
+ ----------------- + ------- +
| skip_networking | ON |
+ ----------------- + ------- +
1 ряд в наборе (0,00 сек)

Редактировать 2

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


root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
Добро пожаловать на монитор MySQL (...)

mysql> CREATE USER '' @ 'localhost', ИДЕНТИФИЦИРОВАННЫЙ 'anotherpass';
Запрос в порядке, затронуто 0 строк (0,00 с)

mysql> Пока

root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
--socket = / TMP / MySQL-5.5.sock
ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill' @ 'localhost' (с использованием пароля: ДА)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-h127.0.0.1 --protocol = TCP
ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill' @ 'localhost' (с использованием пароля: ДА)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-hlocalhost --protocol = TCP
ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill' @ 'localhost' (с использованием пароля: ДА)

Редактировать 3

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


root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
Добро пожаловать на монитор MySQL (...)

mysql> SELECT USER (), CURRENT_USER ();
+ ---------------- + ---------------- +
| ПОЛЬЗОВАТЕЛЬ () | CURRENT_USER () |
+ ---------------- + ---------------- +
| счет @ localhost | @localhost |
+ ---------------- + ---------------- +
1 ряд в наборе (0,01 с)

Вывод 1, из редактирования 1: можно аутентифицироваться как 'bill'@'%'через розетку.

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

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

394

Другие решения

Пытаться:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
125

Когда ты побежал

mysql -u bill -p

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

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

mysqld ожидает, что вы подключитесь как bill@localhost

Попробуйте создать bill@localhost

CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost 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

ТЕКУЩИЙ ПОЛЬЗОВАТЕЛЬ() сообщает, как вам было разрешено пройти аутентификацию в 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 x@'%';
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() |
+---------------+----------------+
| rol@localhost | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

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

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

64

Когда вы печатаете 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-адрес вашего ящика.

14

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

mysql -u mike -p mypass

Пробелы Очевидно, допускается между -u # uname #, но НЕ между -p и # паролем #

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

mysql -u mike -pmypass

В противном случае с пробелом между -p mypass MySQL принимает «Mypass» в качестве децибел название

14

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

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

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

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

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

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

mysql> обновить пользовательский набор password = пароль (‘root123’), где user = ‘root’;
Запрос в порядке, затронуто 3 строки (0,00 сек)
Строк совпало: 3 Изменено: 3 Предупреждений: 0

6: флеш

mysql> сброс привилегий;

7: выйти

mysql> выход
до свидания

8: перезапустите MySQL

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

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

[root@cy400 ~]# 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
14

Избавьте себя от ОСНОВНОЙ головной боли … Ваша проблема может заключаться в том, что вы пропускаете кавычки вокруг пароля. По крайней мере, это был мой случай, который отвлек меня на 3 часа.

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

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

Найдите «Вот типичный файл опций пользователя:» и посмотрите пример, в котором они изложены. Удачи, и я надеюсь сэкономить кому-то еще время.

13

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

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

12
По вопросам рекламы [email protected]