GrantForge

    Хранилища данных и движки запросов

    Trino

    Установка и настройка плагина сервиса Trino, вход по паролю, JSON Web Token или Kerberos через TLS, поиск каталогов, схем, таблиц, столбцов и свойств сеанса и управление политиками доступа, фильтрации строк и маскирования в терминах самого Trino.

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

    Интеграционные тесты Testcontainers в репозитории охватывают Trino 470, 476, 479 и 484, а на 470 и 484 — HTTPS с файлом паролей и JSON Web Token, а также Kerberos. Это не сертифицирует все остальные версии.

    Установка

    Дистрибутив содержит плагин в plugins/trino. Убедитесь, что trino включён в разделе Управление платформой → Плагины; после обновления каталога плагинов просканируйте его заново. Плагин общается с coordinator через собственный JDBC-драйвер Trino (trino-jdbc 484) в отдельном загрузчике классов; драйвер работает со всеми перечисленными версиями Trino.

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

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Trino (trino).
    2. Укажите JDBC URL coordinator, например jdbc:trino://trino.example.com:8443.
    3. Выберите способ входа пользователя для поиска, укажите его, проверьте соединение и сохраните сервис. Проверка выполняет вход и описывает coordinator: его версию и число каталогов, которые видит пользователь.

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

    Параметр Назначение
    jdbc.url Обязателен: jdbc:trino://host:port, при необходимости с каталогом и схемой и со свойствами драйвера, кроме учётных данных, например ?SSL=true
    authentication none (по умолчанию): только имя пользователя; password; jwt: JSON Web Token; kerberos: принципал с keytab или паролем
    user Обязательный пользователь для поиска; с Kerberos — полный принципал, например grantforge@EXAMPLE.COM
    password Пароль пользователя, а с Kerberos — пароль принципала, если keytab не указан; хранится в зашифрованном виде
    accessToken jwt: токен, который принимает coordinator; хранится в зашифрованном виде
    keytab Kerberos: путь к keytab принципала, доступный для чтения на сервере GrantForge
    kerberos.kdc Kerberos: KDC realm принципала, host[:port] через запятую; пусто — используется krb5.conf сервера
    KerberosRemoteServiceName Kerberos: первая часть принципала coordinator, по умолчанию trino
    KerberosUseCanonicalHostname Kerberos: берёт ли принципал coordinator каноническое имя хоста из URL, по умолчанию true; отключите за балансировщиком или псевдонимом, имя которого указано в принципале
    SSL Использовать ли TLS, по умолчанию false; нужен для любого входа, кроме none, так как Trino выполняет вход пользователей только через TLS
    SSLTrustStorePath, SSLTrustStorePassword, SSLTrustStoreType TLS: хранилище доверия для проверки coordinator, его пароль и тип (JKS или PKCS12); пусто — доверять тому, чему доверяет Java
    SSLVerification TLS: FULL (по умолчанию) проверяет сертификат и имя хоста, CA — только сертификат, NONE — ничего и не принимает хранилище доверия
    timeout Тайм-аут запросов в миллисекундах, по умолчанию 30000, диапазон 1..600000

    Сервис определяется ровно своими полями. URL не может содержать учётные данные и ничего, что выполнило бы вход иначе: там отклоняются user, password, accessToken, sessionUser, extraCredentials, внешняя аутентификация и OAuth 2.0, файлы и делегирование Kerberos, а также пароли хранилищ ключей и доверия. Поля другого способа входа тоже отклоняются, например токен при аутентификации по паролю.

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

    Kerberos

    С kerberos GrantForge выполняет вход принципала — из keytab или по паролю — и передаёт драйверу учётные данные этого входа; больше ничему на сервере GrantForge настройки Kerberos не нужны. Realm, KDC которых указаны в kerberos.kdc, объявляются для всего сервера GrantForge, как это делают плагины HDFS, Hive, Kafka и HBase, поэтому несколько сервисов могут одновременно использовать разные realm. Пользователь сеанса — имя принципала до realm, как Trino сопоставляет принципалы по умолчанию.

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

    Когда агент Trino применяет политики, списки не показывают того, что пользователю для поиска использовать нельзя: дайте ему политику, разрешающую select для каталога * или для каталогов, ресурсы которых должен подсказывать редактор политик.

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

    Уровень Сопоставление Типы доступа
    catalog Подстановочные знаки, без учёта регистра select, insert, update, delete, create, drop, alter, all
    schema Подстановочные знаки, без учёта регистра; внутри каталога Как у catalog
    table Подстановочные знаки, без учёта регистра; внутри схемы; таблицы, представления и материализованные представления Как у catalog
    column Подстановочные знаки, без учёта регистра; внутри таблицы select, update
    function Подстановочные знаки, без учёта регистра; внутри схемы execute, create_function, drop_function
    procedure Подстановочные знаки, без учёта регистра; внутри схемы execute
    session_property Подстановочные знаки, без учёта регистра; внутри каталога, имя без него set
    system_session_property Подстановочные знаки, без учёта регистра set
    user Подстановочные знаки, с учётом регистра impersonate, view_query, kill_query
    system_information Единственное значение * read, write

    all включает select, insert, update, delete, create, drop и alter.

    Право на каталог, схему или таблицу распространяется на всё внутри: select для схемы sales читает каждую её таблицу, create для каталога создаёт в нём схемы и таблицы. Проверка решается в каждой области, которую она называет, и запрет в любой из них её отклоняет, поэтому политика может разрешить схему и запретить один столбец одной из её таблиц. Функции, процедуры и свойства сеанса выдаются по имени, * означает все в схеме или каталоге, а у функций собственные типы доступа, поэтому право на подпрограммы никогда не считается правом на таблицы.

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

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

    Политики фильтрации строк для таблицы и маскирования для столбца — это SQL Trino, который coordinator применяет к каждому читающему их запросу. Фильтр строк — условие на столбцы таблицы, например region = 'EU'; имена в нём разрешаются в каталоге и схеме таблицы.

    Тип маски Показывает
    mask Буквы как X или x, цифры как n
    mask_show_last_4, mask_show_first_4 Только последние или первые четыре символа
    mask_hash SHA-256 значения в шестнадцатеричном виде
    mask_null NULL
    mask_none Значение без маскирования
    mask_date_show_year Только год даты или метки времени
    custom Выражение SQL Trino из политики, где {col} — столбец

    Агент подгоняет каждую маску под тип столбца, чтобы маска никогда не ломала читающий столбец запрос: см. агент Trino.

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

    Допустим, в каталоге hive есть схема sales с таблицами orders, в которой есть столбцы region, customer и card, и returns. Создайте в одном сервисе данных такие включённые политики:

    Политика Ресурсы Правило
    Доступ catalog=hive, schema=sales Разрешить select группе analysts
    Доступ catalog=hive, schema=sales, table=orders, column=card Запретить select группе analysts
    Доступ catalog=hive, schema=sales, table=returns Разрешить insert пользователю alice
    Фильтр строк catalog=hive, schema=sales, table=orders region = 'EU' для пользователя alice
    Маскирование catalog=hive, schema=sales, table=orders, column=customer mask_hash для группы analysts
    Доступ catalog=system, schema=runtime Разрешить select пользователю alice
    Доступ user=bob Разрешить view_query пользователю alice

    Когда агент применит новый снимок, участники analysts читают все таблицы sales, кроме orders.card, и видят customer в виде хеша; alice видит только европейские заказы, пишет в returns и видит в system.runtime.queries запросы Боба наряду со своими.

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

    Плагин сервиса управляет политиками и ищет ресурсы. Для их применения нужен агент Trino в coordinator. Развёртывание и проверки описаны в разделе агент Trino.

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

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