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


14

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

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

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

使用mysql; 从用户中选择*,其中User ='user_name'和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时,尽管密码正确,但我收到拒绝访问错误。奇怪的是,错误中显示的主机名不是我在创建用户时指定的主机名:

ERROR 1045(28000):拒绝访问用户'user_name' @ ' appserver.mydomain.com '(使用密码:YES)

因此,我的问题是:mysql如何确定客户端主机名?我相信通过反向DNS查找不会做到这一点,因为我进行了检查,它也没有指向“ appserver.mydomain.com”,也没有指向“ appserver-lan.mydomain.com”。此外,数据库服务器在/ etc / hosts上没有与appserver相关的条目。

总而言之,我很确定这是一个主机名解析问题,因为为主机“%”或LAN IP授予特权就可以了。

关于我所缺少的任何想法?


您为什么认为它不是反向DNS?当您这样做时会发生什么host -t PTR 10.1.2.3
Zoredache

host -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpa域名指针ip-10-xxx-xxx-xxx.ec2.internal。如您所见,这不是错误消息(appserver.mydomain.com)中显示的主机名,这使我认为MySQL没有在进行反向查找。
路易斯·费尔南多·阿伦

Answers:


13

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

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

有关Mysql如何使用DNS的信息,请参阅此文档。


感谢您的链接,@ Zoredache。我想避免使用IP地址,因为AWS内部接口使用DHCP且其IP会不时更改(我猜每当服务器启动时),以及它的PTR记录。奇怪的是,由于它使用反向查找,因此应显示“用户@ ip-10-xxx-xxx-xxx.ec2.internal的访问被拒绝”。而不是appserver.mydomain.com ...
路易斯·费尔南多·阿伦

1
您是否可以全部跳过IP /名称身份验证,而是使用基于主机的防火墙,或者设置SSL和基于证书的身份验证?
Zoredache

3

MySQL将在IP地址上进行反向DNS查找以获取主机名。如果您在AWS EC2中运行,则可以为服务器分配一个弹性IP(这不会花费任何额外费用),然后要求亚马逊设置反向DNS,以使弹性IP进入您的主机名。

您的数据库服务器也在EC2中吗?因为如果是这样,它将使用实例的私有IP地址,否则它将使用公共ip地址。从您的发布看来,您的appserver-lan是分配给您服务器的10.XXX.XXX.XXX私有IP,而不是Putlic IP。

我不确定与其他区域通信时将使用哪个IP地址,因为我只有同一区域内的服务器。


是的,它也位于EC2上,并且位于同一区域。谢谢你的提示,安迪。我不知道EC2实例使用内部IP在它们之间进行通信,即使您为通信指定了有效IP。那解决了我的问题=]
路易斯·费尔南多·阿伦

3

我刚遇到类似的问题,其中mysql服务器似乎在错误地进行反向DNS查找。

我遇到的问题是服务器具有对'user'@'1.2.3.4'以及'user'@'reverse.dns'的权限。仅具有IP地址的用户具有最小权限,但是mysql服务器正在使用该用户的权限,而不是具有主机名的用户的权限,并返回消息“用户'user'@'1.2.3.4'的访问被拒绝”。删除具有IP地址的用户可以解决此问题,并迫使服务器使用主机名上的其他用户。


0

我还看到IPV4和IPV6主机名和IP地址不匹配,以及仅将主机名用于用户权限的问题。例如,在有IPV6反向DNS但没有前向IPV6 DNS的地方。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.