GrantForge

    Базы данных / Аналитические (OLAP)

    Apache Doris

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

    Плагин Apache Doris ищет каталоги, базы данных, таблицы, столбцы и группы нагрузки и управляет политиками доступа в терминах самого Doris: чтение столбцов, загрузка, изменение и удаление таблиц и показ определений их представлений, создание таблиц в базе данных и её удаление, создание баз данных в каталоге и выполнение запросов в группе нагрузки, с фильтрами строк таблиц. Идентификатор плагина и тип сервиса — оба doris. Сервисный плагин работает на сервере GrantForge; агент Apache Doris, сервис рядом с кластером, применяет политики собственными ролями, привилегиями и политиками строк Doris.

    Интеграционные тесты Testcontainers в репозитории покрывают Apache Doris 2.1, 3.1, 4.0 и 4.1, каждый на кластере из одного фронтенда и одного бэкенда; это не означает сертификацию всех остальных версий.

    Установка

    Дистрибутив включает плагин в plugins/doris. Убедитесь, что doris включён в Управление платформой → Плагины; после обновления каталога плагинов пересканируйте его. Плагин обращается к протоколу MySQL фронтендов через MariaDB Connector/J в собственном загрузчике классов.

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

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Apache Doris (doris).
    2. Укажите адрес протокола MySQL одного фронтенда или нескольких.
    3. Введите имя и пароль пользователя для поиска, проверьте подключение и сохраните сервис. Проверка входит и описывает кластер: версию Doris, пользователя, под которым выполнен вход, сколько каталогов он видит и сколько баз данных внутреннего каталога. Она обращается только к фронтенду и поэтому отвечает, даже пока ни один бэкенд не работает.

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

    Параметр Назначение
    doris.hosts Обязательно: адрес протокола MySQL фронтенда, например fe1.example.com:9030; несколько через запятую, по очереди, если один недоступен. Без порта — 9030
    username Обязательно: пользователь для поиска
    password Пароль пользователя для поиска; хранится в зашифрованном виде
    ssl.mode disable (по умолчанию), trust — шифровать без проверки фронтенда, verify-ca — проверять его сертификат или verify-full — проверять и его имя; для фронтендов, которые предлагают TLS в протоколе MySQL
    ssl.root.certificate verify-ca и verify-full: PEM-сертификат CA на сервере GrantForge, которым проверяются фронтенды; пусто — используются сертификаты JVM
    timeout Сколько могут занимать подключение и инструкция, по умолчанию 30000, диапазон 1..600000 миллисекунд

    Отклонённые входы, недостаток привилегии у пользователя для поиска и недоступные фронтенды сообщаются как таковые.

    Что видит пользователь для поиска

    Инструкции SHOW в Doris перечисляют только каталоги, базы данных, таблицы и столбцы, на которые у пользователя есть какая-либо привилегия, поэтому поиск показывает то, что может видеть пользователь для поиска. Дайте ему SELECT_PRIV на то, для чего будут писаться политики, например GRANT SELECT_PRIV ON *.*.* TO 'grantforge_lookup'@'%'; SHOW WORKLOAD GROUPS перечисляет группы, которые он может видеть. Собственные базы данных Doris, information_schema, mysql и __internal_schema, опускаются: политики их не решают.

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

    Уровень Сопоставление Типы доступа
    catalog Подстановочные знаки, с учётом регистра; внутренний каталог или внешний create_database
    database Подстановочные знаки, с учётом регистра; внутри каталога create, drop_database
    table Подстановочные знаки, с учётом регистра; внутри базы данных, таблица или представление load, alter, drop, show_view
    column Подстановочные знаки, без учёта регистра, как Doris сравнивает имена столбцов; внутри таблицы select
    workload_group Подстановочные знаки, с учётом регистра; имя группы usage
    Тип доступа Привилегия Doris
    select SELECT_PRIV — на столбцы или на таблицу, базу данных или каталог целиком
    load LOAD_PRIV: загрузки, INSERT, UPDATE, DELETE и TRUNCATE
    alter, drop ALTER_PRIV, DROP_PRIV на таблицу
    show_view SHOW_VIEW_PRIV: SHOW CREATE VIEW
    create CREATE_PRIV на базу данных: создание её, а также таблиц и представлений в ней
    drop_database DROP_PRIV на базу данных
    create_database CREATE_PRIV на каталог
    usage USAGE_PRIV на группу нагрузки

    Чтение решается по столбцам, как Doris его выдаёт: политика select называет столбцы, * — все. Так политика может разрешить таблицу и запретить один её столбец, а пользователь читает все остальные. В значениях политик * соответствует любой последовательности символов, а ? — одному символу. Редактор политик подсказывает каталоги, базы данных названных в политике каталогов, их таблицы и столбцы, а также группы нагрузки.

    Привилегия Doris на базу данных распространяется и на каждую её таблицу, а на каталог — на каждую его базу данных. Поэтому агент выдаёт create_database только там, где политики позволяют пользователю также создавать таблицы в каждой базе данных каталога, и drop_database только там, где они позволяют ему также удалять каждую таблицу базы данных; иначе он удерживает привилегию и сообщает об этом, вместо того чтобы выдать больше, чем разрешают политики. ADMIN_PRIV, GRANT_PRIV и NODE_PRIV не являются типами доступа: ни одна политика их не даёт.

    Doris маскирует значения только через Apache Ranger, поэтому тип сервиса не предлагает маскирования.

    Фильтры строк

    Политика фильтра строк таблицы показывает её пользователям строки, для которых выполняется условие. Условие — это предикат Doris в том виде, в каком его принимают политики строк, например region = 'EU'; агент сначала выполняет его на таблице, и фильтр, который там выполнить нельзя, не показывает ни одной строки. Как и в других сервисах, пользователь получает фильтр первой применимой к нему политики.

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

    Пусть в кластере есть базы данных sales и hr во внутреннем каталоге и группа нагрузки etl. Создайте в том же сервисе данных такие включённые политики:

    Ресурсы Правило
    catalog=internal, database=sales, table=*, column=* Разрешить группе analysts select
    catalog=internal, database=sales, table=orders, column=card Запретить группе analysts select
    catalog=internal, database=sales, table=orders Разрешить пользователю ingest load
    catalog=internal, database=team_* Разрешить группе data-team create
    catalog=internal, database=team_*, table=* Разрешить группе data-team load, alter и drop
    workload_group=etl Разрешить пользователю ingest и группе data-team usage
    catalog=internal, database=sales, table=orders (фильтр строк) Показывать пользователю emea строки region = 'EMEA'

    Когда агент применит новый снимок, участники analysts читают все таблицы sales, кроме номеров карт в orders; ingest загружает orders и может выполнять свои загрузки в etl; участники data-team создают таблицы в базах данных team_, созданных администратором, и загружают, изменяют и удаляют их; а emea, если политика позволяет ему читать orders, видит только строки своего региона.

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

    Сервисный плагин управляет политиками и ищет ресурсы. Для их применения нужен агент Apache Doris, по одному на кластер. Развёртывание и проверки описаны в разделе Агент Apache Doris.

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

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