Назад | Перейти на главную страницу

Создание нового пользователя MySQL… пароль и привилегии не сохраняются

Подключаясь к MySQL через клиент командной строки как «root», я пытаюсь создать пользователя MySQL с помощью следующих команд:

mysql> create user 'myuser'@'%' identified by 'mypass';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on MY_DATABASE.* to 'myuser'@'%' identified by 'mypass';
Query OK, 0 rows affected (0.00 sec)

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

Пользователь создан, но его пароль и привилегии не «прилипают». Когда я пытаюсь войти, используя пароль, я получаю сообщение об ошибке:

~$ mysql -u myuser -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)

Однако я МОГУ войти, просто нажав [ввод] без пароля:

~$ mysql -u myuser -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 95
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)

Copyright (c) 2000, 2012, 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> 

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

Кто-нибудь знает, что мне здесь не хватает? Спасибо!

ОБНОВИТЬ: Публикация содержимого из таблицы mysql.user, как указано в комментариях:

mysql> select User, Host, Password from mysql.user;
+------------------+---------------------+-------------------------------------------+
| User             | Host                | Password                                  |
+------------------+---------------------+-------------------------------------------+
| root             | localhost           | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| root             | 127.0.0.1           | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| root             | ::1                 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
|                  | localhost           |                                           |
| debian-sys-maint | localhost           | *817684763DD0B095B4703EC55053DAB57A2D9F4F |
| phpmyadmin       | localhost           | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| myuser           | %                   | *C5250F20FB991AA969917726DE6547D425DB3234 |
+------------------+---------------------+-------------------------------------------+

У вас есть анонимный пользователь для localhost, и у этого анонимного пользователя нет пароля.

Необходимо наличие обоих (% и localhost) учитывает ваши myuser чтобы иметь возможность подключаться из любого места как myuser. Без учетной записи localhost anonymous user учитывать localhost что создано mysql_install_db будет иметь приоритет, когда myuser подключается от localhost. В следствии, myuser будет рассматриваться как anonymous user. Причина этого в том, что учетная запись анонимного пользователя имеет более конкретное значение столбца Host, чем myuser'@'%' account и, таким образом, идет раньше в порядке сортировки пользовательской таблицы.

О порядке сортировки:

Сервер использует правила сортировки, которые сначала упорядочивают строки с наиболее конкретными значениями Host. Буквальные имена хостов и IP-адреса являются наиболее точными. (Специфика буквального IP-адреса не зависит от того, есть ли у него сетевая маска, например, 192.168.1.13 и 192.168.1.0/255.255.255.0 считаются одинаково специфичными.) '%' средства "any host" и наименее конкретен. Пустая строка '' также значит "any host" но сортирует после '%'. Строки с одинаковым значением Host упорядочиваются в первую очередь с наиболее конкретными значениями User (пустое значение User означает "any user" и наименее конкретен).

Так mysql рассматривает ваш myuser как anonymous user и поскольку anonymous user для localhost нет пароля, он может войти без пароля.

Чтобы решить вашу проблему, вам просто нужно создать localhost пользователь для вашего myuser с паролем