MySQL用户主机网络

时间:2012-08-03 10:36:05

标签: mysql

数据库如何评估MySQL用户的主机?我的服务器尝试从myhostname连接到数据库,但即使我在/etc/hostname中设置了该服务器的主机名,它也会失败。但是当我使用IP时,它确实有效。

用户创建如下:

GRANT ALL ON db.* TO 'dude'@'myhostname';

2 个答案:

答案 0 :(得分:3)

MySQL错误将告诉您用户正在连接的服务器计算机认为的主机名。根据DNS设置,这可能是您的客户认为分配给自己的主机名,也可能不是。从服务器看到的名称​​是您需要在GRANT语句中设置的名称。

(这是合乎逻辑的。假设我知道服务器授予托管Alice的权限。我有托管Bob。由于它是我的主机,我可以将其名称更改为Alice。如果只是这样做我爱丽丝的特权,整个GRANT计划将完全不安全!我的主机认为它是爱丽丝,但服务器看到我的IP,询问DNS“这是谁?”并收到“他是鲍勃”。我仍然可以窃取Alice的特权,但我需要compromise the DNS records以某种方式)

在紧要关头,将客户端IP和主机名添加到服务器/etc/hosts文件中。然而,这是一个黑客攻击,正确的DNS设置是可行的方法:一个被遗忘的hosts黑客可能会花费你很长一段时间在头脑中搔痒几个月。

答案 1 :(得分:1)

正如MySQL手册DNS Lookup Optimization and the Host Cache中所述:

  

如果操作系统支持,则服务器使用线程安全的gethostbyaddr_r()gethostbyname_r()调用执行主机名解析。否则,执行查找的线程会锁定互斥锁并调用gethostbyaddr()gethostbyname()

因此,将连接IP解析为myhostname是操作系统的问题,而不是MySQL。您应首先确定您的操作系统正确解析客户端IP,如果没有,请调试您的操作系统或名称服务配置(关于此主题的问题可能更好地指向Super UserSever Fault,而不是StackOverflow)