2012-08-03 83 views
0

数据库评估MySQL用户的主机是如何评估的?我的服务器试图从myhostname连接到数据库,但是即使我已经在/etc/hostname中设置了该服务器的主机名,但它仍然失败,但它在我使用IP时起作用。MySQL用户主机网络

用户创建像这样:

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

'/ etc/hostname'是针对本地机器的,将myhostname添加到'/ etc/hosts'以绕过DNS的查找IP – lynks 2012-08-03 10:39:51

+0

您完成了'FLUSH PRIVILEGES'吗? – Omesh 2012-08-03 10:41:13

回答

3

MySQL的错误会告诉你服务器计算机认为您的用户从连接的主机名。根据DNS设置,这可能是也可能不是客户认为分配给自己的主机名。从服务器看到的名称是您需要在您的GRANT声明中设置的名称。我想知道服务器授予Alice的特权,我有主机Bob,因为它是我的主机,所以我可以改名为Alice,如果这样做给了我Alice的权限,整个GRANT计划将是完全不安全的!会发生什么是我的主机认为它是爱丽丝,但服务器看到我的IP,问DNS“这是谁?”,并收到“他是鲍勃”我仍然可以窃取爱丽丝的特权,但我需要以某种方式compromise the DNS records

在捏,将客户端IP和主机名添加到服务器/etc/hosts文件。然而,这是一个黑客攻击,而正确的DNS设置是一条可行的路线:一个被遗忘的hosts黑客可能会花费你很长时间在头上搔抓几个月。

1

由于从MySQL手册中DNS Lookup Optimization and the Host Cache解释说:

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

因此,连接IP到myhostname的解决方案是操作系统而不是MySQL的问题。您应该首先确定您的操作系统正确解析客户端IP,如果没有,则调试您的操作系统或名称服务配置(有关此主题的问题可能更适合Super UserSever Fault,而不是StackOverflow)。