GrantForge

    Плагины

    MySQL

    Установка и настройка плагина MySQL, поиск баз данных, таблиц и столбцов, управление политиками доступа, маскирования и фильтрации строк.

    Плагин MySQL предоставляет GrantForge поиск баз данных, таблиц и столбцов, а также политики доступа, маскирования и фильтрации строк. Идентификатор плагина и тип сервиса — mysql. Плагин сервиса работает на сервере GrantForge; SQL-запросы приложений проверяет отдельный прокси-агент MySQL.

    Проверка подключения допускает MySQL 8.0 и новее. Интеграционные тесты Testcontainers в репозитории охватывают mysql:8.0 и mysql:8.4; это не означает, что все остальные версии проверены. Серверы MariaDB и MySQL 5.7 не поддерживаются. jdbc:mariadb:// — формат URL драйвера, а не указание на поддержку серверов MariaDB.

    Установка

    Плагин включён в дистрибутив в каталоге plugins/mysql. Убедитесь, что mysql включён в разделе Управление платформой → Плагины; после обновления повторно просканируйте каталог плагинов. Для подключения к MySQL плагин использует MariaDB Connector/J (LGPL), который поддерживает протокол MySQL, включая caching_sha2_password и TLS, и работает в отдельном загрузчике классов. Официальный MySQL Connector/J распространяется по GPL и не включён в дистрибутив.

    Добавление сервиса данных

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите MySQL (mysql).
    2. Укажите JDBC URL сервера, например jdbc:mysql://mysql.example.com:3306. Также допустимы jdbc:mariadb:// и форматы отказоустойчивого подключения драйвера, например jdbc:mysql:replication://primary:3306,replica:3306.
    3. Укажите пользователя для поиска ресурсов и его пароль, проверьте подключение и сохраните сервис. Проверка выполняет вход, проверяет версию сервера и читает information_schema, как и поиск ресурсов.

    Пользователь для поиска ресурсов нужен GrantForge для получения метаданных и отличается от пользователей, с которыми приложения подключаются к MySQL. Успешная проверка подключения не означает, что политики уже применяются к SQL-запросам приложений.

    Параметр Назначение
    jdbc.url Обязательный JDBC URL: jdbc:mysql://host[:port] или jdbc:mariadb://…; можно добавить базу данных и ?options, но не учётные данные
    username Обязательный пользователь для поиска ресурсов
    password Пароль этого пользователя; хранится в зашифрованном виде
    jdbc.properties Параметры драйвера, по одному key=value на строку, например sslMode=verify-full и serverSslCert=/etc/grantforge/mysql-ca.pem
    connect.timeout.ms Тайм-аут подключения, по умолчанию 10000, диапазон 1..600000
    read.timeout.ms Тайм-аут чтения при поиске ресурсов, по умолчанию 30000, диапазон 1..600000

    Параметры, позволяющие серверу читать локальные файлы, выполнять команды при подключении, выполнять несколько команд одновременно, передавать учётные данные или загружать классы, запрещены в URL и в jdbc.properties независимо от регистра: user, password, allowLocalInfile, allowMultiQueries, initSql, createDatabaseIfNotExist, socketFactory, credentialType и параметры пула. Соединения для поиска ресурсов доступны только для чтения.

    Для TLS с проверкой подлинности сервера добавьте в jdbc.properties:

    sslMode=verify-full
    serverSslCert=/etc/grantforge/mysql-ca.pem

    Файл сертификата должен быть доступен для чтения на сервере GrantForge, а имя хоста в URL должно соответствовать сертификату. По умолчанию плагин не требует TLS; настройте его явно. Используются имена параметров MariaDB Connector/J.

    information_schema показывает пользователю только объекты, на которые у него есть права. Например, для поиска ресурсов только в базе sales администратор базы данных может выполнить следующие команды. Замените grantforge-host адресом, с которого подключается сервер GrantForge:

    CREATE USER 'grantforge_lookup'@'grantforge-host' IDENTIFIED BY 'replace-with-a-password';
    GRANT REFERENCES ON sales.* TO 'grantforge_lookup'@'grantforge-host';

    Используйте REFERENCES ON *.* только при необходимости обнаруживать все базы данных. Учётной записи метаданных прокси также требуется SHOW_ROUTINE; см. руководство по агенту.

    Ресурсы и типы доступа

    Уровень Сопоставление Примечания
    database Подстановочные знаки, с учётом регистра Политика может завершаться на этом уровне
    table Подстановочные знаки, с учётом регистра Под базой данных; политика может завершаться на этом уровне
    column Подстановочные знаки, без учёта регистра Под таблицей; типы доступа select, insert и update

    Имена баз данных и таблиц сравниваются с учётом регистра, как при хранении MySQL в Linux. Если на сервере lower_case_table_names равно 1 или 2, агент приводит проверяемые имена к нижнему регистру; такие политики следует писать в нижнем регистре. Имена столбцов всегда сравниваются без учёта регистра, как в MySQL.

    Типы доступа соответствуют привилегиям MySQL: select, insert, update, delete, create, drop, alter, index и all, включающий эти восемь типов. all не равнозначен ALL PRIVILEGES в MySQL и не отменяет ограничения прокси на SQL-команды.

    В значениях политики * соответствует любому количеству символов, а ? — одному символу. Редактор предлагает имена по префиксу: базы данных, таблицы в указанных политикой базах и столбцы этих таблиц. В поле поиска подсказок % и _ считаются обычными символами.

    Маскирование

    Политики маскирования применяются к столбцам. Каждый тип маски — выражение MySQL 8, где {col} обозначает столбец:

    Тип маски Результат
    mask Буквы ASCII заменяются на X/x, цифры — на n; остальные символы сохраняются
    mask_show_last_4 Только последние четыре символа
    mask_show_first_4 Только первые четыре символа
    mask_hash Хеш SHA-256 без соли
    mask_null NULL
    mask_none Исходное значение
    mask_date_show_year 1 января года исходной даты
    custom Собственное выражение MySQL с {col} вместо столбца, например CONCAT('****', RIGHT({col}, 4))

    Маски, показывающие первые или последние четыре символа, сохраняют значение целиком, если его длина не превышает четырёх символов. Например, mask_show_last_4 отображает 4111111111111111 как xxxxxxxxxxxx1111.

    Фильтрация строк

    Политики фильтрации строк применяются к таблицам. Фильтр — условие MySQL для столбцов таблицы, например region = 'EU': пользователь видит только соответствующие строки, а однотабличные команды UPDATE и DELETE изменяют только эти строки. Запись с участием нескольких таблиц отклоняется, если к целевой таблице требуется применить фильтр строк. Другие ограничения описаны в руководстве по агенту.

    Маски и фильтры строк не предоставляют доступ. Операция должна быть разрешена отдельной политикой доступа.

    Пример политик

    Предположим, в MySQL есть таблица sales.orders со столбцами id, region и card. Создайте в одном сервисе данных три включённые политики для пользователя MySQL alice:

    Вид политики Ресурсы Правило
    Доступ database=sales, table=orders, column=* Разрешить select пользователю alice
    Маскирование database=sales, table=orders, column=card Использовать mask_show_last_4 для пользователя alice
    Фильтрация строк database=sales, table=orders Использовать region = 'EU' для пользователя alice

    В политике укажите пользователя alice, а не alice@host. Сам MySQL также должен разрешать этой учётной записи читать таблицу. Когда прокси применит новый снимок, запросы alice через прокси будут возвращать только строки EU, а в номерах карт останутся видимыми лишь последние четыре символа. Условия запросов и выражения соединения также видят маскированные значения. Развёртывание и проверка описаны в руководстве прокси-агента MySQL.

    Применение политик

    Плагин сервиса управляет политиками и ищет ресурсы. Для их применения, включая маски и фильтры строк, необходим прокси-агент MySQL, к которому клиенты подключаются вместо сервера. Руководство по агенту описывает его развёртывание и выполняемые проверки.

    Связанные руководства

    Редактировать эту страницу на GitHub