如何使用 Maxscale 设置 MySQL 用户

How to setup MySQL users with Maxscale

我正在设置一个带有 2 个前端服务器的 3 节点 (MariaDB 10.4) Galera 集群。

在这些前端服务器中的每一个中,还有一个 Maxscale 6 守护程序。

[listener]
type=listener
service=readwritesplit
protocol=MariaDBClient
address=127.0.0.1
port=3306

所有这些服务器都在 10.1.0.0/24 网络内。

在 MariaDB,我创建了像 CREATE USER 'user'@'10.1.0.%' 这样的用户,但这些用户无法进行身份验证。

Authentication failed for user 'user'@[127.0.0.1] to service 'readwritesplit'. Originating listener: 'listener'. MariaDB error: 'Access denied for user 'user'@'127.0.0.1' (using password: YES)'.

所以我 RENAME 'user'@'10.1.0.%' TO 'user'@'127.0.0.1'。另一个身份验证错误。

maxscale[1109436]: Authentication to 'node1' failed: 1045, #28000: Access denied for user 'user'@'frontal1' (using password: YES)

我最后 RENAME 'user'@'10.1.0.%' TO 'user'@'%'。当然在这里一切都很好。

只要所有服务器都在 10.1.0.% 网络上,为什么用户 'user'@'10.1.0.%' 无法验证?

如果您想从本地主机访问(即 127.0.0.1),您要么需要两个独立的用户('user'@'127.0.0.1''user'@'10.1.0.%'),要么需要一个涵盖他们两者的授权( 'user'@'%')。更详细的描述可以在 MaxScale tutorial.

中找到

您可以使用 MariaDB 中的 proxy_protocol feature in MaxScale. This would allow you to define users only once with the exact IP address they come from and let the proxy-protocol-networks 变量来控制 MaxScale 的身份验证处理,从而大大简化哪些 MaxScale 实例可以充当代理。


错误 'user'@'127.0.0.1' 意味着客户端试图从本地主机连接,即通过连接到环回地址。 10.1.0.% 主机未涵盖此内容,主机解释了失败的原因。

将用户转换为 'user'@'127.0.0.1' 后,客户端和 MaxScale 之间的本地登录有效,但后端服务器拒绝了身份验证,因为 MaxScale 主机不再匹配授权网络 (127.0.0.1) .

使用 % 主机会导致所有地址匹配,这就解释了解决问题的原因。