如何在Maxscale环境下配置MariaDB Galera集群的用户访问权限
问题原因解析
这个问题的核心是Maxscale的认证分为两个独立阶段,两个阶段的请求来源地址不一样,你配置的单网段权限无法同时满足两个阶段的匹配规则:
- 第一阶段:客户端到Maxscale Listener
你配置的Listener监听地址是127.0.0.1,说明业务客户端是部署在前端服务器本地,访问Maxscale时的来源IP就是127.0.0.1,不在你一开始配置的10.1.0.0/24网段范围内,所以Maxscale在第一阶段校验用户权限时就直接拒绝了访问,对应你收到的第一个报错。 - 第二阶段:Maxscale到后端Galera节点
当你把用户来源改为127.0.0.1后,第一阶段客户端到Maxscale的认证通过,但接下来Maxscale需要使用相同的用户凭证去向后端Galera节点发起连接,此时请求的来源IP是前端服务器的10.1.0.x网段IP,如果后端MariaDB开启了主机名反向解析,就会把这个IP解析为frontal1主机名,和你配置的127.0.0.1不匹配,因此触发第二个报错。
当你把用户来源改为%(允许所有地址访问)后,两个阶段的来源地址都能匹配权限规则,因此认证恢复正常。
推荐修复方案
- 方案一:调整Listener监听地址
将Maxscale的Listener监听地址改为前端服务器的10.1.0.x网段IP,而非127.0.0.1,同时在后端MariaDB创建用户'user'@'10.1.0.%',两个认证阶段的来源IP都属于10.1.0.0/24网段,可直接匹配权限规则。 - 方案二:配置多来源同权限用户
如果你必须保留Listener监听127.0.0.1的配置,可以在后端MariaDB创建两个权限完全一致的用户即可:
CREATE USER 'user'@'127.0.0.1' IDENTIFIED BY '你的密码'; CREATE USER 'user'@'10.1.0.%' IDENTIFIED BY '你的密码'; -- 给两个用户授权相同的库表权限
- 额外优化:建议在所有Galera节点的MariaDB配置中添加
skip_name_resolve = 1,关闭主机名反向解析,避免IP解析为主机名导致的权限匹配失败问题。
内容的提问来源于stack exchange,提问作者CrazyRabbit
相关产品推荐
相关产品推荐

