仅对多NIC系统上的一个IP拒绝mysql访问

时间:2013-09-19 20:00:07

标签: mysql hosts

我遇到了这个奇怪的问题。我们有一个带有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    |
    +------------------+-----------+

我发现差异在于192.168.1.1 myhost文件中有/etc/hosts行;不是172.30.1.1。如果我删除该行或更改IP后的主机名,它将正常工作。如果我将172.30.1.1 myhost添加到/etc/hosts,那么我无法连接172 IP。怎么解释这个?

1 个答案:

答案 0 :(得分:1)

通常匿名用户(空用户名)具有这样的效果。在mysql.user表格中查找匹配项时,首先找到''@myhost(因为''与每个用户匹配),并忽略'user0'@'%'

最佳做法是删除空的用户名。