在Docker容器中限制MySQL用户的主机

时间:2018-09-09 23:49:38

标签: php mysql docker docker-compose docker-networking

我正在创建一个包含PHP服务和MySQL服务的Docker Compose文件。作为MySQL容器初始化的一部分,我创建了一个新的MySQL用户,PHP容器将使用该用户来查询数据库。现在,我正在这样创建用户:

CREATE USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'mypass';
GRANT INSERT, UPDATE, SELECT, DELETE ON mydb.* TO 'myuser'@'%';

这有效-我的PHP脚本可以成功查询MySQL数据库。

但是,我希望能够将用户限制在PHP容器中,而不是允许从任何地方('%')进行连接。我尝试过这样重新创建用户:

CREATE USER 'myuser'@'php' IDENTIFIED WITH mysql_native_password BY 'mypass';
GRANT INSERT, UPDATE, SELECT, DELETE ON mydb.* TO 'myuser'@'php';

但是,当我运行相同的PHP脚本时,出现此错误:

Access denied for user 'myuser'@'my-docker-container.my-docker-project_my-docker-network'

基于此错误,理论上我可以创建主机限制为my-docker-container.my-docker-project_my-docker-network的用户。但是,在我的特定情况下,该主机字符串甚至更长,并且超过了MySQL规定的60个字符的限制。

是否可以配置我的容器,以便我的第二个示例('myuser'@'php')工作?

这是在docker-compose.yml中定义PHP和MySQL服务的方式:

php:
    image: my-php-image
    container_name: my-php-container
    build: ./php
    networks:
        - my-network
mysql:
    image: my-mysql-image
    container_name: my-mysql-container
    build: ./mysql
    volumes:
        - ./mysql/conf:/etc/mysql/conf.d
        - my-mysql-volume:/var/lib/mysql
    networks:
        - my-network

0 个答案:

没有答案