Системный контроль доступа#

Trino разделяет понятие субъекта (principal), который проходит аутентификацию на координаторе, и имени пользователя, от имени которого выполняются запросы. Например, при запуске Trino CLI имя пользователя Trino можно указать с помощью параметра --user.

По умолчанию координатор Trino позволяет любому principal выполнять запросы от имени любого пользователя Trino. В защищенной среде такое поведение, вероятно, нежелательно и, скорее всего, требует настройки.

Реализация#

SystemAccessControlFactory отвечает за создание экземпляра SystemAccessControl. Он также определяет имя SystemAccessControl, которое используется администратором в конфигурации Trino.

Реализации SystemAccessControl имеют несколько обязанностей:

  • Проверять, авторизован ли заданный principal на выполнение запросов от имени конкретного пользователя.

  • Определять, может ли заданный пользователь изменять значения заданного системного свойства.

  • Выполнять проверки доступа во всех каталогах. Эти проверки выполняются до любых проверок, специфичных для коннектора, и поэтому могут запрещать права, которые иначе были бы разрешены ConnectorAccessControl.

Реализация SystemAccessControl и SystemAccessControlFactory должна быть упакована как плагин и установлена в кластер Trino.

Конфигурация#

После установки на координатор плагина, реализующего SystemAccessControl и SystemAccessControlFactory, он настраивается с помощью файла(ов), указанных свойством access-control.config-files (по умолчанию это один файл etc/access-control.properties). Все свойства, кроме access-control.name, специфичны для реализации SystemAccessControl.

Свойство access-control.name используется Trino, чтобы найти зарегистрированный SystemAccessControlFactory по имени, возвращаемому SystemAccessControlFactory.getName(). Остальные свойства передаются как map в SystemAccessControlFactory.create().

Пример файла конфигурации:

access-control.name=custom-access-control
custom-property1=custom-value1
custom-property2=custom-value2