![如何授予或更改现有用户以允许 MySQL 8 中的远程身份验证?](https://linux22.com/image/748949/%E5%A6%82%E4%BD%95%E6%8E%88%E4%BA%88%E6%88%96%E6%9B%B4%E6%94%B9%E7%8E%B0%E6%9C%89%E7%94%A8%E6%88%B7%E4%BB%A5%E5%85%81%E8%AE%B8%20MySQL%208%20%E4%B8%AD%E7%9A%84%E8%BF%9C%E7%A8%8B%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%EF%BC%9F.png)
最终目标是让最新的 Zabbix 版本在容器中运行,监控一堆交换机。Zabbix
需要某种 MySQL(或 postgres)版本,因此我认为我将使用官方(Oracle)MySQL 8.0.19 MySQL FOSS 映像。我有一个正在运行的 MySQL 容器,但我意外地将我的 zabbix db 用户设置为仅具有本地连接权限。
mysql> SELECT user,host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| zabbix | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
我似乎无法更改此用户,以便它可以从组中的其他容器 zabbix-server-mysql 和 zabbix-web-apache-mysql 进行连接。
也许有某种方法可以启动新容器,以便用户 zabbix 可以通过网络使用数据库“zabbix”。
而且我对 docker 了解不够多,不知道我是否真的需要让容器通过网络相互通信,或者是否有一些神奇的 docker 功能,使它们可以在没有 IP 网络的情况下进行通信。
请指教。
答案1
最简单的方法是使用 RENAME USER 语句:
RENAME USER 'zabbix'@'localhost' TO 'zabbix'@'%';
此外,顶部的 root % 也不好。这意味着 root 可以从网络上的任何地方远程访问数据库。您通常希望将其限制为仅 localhost,因此删除该用户就可以了。(您需要确保有办法通过本地机器进入 docker 容器,以便您可以在本地访问 MySQL,否则删除此用户时可能会失去访问权限)
DROP USER 'root'@'%';
检查您的授权以确保用户 zabbix@% 有权访问数据库“zabbix”:
SHOW GRANTS FOR 'zabbix'@'%';
这样就可以正确配置您的 MySQL 用户。您只需弄清楚如何配置您的 docker 容器以使其彼此正确通信。我不确定它们是否可以在不专门授予它们网络访问权限的情况下进行通信。
https://dev.mysql.com/doc/refman/8.0/en/rename-user.html
https://dev.mysql.com/doc/refman/8.0/en/drop-user.html
https://dev.mysql.com/doc/refman/8.0/en/create-user.html
https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
https://dev.mysql.com/doc/refman/8.0/en/show-grants.html