MySQL:用户'user'@'IP_ADDRESS'访问被拒绝 - 对于一些主机允许远程访问失败于其他主机

3
背景: 我能从某些子网访问mysql实例,但从另外一些子网则不行。至少看起来是这样的。 网络10.0.21.xx上的计算机可以连接到MySQL实例。但是从10.0.7.xx,我会得到"Access denied for user using password"错误信息。有趣的是,MySQL安装在与无法验证用户的计算机相同的子网(10.0.7.xx)上。
以下是我执行的命令:
 mysql -u user -h 10.0.7.21 -p

我遇到的错误是

ERROR 1045 (28000): Access denied for user 'user'@'10.0.7.30' (using password: YES)

我已经检查了 /etc/mysql/my.cnf 文件,并确保mysqld监听所有IP地址。我还检查了授权权限,以确保它不与特定的IP地址绑定。
如果有人能给我更多的见解,我将不胜感激。如果您需要我添加额外的信息,请告诉我。
谢谢阅读。

1
请检查您正在使用的用户帐户。它是否设置为允许从10.0.7.x访问。 - RiggsFolly
记住,MySQL用户账户有一个允许登录的域名,因此CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';只能从localhost登录。所以尝试将账户修改为类似CREATE USER 'finley'@'10.0.%' IDENTIFIED BY 'some_pass';的形式。 - RiggsFolly
1
还有一个问题,你说MYSQL已经安装在10.0.7.xx上,但是当你使用mysql -u user -h 10.0.6.21 -p连接到MySQL服务器时,你连接的是10.0.6.21 - RiggsFolly
我已经在命令中更正了IP地址。它应该是10.0.7.21。在MySQL.user表中,主机设置为'%',因此它应该接受来自所有主机的连接。 - Amin
2个回答

4
原来问题出在DNS上。我查看了MySQL文档,发现其中提到:

如果您在连接时指定了主机名,但是错误信息中未显示主机名或者显示的是IP地址,则说明MySQL服务器在尝试将客户端主机的IP地址解析为名称时出现了错误:

文档中提供的解决方案之一是刷新DNS主机缓存;但在我的情况下,我没有这张表。
以下是文档中推荐的修复方法:

一些永久性解决方案包括:

  • 确定DNS服务器存在什么问题并进行修复。

  • 在MySQL授权表中指定IP地址而不是主机名。

  • 在Unix的/etc/hosts或Windows的\windows\hosts中为客户端机器名称添加条目。

  • 使用--skip-name-resolve选项启动mysqld。

  • 使用--skip-host-cache选项启动mysqld。

在我的情况下,我将本地DNS服务器的IP地址添加到客户端的/etc/resolv.cnf文件中,然后重新启动了网络服务(service networking restart)。

0
从你的错误消息中获取主机名,并将其添加到远程SQL主机访问列表中。
如果你的错误消息是Access denied for user 'user'@'10.0.7.30' (using password: YES),那么主机名是10.0.7.30
将其添加到你的远程主机访问列表中,你就可以连接了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接