Ограничение хоста для пользователя MySQL в контейнере Docker - PullRequest
0 голосов
/ 10 сентября 2018

Я создаю файл Docker Compose, который включает в себя службу PHP и службу MySQL. В рамках инициализации контейнера 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. Однако в моем конкретном случае эта строка хоста еще длиннее и превышает ограничение в 60 символов, установленное MySQL.

Есть ли способ настроить мои контейнеры так, чтобы мой второй пример ('myuser'@'php') работал?

Вот как мои службы PHP и MySQL определены в моем docker-compose.yml:

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
...