数据库评估MySQL用户的主机是如何评估的?我的服务器试图从myhostname
连接到数据库,但是即使我已经在/etc/hostname
中设置了该服务器的主机名,但它仍然失败,但它在我使用IP时起作用。MySQL用户主机网络
用户创建像这样:
GRANT ALL ON db.* TO 'dude'@'myhostname';
数据库评估MySQL用户的主机是如何评估的?我的服务器试图从myhostname
连接到数据库,但是即使我已经在/etc/hostname
中设置了该服务器的主机名,但它仍然失败,但它在我使用IP时起作用。MySQL用户主机网络
用户创建像这样:
GRANT ALL ON db.* TO 'dude'@'myhostname';
MySQL的错误会告诉你服务器计算机认为您的用户从连接的主机名。根据DNS设置,这可能是也可能不是客户认为分配给自己的主机名。从服务器看到的名称是您需要在您的GRANT
声明中设置的名称。我想知道服务器授予Alice的特权,我有主机Bob,因为它是我的主机,所以我可以改名为Alice,如果这样做给了我Alice的权限,整个GRANT
计划将是完全不安全的!会发生什么是我的主机认为它是爱丽丝,但服务器看到我的IP,问DNS“这是谁?”,并收到“他是鲍勃”我仍然可以窃取爱丽丝的特权,但我需要以某种方式compromise the DNS records)
在捏,将客户端IP和主机名添加到服务器/etc/hosts
文件。然而,这是一个黑客攻击,而正确的DNS设置是一条可行的路线:一个被遗忘的hosts
黑客可能会花费你很长时间在头上搔抓几个月。
由于从MySQL手册中DNS Lookup Optimization and the Host Cache解释说:
服务器执行使用线程安全
gethostbyaddr_r()
和gethostbyname_r()
调用操作系统是否支持这些主机名解析。否则,执行查找的线程会锁定互斥锁,并调用gethostbyaddr()
和gethostbyname()
。
因此,连接IP到myhostname
的解决方案是操作系统而不是MySQL的问题。您应该首先确定您的操作系统正确解析客户端IP,如果没有,则调试您的操作系统或名称服务配置(有关此主题的问题可能更适合Super User或Sever Fault,而不是StackOverflow)。
'/ etc/hostname'是针对本地机器的,将myhostname添加到'/ etc/hosts'以绕过DNS的查找IP – lynks 2012-08-03 10:39:51
您完成了'FLUSH PRIVILEGES'吗? – Omesh 2012-08-03 10:41:13