Я создаю файл 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