0

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

用户是这样创建的:

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

2 回答 2

3

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

(这是合乎逻辑的。假设我知道服务器授予 Alice 的权限。我有主机 Bob。由于它是的主机,我可以将其名称更改为 Alice。如果只是这样做授予我 Alice 的权限,整个GRANT方案将完全不安全!发生的情况是我的主机认为是 Alice,但服务器看到我的 IP,询问 DNS “这是谁?”并收到“他是 Bob”。我仍然可以窃取 Alice 的权限,但我需要破坏 DNS 记录不知何故)

紧要关头,将客户端 IP 和主机名添加到服务器/etc/hosts文件中。然而,这是一个 hack,正确的 DNS 设置是要走的路:一个被遗忘的hostshack 可能会让你在接下来的几个月里费尽心思。

于 2012-08-03T10:45:08.523 回答
1

如MySQL 手册中的DNS 查找优化和主机缓存中所述:

服务器使用线程安全执行主机名解析,gethostbyaddr_r()gethostbyname_r()在操作系统支持时调用。否则,执行查找的线程将锁定互斥体并调用gethostbyaddr()andgethostbyname()代替。

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

于 2012-08-03T10:49:02.453 回答