使用FQDN标识用户远程连接MySQL数据库遭IP权限拒绝问题求助
解决MySQL远程连接权限问题:Host 'xxx' is not allowed to connect
Hey there, let's sort out this MySQL connection issue for you!
先明确你的疑问:权限验证是在服务器端进行的
MySQL的所有权限检查逻辑**完全在远程服务器(remotehost.domain.com)**上执行,客户端(pc.domain.com)只是发送连接请求,服务器会负责核对你的用户身份、权限以及来源是否合法,所以问题出在服务器的用户权限配置上。
问题根源
你创建了'user'@'pc.domain.com'的用户,但服务器收到连接请求时,识别到的来源是IP 128.0.200.82,而不是域名pc.domain.com。这通常是因为:
- 服务器的DNS反向解析没有把
128.0.200.82映射到pc.domain.com; - 或者MySQL的
skip_name_resolve配置开启了(这个配置会让服务器直接用IP识别客户端,不做域名解析)。
不管哪种情况,服务器都会用IP去匹配mysql.user表中的用户条目,而你没有创建'user'@'128.0.200.82'这个用户,所以就触发了拒绝连接的错误。
解决方案
这里有几个实用的修复方法,按需选择:
直接创建绑定该IP的用户
如果你的客户端IP是固定的,这是最稳妥的方式:-- 创建用户 CREATE USER 'user'@'128.0.200.82' IDENTIFIED BY 'pass'; -- 授予对应权限(替换your_database为实际数据库名,权限范围按需调整) GRANT ALL PRIVILEGES ON your_database.* TO 'user'@'128.0.200.82'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;允许整个域名段的客户端连接
如果你的客户端IP是动态的,或者想让domain.com下的所有机器都能连接,可以用通配符:CREATE USER 'user'@'%.domain.com' IDENTIFIED BY 'pass'; GRANT ALL PRIVILEGES ON your_database.* TO 'user'@'%.domain.com'; FLUSH PRIVILEGES;检查并配置DNS反向解析(可选)
如果你坚持要用域名绑定用户,可以联系服务器的DNS管理员,确保128.0.200.82的反向解析记录指向pc.domain.com。不过这个操作比较繁琐,不如前两种方法直接。
额外小提示
你可以登录远程MySQL服务器,执行下面的命令查看当前存在的用户条目,确认你的配置是否正确:
SELECT user, host FROM mysql.user WHERE user = 'user';
内容的提问来源于stack exchange,提问作者Lucas Noetzold
相关产品推荐
相关产品推荐

