我试图创build一个MySQL用户,只允许从一个特定的主机名连接到MySQL数据库。
将所有db_name。*授予'user_name'@appserver-lan.mydomain.com'由'some_passwd'标识
通过检查MySQL数据库中的用户表,我可以看到用户已成功创build:
使用mysql; select*从用户其中用户='用户名'和主机='appserver-lan.mydomain.com'
- 允许非pipe理员用户closures/重启Server 2012
- Windows 7本地组织高级用户实际上做了什么?
- 限制用户可以使用pipe理员重新启动哪个进程?
- 正在locking一个开发人员的机器比它的价值更多的努力?
- 作为nologin用户执行一个命令
要么
显示'username'@appserver-lan.mydomain.com'
我指定的主机名是amazon-ec2名称的别名,当由AWS DNS服务器parsing时,会生成一个LAN地址:
[root @ db_server〜]#host 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时,虽然密码是正确的,但是我得到一个访问被拒绝的错误。 这里奇怪的是,错误中显示的主机名不是我在创build用户时指定的主机名:
错误1045(28000):访问拒绝用户'user_name'@' appserver.mydomain.com '(使用密码:是)
所以,我的问题是:如何确定客户端主机名? 我相信这不是通过反向DNS查找,因为我检查,它不指向“appserver.mydomain.com”既不指向“appserver-lan.mydomain.com”。 此外,数据库服务器没有与/ etc / hosts上的应用程序服务器相关的条目。
总之,我敢肯定这是一个主机名parsing问题,因为授予主机“%”或局域网IP的权限工作得很好。
任何我想念的想法?
它使用反向DNS查找。 它采用客户端的IP地址,并使用该名称返回的任何PTRlogging。
在我看来,基于名称进行身份validation并不是很有用,我build议您考虑使用IP地址。
请参阅关于Mysql如何使用DNS的文档。
MySQL将在IP地址上进行反向DNS查找以获取主机名。 如果您在AWS EC2中运行,那么您可以为您的服务器分配一个弹性IP(这不会花费任何额外的费用),然后要求亚马逊为弹性IP设置反向DNS以转到您的主机名。
你的数据库服务器也在EC2中吗? 因为如果是这样,它将使用实例的私有IP地址,否则将使用公共IP地址。 从你的post来看,你的appserver-lan是分配给你的服务器的10.XXX.XXX.XXX私有IP,而不是putlic。
我不确定哪个IP地址与不同的区域进行通信,因为我只有同一个区域内的服务器。
我刚刚有一个类似的问题,在那里的MySQL服务器似乎做了反向DNS查找不正确。
我遇到的问题是服务器有'user'@1.2.3.4'以及'user'@'reverse.dns'的权限。 只有IP地址的用户拥有最小的权限,但是mysql服务器正在使用该用户的权限而不是使用主机名的权限,并返回“访问拒绝用户user'@1.2.3.4”。 用IP地址删除用户解决了问题,并强制serer使用主机名上的其他用户。