通过命令行客户端以“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)
用户已创建,但其密码和权限未“保留”。当我尝试使用密码登录时,出现错误:
~$ mysql -u myuser -p
Enter password:
ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)
但是,我只需按 [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>
但是,用户仍然看不到任何表……所以不仅密码无法保留,而且我设置的权限也丢失了。
有人知道我这里遗漏了什么吗?谢谢!
更新: 按照评论的要求,从 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 |
+------------------+---------------------+-------------------------------------------+
答案1
您有一个 localhost 的匿名用户,并且该匿名用户没有任何密码。
您必须同时拥有(
%
和localhost
)帐户才能以 的身份myuser
从任何地方进行连接myuser
。如果没有 localhost 帐户,则从连接 时,由 创建的anonymous user
帐户将优先。因此,将被视为。原因是匿名用户帐户比帐户具有更具体的 Host 列值,因此在用户表排序顺序中排在更前面。localhost
mysql_install_db
myuser
localhost
myuser
anonymous user
myuser'@'%'
关于排序顺序:
服务器使用排序规则,将具有最具体 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
设置密码