MaxScale连接MariaDB报ERROR 1045权限拒绝问题求助
问题分析与解决方案
核心问题
应用服务器通过MaxScale连接写服务(3309端口)时出现认证失败,原因是MaxScale默认会透传客户端真实IP给后端数据库。后端masterDB仅存在client@192.168.30.145账号,但数据库收到的请求源IP是应用服务器的192.168.30.161,导致账号匹配失败。
推荐解决方案(禁用IP透传)
通过修改MaxScale配置,让其使用自身IP作为源地址连接后端,确保后端识别的是MaxScale的IP(192.168.30.145),匹配已有的client@192.168.30.145账号,同时严格控制从库权限:
1. 修改MaxScale配置文件
编辑MaxScale配置,在读写服务中添加IP透传禁用配置和源地址指定:
[Write-Service] type=service router=readconnroute router_options=master,preserve_source=false # 禁用客户端IP透传 servers=masterDB user=maxscale password=alj123 source_address=192.168.30.145 # 指定MaxScale连接后端的源IP [Read-Service] type=service router=readconnroute router_options=slave,preserve_source=false servers=replicaDB1, replicaDB2, replicaDB3 user=read password=alj123 source_address=192.168.30.145
2. 在从库创建受限的client账号
在所有replicaDB上创建client@192.168.30.145账号,仅授予SELECT权限:
CREATE USER 'client'@'192.168.30.145' IDENTIFIED BY '你的client用户密码'; GRANT SELECT ON *.* TO 'client'@'192.168.30.145'; FLUSH PRIVILEGES;
3. 重启MaxScale生效
systemctl restart maxscale
效果说明
- 应用服务器通过3309端口连接时,请求转发至masterDB,使用
client@192.168.30.145账号,具备增删改查权限; - 应用服务器通过3310端口连接时,请求转发至replicaDB,使用
client@192.168.30.145账号,仅能执行SELECT操作; - 应用服务器无法直接连接后端数据库(无对应账号),必须通过MaxScale访问,符合安全需求。
备选解决方案(添加客户端IP账号)
若无需禁用IP透传,可在后端直接添加应用服务器IP对应的client账号,同时区分主从库权限:
1. 在masterDB创建应用服务器IP的client账号
CREATE USER 'client'@'192.168.30.161' IDENTIFIED BY '你的client用户密码'; GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'client'@'192.168.30.161'; FLUSH PRIVILEGES;
2. 在replicaDB创建应用服务器IP的client账号(仅读权限)
CREATE USER 'client'@'192.168.30.161' IDENTIFIED BY '你的client用户密码'; GRANT SELECT ON *.* TO 'client'@'192.168.30.161'; FLUSH PRIVILEGES;
注意事项
此方式下应用服务器可直接连接后端数据库,需通过防火墙限制应用服务器仅能访问MaxScale的3309/3310端口,禁止直接访问后端3306端口。
内容的提问来源于stack exchange,提问作者hekke
相关产品推荐
相关产品推荐

