MariaDB в докере - настройка грантов для ограничения доступа по имени хоста контейнера

У меня есть контейнер MariaDB, работающий в моем кластере Swarm, который обслуживает несколько приложений, каждое из которых работает в своем собственном контейнере и подключено к базе данных с помощью выделенной сети (внутренней и подключаемой). Все взаимодействие между контейнерами работает нормально, и я могу успешно устанавливать соединения с базами данных из контейнеров приложений, если для грантов для этого пользователя задан подстановочный знак (т. Е.'User'@'%').

Моя проблема заключается в ограничении доступа к различным базам данных, размещенным в контейнере, с помощью операторов GRANT, как мы обычно делаем в неконтейнерной среде. Контейнеры могут отправлять ping/telnet друг другу, используя псевдонимы сети, определенные в их конфигурации службы. При подключении к базе данных MariaDB видит удаленное имя хоста как IP-адрес "конечной точки" сети, а не как ip или имя хоста контейнера, инициирующего соединение (или конечную точку сети контейнера). Это делает невозможным установку оператора предоставления, который ограничивает доступ к данной базе данных или таблице типичными учетными данными user@host. Я не смог указать конечную точку сети, так как она не существует, пока контейнеры не присоединятся к сети.

Есть ли какое-то решение этой проблемы, которое нашли другие? В идеале мы могли бы ограничить доступ на основе имени хоста контейнера или сетевого псевдонима, но я открыт для других подходов.

1 ответ

Сначала убедитесь, что у вас есть разрешение службы имен, работающее с Docker Swarm (никогда не использовался Swarm, но этот вид службы предлагается с любым приличным оркестратором, таким как k8s, opensvc,...). Это необходимо mariadb для обратного просмотра DNS клиента, подключающегося к базе данных.

Во-вторых, убедитесь, что у вас нет skip-name-resolve параметр включен в вашей конфигурации mariadb.

После этого гранты 'user@fqdn' должны соблюдаться mariadb

Другие вопросы по тегам