我遇到了这个奇怪的问题。我们有一个带有 2 个 NIC 的 ubuntu 12.04 服务器。一个公共的 172.30.1.1,另一个是 192.168.1.1 的私有。我们有一个正在运行的MySQL服务器。在/etc/mysql/my.conf
,我们有bind-address = 0.0.0.0
。
将创建一个表并授予权限。
CREATE DATABASE db;
GRANT ALL ON db.* TO 'user0'@'%' IDENTIFIED BY 'password';
GRANT ALL ON db.* TO 'user0'@'localhost' IDENTIFIED BY 'password';
主机名是"myhost",它在/etc/hostname
中。 /etc/hosts
有
127.0.0.1 localhost
127.0.1.1 myhost
192.168.1.1 myhost
当我连接 172.30.1.1 时,很好。但是当我使用 192.168.1.1 时,访问被拒绝。 mysql -h 192.168.1.1 -uuser0 -ppassword
ERROR 1045 (28000): Access denied for user 'user0'@'myhost' (using password: YES)
我有这样的用户表。
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| user0 | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| debian-sys-maint | localhost |
| user0 | localhost |
| root | localhost |
| | myhost |
| root | myhost |
+------------------+-----------+
我观察到不同之处在于/etc/hosts
文件中有192.168.1.1 myhost
行; 而不是 172.30.1.1。如果我删除该行或更改 IP 后的主机名,它将正常工作。如果我将172.30.1.1 myhost
添加到/etc/hosts
,则无法连接172 IP。如何解释这一点?
通常匿名用户(空用户名)具有这样的效果。在表中查找匹配项mysql.user
首先找到''@myhost
(因为''
匹配每个用户),'user0'@'%'
将被忽略。
最佳做法是删除空用户名。