Плагин 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.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Trino (
trino). - Укажите JDBC URL coordinator, например
jdbc:trino://trino.example.com:8443. - Выберите способ входа пользователя для поиска, укажите его, проверьте соединение и сохраните сервис. Проверка выполняет вход и описывает 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.
