数据库如何评估MySQL用户的主机?我的服务器尝试从myhostname
连接到数据库,但即使我在/etc/hostname
中设置了该服务器的主机名,它也会失败。但是当我使用IP时,它确实有效。
用户创建如下:
GRANT ALL ON db.* TO 'dude'@'myhostname';
答案 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 User或Sever Fault,而不是StackOverflow)