正在创建新的 MySQL 用户...密码和权限不存在

Ste*_*ins 4 mysql

通过命令行客户端以“root”身份连接到 MySQL,我正在尝试使用以下命令创建一个 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)
Run Code Online (Sandbox Code Playgroud)

用户已创建,但其密码和权限并未“固定”。当我尝试使用密码登录时,出现错误:

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

但是,我可以在没有密码的情况下按 [enter] 登录:

~$ 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> 
Run Code Online (Sandbox Code Playgroud)

尽管如此,用户还是看不到任何表......所以不仅密码无法持久,而且我设置的权限也丢失了。

有谁知道我在这里想念什么?谢谢!

更新: 根据评论中的要求,从 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 |
+------------------+---------------------+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

Suk*_*uku 6

您有一个 localhost 的匿名用户,而该匿名用户没有任何密码。

必须同时拥有 (%localhost) 帐户myuser才能从任何地方以myuser. 没有localhost账户,该anonymous user帐户localhost由创建 mysql_install_db将优先考虑时myuser从所连接 localhost。因此,myuser将被视为anonymous user. 其原因是匿名用户帐户具有比myuser'@'%'帐户更具体的主机列值,因此在用户表排序顺序中更早。

关于排序顺序:

服务器使用排序规则,首先对具有最特定主机值的行进行排序。文字主机名和 IP 地址是最具体的。(文字 IP 地址的特殊性不受它是否具有网络掩码的影响,因此例如192.168.1.13192.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 的密码创建一个用户