mysql 如何确定其客户端的主机名?

Lui*_*len 15 mysql user-permissions

我正在尝试创建一个 MySQL 用户,该用户只能从特定主机名连接到 MySQL 数据库。

将 db_name.* 上的所有内容授予由“some_passwd”标识的“user_name”@“appserver-lan.mydomain.com”

通过查看mysql db上的user表,可以看到用户创建成功:

使用mysql;select * from user where User='user_name' and Host='appserver-lan.mydomain.com'

或者

显示“用户名”@“appserver-lan.mydomain.com”的授权

我指定的主机名是 amazon-ec2 名称的别名,当 AWS DNS 服务器解析时会生成 LAN 地址:

[root@db_server ~] # 主机 appserver-lan.mydomain.com

appserver-lan.mydomain.com 是 ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com 的别名 ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com 的地址为 10.xxx .xxx.xxx

问题是,当我尝试从这个 appserver-lan 连接到数据库 LAN IP 时,尽管密码正确,但我收到了拒绝访问错误。这里奇怪的是,错误中显示的主机名不是我在创建用户时指定的主机名:

错误 1045 (28000):用户“user_name”@“ appserver.mydomain.com ”的访问被拒绝(使用密码:是)

所以,我的问题是:mysql 如何确定客户端主机名?我相信它不是通过反向 DNS 查找来实现的,因为我检查过并且它既没有指向“appserver.mydomain.com”,也没有指向“appserver-lan.mydomain.com”。此外,db 服务器在 /etc/hosts 上没有与 appserver 相关的条目。

总而言之,我很确定这是一个主机名解析问题,因为授予主机“%”或 LAN IP 的权限工作得很好。

对我缺少的东西有什么想法吗?

Zor*_*che 15

它使用反向 DNS 查找。它获取客户端的 IP 地址并使用为该名称返回的任何 PTR 记录。

在我看来,基于名称进行身份验证根本不是很有用,我建议您考虑使用 IP 地址。

请参阅有关Mysql如何使用 DNS 的文档。