mysql如何反向解析IP地址?

时间:2018-03-08 15:59:19

标签: mysql

我们重启了一台运行mysql的机器,我们遇到了一些奇怪的问题。来自其他机器的大多数进程都可以毫无问题地连接到它们。如果我们明确地通过环回地址连接,我们也可以在本地连接。

这有效:

mysql -hlocalhost -utest_user -psecret_password

当我们运行命令时:

mysql -h192.168.1.10 -utest_user -psecret_password
在本地机器上我们收到以下错误:

ERROR 1045 (28000): Access denied for user `test_user`@`SERVER_123`

我们有以下用户:

test_user@localhost
test_user@%

我们已通过添加以下用户修复了此问题:

test_user@SERVER_123

其中SERVER_123是机器的非限定名称。 我们不知道为什么我们必须添加额外的用户,我们不想保留它,但我们也不知道为什么添加它会解决问题。

为什么从本地计算机通过IP(即mysql -ha.bcd -utest_user -ppsswd)连接无法与test_user@%用户匹配,但是匹配test_user@machine_name,其中machine_name是不合格的机器的名称?

这是用户表

anonymous    %
anonymous    SERVER_123
anonymous    localhost
test_user_2  %
test_user_3  %
root         ::1
root         127.0.0.1
root         SERVER_123
root         localhost

注意:找出问题所在。以某种方式重启机器必须改变192.168.1.10如何解决,以便它解析为SERVER_123。然后导致登录从192.168.1.10匹配test_user @ SERVER_123

4 个答案:

答案 0 :(得分:5)

我将查看MySQL文档的这一部分中的排序规则:https://dev.mysql.com/doc/refman/5.7/en/connection-access.html

  

传入连接的客户端主机名和用户名可以匹配用户表中的多行。

可能是您的用户被识别为具有不同密码的另一个用户。您的用户表中还有哪些其他条目?

根据新信息进行更新:您的登录信息被识别为“@”%'用户。此用户具有不同的凭据,或者缺少必要的权限。

答案 1 :(得分:3)

您可以按照MySQL文档here进行操作,该文档讨论了DNS查找优化以及如何实现这一过程的过程。从文档中指出一点如下:

  

MySQL服务器在内存中维护一个主机缓存,其中包含有关客户端的信息:IP地址,主机名和错误信息。服务器将此缓存用于非本地TCP连接。它不使用缓存来建立使用环回接口地址(127.0.0.1或:: 1)建立的TCP连接,也不使用使用Unix套接字文件,命名管道或共享内存建立的连接。

还有一点可以帮助您解决这个问题,即引入以下参数:

skip-name-resolve

您可以按照此处的文章提示MySQL根据IP地址或主机名进行身份验证 - 文章链接here

  

默认情况下,MySQL根据IP地址或主机名授予用户身份验证。当存在来自特定主机的连接时,MySQL会执行反向DNS查找并比较主机名和IP地址。

希望这有助于回答你的问题!

答案 2 :(得分:3)

首先请记住,只有 127.0.0.1,:: 1,localhost等... 被视为环回地址 192.168.1.10或SERVER_123 ,因为您可能接受。

是的! 192.168.1.10 应匹配通配符主机,但遗憾的是,在test_user_2和test_user_3旁边,我没有在提供的用户表数据中看到 test_user 条目。

此外,在Linux上,您可以使用/etc/hosts文件将IP地址映射到主机名

答案 3 :(得分:1)

发现了这个问题。有一个匿名用户在特定用户之前匹配。我不确定重启过程中发生了什么导致反向解析改变,但我们有一个用户'''SERVER_123',它必须已经开始匹配。删除匿名用户解决了问题,我们不再需要拥有test_user@SERVER_123的权限。