docker 中的 MariaDB - 设置授权以限制容器主机名的访问

docker 中的 MariaDB - 设置授权以限制容器主机名的访问

我的 Swarm 集群上运行着一个 MariaDB 容器,它为多个应用程序提供服务,每个应用程序都在自己的容器中运行,并通过专用网络(内部和可连接)连接到数据库。容器之间的所有通信都运行正常,我能够从应用程序容器成功建立数据库连接,只要将该用户的授权设置为通配符(即“user”@“%”)。

我的问题在于使用 GRANT 语句限制对容器中托管的各种数据库的访问,就像我们通常在非容器化环境中所做的那样。容器可以使用其服务配置中定义的网络别名相互 ping/telnet。连接到数据库时,MariaDB 将远程主机名视为网络“端点”的 IP,而不是启动连接的容器的 IP 或主机名(也不是容器的网络端点)。这使得无法设置授权语句来限制通过典型的 user@host 凭据访问给定数据库或表。我无法指定网络端点,因为在容器连接到网络之前它不存在。

其他人是否找到了解决此问题的方法?理想情况下,我们可以根据容器的主机名或网络别名来限制访问,但我也愿意接受其他方法。

答案1

首先确保你可以通过 docker swarm 进行名称服务解析(从未使用过 swarm,但任何像 k8s、opensvc 等合适的编排器都建议使用这种服务)。mariadb 需要它来对连接到数据库的客户端进行反向 DNS 查找。

其次,确保您skip-name-resolve的 mariadb 配置中没有启用参数。

完成后,mariadb 应该会接受“user@fqdn”授权

相关内容