当我尝试添加新用户时
grant all privileges on retrosias.* to 'rs3'@'%' identified by 'a';
我甚至无法本地连接:
ERROR 1045 (28000): Access denied for user 'rs3'@'localhost' (using password: YES)
如果我使用添加同一个用户
grant all privileges on retrosias.* to 'rs3'@'localhost' identified by 'a';
然后我可以在本地连接,但我真正的需求是从任何计算机连接。
我的服务器版本是
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)
并且我验证了之前添加的用户仍然可以从任何地方连接(因此不是防火墙问题)。
我的错误在哪里?或者有什么解决方法?
答案1
mysql> select User,Host,Password from user;
+------+------------+-------------------------------------------+
| User | Host | Password |
+------+------------+-------------------------------------------+
| root | localhost | *62395BB52702DE50773EBF629DD4AE90F07FFD94 |
| root | sgeorge-mn | |
| root | 127.0.0.1 | *62395BB52702DE50773EBF629DD4AE90F07FFD94 |
| root | ::1 | |
| | localhost | |
| | sgeorge-mn | |
| suku | localhost | *EAF5C8242B88A14545BB61062D64CA5207DD1A37 |
| rs3 | % | *0FDB28C86F3804FCA60FA633DB4264B0EB169D9B |
| rs3 | localhost | *667F407DE7C6AD07358FA38DAED7828A72014B4E |
+------+------------+-------------------------------------------+
9 rows in set (0.00 sec)
必须同时拥有 和 两个
(% and localhost)
帐户才能rs3
从任何地方连接rs3
。如果没有 localhost 帐户,则从 localhost 连接mysql_install_db
时, 创建的 localhost 匿名用户帐户将优先。因此,将被视为匿名用户。原因是匿名用户帐户比帐户具有更具体的 Host 列值,因此在用户表排序顺序中排在更前面。rs3
rs3
'rs3'@'%'
关于排序顺序:
服务器使用排序规则,首先对具有最具体 Host 值的行进行排序。文字主机名和 IP 地址是最具体的。(文字 IP 地址的特异性不受其是否具有网络掩码的影响,因此
192.168.1.13
和192.168.1.0/255.255.255.0
被视为同样具体。)模式'%'
表示“任何主机”,并且最不具体。空字符串''
也表示“任何主机”,但排在后面'%'
。具有相同 Host 值的行按最具体的 User 值排序(ablank User
值表示“任何用户”,且最不具体)。
更多阅读:http://dev.mysql.com/doc/refman/5.5/en/adding-users.html
答案2
重新启动服务器确实完成了既flush privileges
没有完成service stop mysql
也service start mysql
没有完成的事情。
重启之前我添加的所有(许多)用户现在都可以访问了。
并且我现在使用相同命令添加的新用户也可以访问。
我不太愿意接受我的答案。我不知道这是否是 mysql 的已知/常见问题。我不仅要重新启动服务,还要重新启动整个计算机,这真是令人不安。