You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:02:08