连接MySQL数据库时主机名不符导致权限拒绝的问题求助
先梳理下你的环境和遇到的问题:
- 完整计算机名称:AIS127.ABC.com
- 域:ABC.com
- MySQL已配置用户条目:主机:ais127.ABC.com,用户:root
你遇到的连接异常日志如下:
java.sql.SQLException: Cannot create PoolableConnectionFactory (Access denied for user 'root'@'ais126.ABC.com' (using password: YES))
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2195)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1945)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412)
at common.DBManager.getConnection(DBManager.java:80)
at common.DBManager.getRecCSVInfo(DBManager.java:238)
核心问题拆解
一眼就能看出关键矛盾:你在MySQL里给root@ais127.ABC.com开了权限,但你的应用实际是以root@ais126.ABC.com的身份发起连接请求,MySQL自然会拒绝这个未授权的访问。这说明你的机器/应用使用的主机名和你预期的AIS127不匹配,大概率是主机名解析、应用配置或本地网络设置出了问题。
两种可行解决方案
方案1:直接给root@ais126.ABC.com授权
如果确认ais126.ABC.com是你当前机器的有效身份(比如存在主机别名、DNS解析指向),可以直接在MySQL中补全权限:
-- 切换到系统权限库 USE mysql; -- 授予对应权限(示例为全权限,可根据实际需求调整范围) GRANT ALL PRIVILEGES ON *.* TO 'root'@'ais126.ABC.com' IDENTIFIED BY '你的数据库密码'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
方案2:排查并修正主机名/应用配置
如果ais126.ABC.com不是你预期的主机名,建议按以下步骤排查:
- 验证本地主机名:Windows执行
cmd输入hostname,Linux执行hostname -f,确认输出是否为AIS127.ABC.com - 检查应用连接配置:查看
DBManager类或相关配置文件(如db.properties),确认数据库连接URL中的主机参数是否误写为ais126 - 排查DNS/hosts文件:检查本地hosts文件或DNS服务器,确认
AIS127.ABC.com的解析记录是否被错误指向ais126
内容的提问来源于stack exchange,提问作者pooja

