Назад | Перейти на главную страницу

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

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

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

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

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

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

После этого mariadb должен принять во внимание гранты 'user @ fqdn'.