MySQL - ОШИБКА 1045 (28000): доступ запрещен для пользователя

9

Я только что установил свежую копию Ubuntu 10.04.2 LTS на новую машину. Я вошел в MySQL как пользователь root:

david@server1:~$ mysql -u root -p123

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

mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

Я проверил таблицу пользователей, чтобы убедиться, что новый пользовательский репл был правильно создан.

mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1   | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1       | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost |                  |                                           |
| server1   |                  |                                           |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| %         | repl             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)

Затем я выхожу, попробуйте войти как пользователь repl, но доступ запрещен.

david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ 

Почему доступ запрещен?

davidjhp
источник
Я только что попытался удалить пользователя и создать с хостом localhost, и это сработало. СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'repl' @ 'localhost' ИДЕНТИФИЦИРОВАНО '123'; Но я не хочу ограничивать пользователя каким-либо хостом, я бы предпочел иметь любой хост.
davidjhp

Ответы:

5

Причина, по которой вы не можете войти repl@'%', связана с протоколом аутентификации пользователя MySQL . Он не охватывает шаблоны пользователей, как можно было бы поверить.

Посмотрите, как вы пытались зайти

mysql -u repl -p123

Поскольку вы не указали IP-адрес, mysql предполагает, что host является localhost, и пытается подключиться через файл сокета. Вот почему сообщение об ошибке говорит Access denied for user 'repl'@'localhost' (using password: YES).

Казалось бы repl@'%', позволит repl@localhost. В соответствии с тем, как MySQL выполняет аутентификацию пользователя , этого никогда не произойдет. Поможет ли это?

mysql -u repl -p123 -h127.0.0.1

Хотите верьте, хотите нет, но mysql попытается repl@localhostснова. Почему? Клиент MySQL видит 127.0.0.1и пытается файл сокета снова.

Попробуйте это так:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp

Это заставит клиента mysql явно использовать протокол TCP / IP. Тогда у него не будет другого выбора, кроме как для пользователя repl@'%'.

RolandoMySQLDBA
источник
4

Вы должны выпустить для localhost, специфичных для него.

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';

И попробуйте подключиться.

Mannoj
источник
1

Проблема в том, что эти две учетные записи добавлены по умолчанию.

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost |                  |                                           |
| server1   |                  |                                           |
+-----------+------------------+-------------------------------------------+

Пустое имя пользователя является подстановочным знаком, поэтому независимо от того, какую учетную запись вы используете, он подходит этому пользователю, если MySQL считает, что вы подключаетесь с локального хоста или с вашего локального имени сервера (в данном случае server1) ... так как у них нет пароля, любой неверный пароль Аутентификация пользователя пробует только первое совпадение, поэтому созданного вами пользователя никогда не заметят, когда вашим хостом является localhost (или имя вашего сервера).

Удалить эти два из mysql. userстол, а затем FLUSH PRIVILEGES;.

Или сценарий mysql_secure_installation может сделать это для вас, хотя я предпочитаю делать вещи вручную.

http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

Майкл - sqlbot
источник
0

Убедитесь, что все поля в соединителе установлены с правильными данными

host = "localhost", user = "CorrectUser", passwd = "coRrectPasswd", база данных = "CorreCTDB"

Также проверьте наличие ошибок в верхнем и нижнем регистре - 1045 не является ошибкой синтаксиса, но имеет отношение к неверным деталям в соединителе

Йохан Свон
источник
0

Возможно, база данных еще не настроена, просто выполните вызов без аргументов:

mysql <enter>

Server version: xxx

Copyright (c) xxx

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

Mysql [(none)]> 

Если Mysql должен быть установлен пароль root, вы можете использовать

mysql_secure_installation
TRicks43
источник
-2

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

Пожалуйста, проверьте эти

myisamchk / var / lib / mysql / mysql / * .MYI

Обычно при проверке или исправлении таблиц myisam мы хотели бы сначала отключить mysql. Если эта проблема все еще не решена, пожалуйста, попробуйте это также.

Если они повреждены, вы можете исправить их, используя

myisamchk --silent --force --fast /path/table-name.MYI

Спасибо,

Масуд

Масуд Алам
источник