mysql docker container - 授予用户权限 - 警告

时间:2017-09-28 21:39:11

标签: mysql sql docker

我已经启动了标准的mysql docker容器,现在想要为用户创建用户并授予权限。 但是什么都没发生,我得到了这个警告:
MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work

我对mysql不太熟悉 - 所以我该怎么办?

一个更好的解决方案是使用额外的sql脚本启动此容器。
我该怎么做才能用这样的脚本启动容器:

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'myuser';
GRANT ALL PRIVILEGES ON * . * TO 'myuser'@'localhost';

这是我实际的码头命令:
docker run -p 3306:3306 --name mysql-server -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

有人可以帮我吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的情况,在这种情况下,我必须以仅具有readonly特权的SELECT用户启动我的标准MySQL容器。我创建了一个SQL脚本并将其复制到图像内的文件夹/docker-entrypoint-initdb.d/中。 MySQL容器启动时,默认情况下将执行目录/docker-entrypoint-initdb.d/中的所有SQL文件。我已经包含了满足要求的工作代码段,只需根据需要在privacys.sql文件中修改SQL。此外,由于您从--skip-name-resolve模式开始,MySQL不会考虑DNS查找值,也不会寻找默认127.0.0.1的IP地址。出于一般目的,我使用了%(任何有效主机)

privileges.sql

CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly';
GRANT SELECT ON *.* TO 'readonly'@'%';
FLUSH PRIVILEGES;

Dockerfile-mysql

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD root
COPY ./schemapath/privileges.sql /docker-entrypoint-initdb.d/

最后,在docker注释下执行以创建自定义MySQL映像,并将其作为容器以分离模式运行。

docker build -t custom-mysql . --file ./Dockerfile-mysql
docker run -d --name custom-mysql-container -p 127.0.0.1:3306:3306 custom-mysql

您可以按照以下步骤验证上述命令:

docker exec -it mysql-it-container /bin/bash
mysql -uroot -proot

mysql> show grants for 'readonly';
+---------------------------------------+
| Grants for readonly@%                 |
+---------------------------------------+
| GRANT SELECT ON *.* TO 'readonly'@'%' |
+---------------------------------------+
1 row in set (0.01 sec)