其他用户无法访问 docker 中的 mariadb,然后是 root

Posted

技术标签:

【中文标题】其他用户无法访问 docker 中的 mariadb,然后是 root【英文标题】:cannot access mariadb in docker by other user then root 【发布时间】:2020-10-11 08:02:46 【问题描述】:

我在 Synology nas 上有一个带有 mariadb 的 docker 容器。 mariadb 版本为 10.4.12。 通过尝试通过最新的 dBeaver 从 linux 客户端访问 mariadb,我得到了以下行为。

从客户端以root用户访问成功。 通过 docker 内部的 root 用户访问成功。 到目前为止一切顺利! 然后我通过以下命令创建了以下用户:
CREATE USER 'myUser'@'%' IDENTIFIED BY 'secretPassword';
GRANT select, update, insert, delete ON mydb.* TO 'myUser'@'%';

在此之后我刷新了权限 使用此用户,我无法从 docker 容器内部登录,也无法从客户端登录。 取决于我尝试过的地方,我得到了“用户'myUser'@'172.17.0.1'的访问被拒绝”。 mariadb 字符集是 UTF8。 mysql.user 中的插件设置为:mysql_native_password 在 /etc/mysql/my.cnf 中,绑定已启用并设置为 0.0.0.0

我尝试使用上面的 listet 命令创建相同的用户,使用 localhost 和 clientIP 也没有成功。 我重新启动了 docker 容器但没有成功。 我将 ALL 授予此用户并再次刷新权限,但没有成功。 我删除了所有 myUser 并创建了具有额外使用权限的 myUser@% new,但也没有成功。 是否知道我可以做什么/如何解决此问题? 任何帮助将不胜感激! 提前谢谢你

【问题讨论】:

【参考方案1】:

我找到了解决办法!! 我为用户使用了一个自动生成的密码:

G(m&>JBR,9ä

这不起作用。 在我将密码更改为新密码后。一切正常! 密码中可以包含哪些字符有任何限制吗?

【讨论】:

如果您从命令行使用密码,&; 字符可能被解释为 shell 元字符。使用单引号来防止这种情况,例如mysql -u myUser -p'G(m&>JBR,9ä'【参考方案2】:

只需去掉“%”

为了更方便,我还添加了几个组合。

CREATE USER 'myUser'@'localhost' IDENTIFIED BY 'secretPassword';
GRANT select, update, insert, delete ON mydb.* TO 'myUser'@'localhost';

CREATE USER 'myUser'@'%' IDENTIFIED BY 'secretPassword';
GRANT select, update, insert, delete ON mydb.* TO 'myUser'@'%';

CREATE USER 'myUser'@'' IDENTIFIED BY 'secretPassword';
GRANT select, update, insert, delete ON mydb.* TO 'myUser'@'';

【讨论】:

以上是关于其他用户无法访问 docker 中的 mariadb,然后是 root的主要内容,如果未能解决你的问题,请参考以下文章

docker容器内无法访问其他服务器

docker容器内无法访问其他服务器

docker容器内无法访问其他服务器

docker容器内无法访问其他服务器

linux下docker启动nginx无法访问80端口

无法访问 docker 容器中的 REST 端点