Назначение правил доступа к таблицам в Managed Service for Trino
Правила доступа к таблицам определяют, какие действия пользователи могут совершать над таблицами в кластере Managed Service for Trino.
Для каждой пары «пользователь–таблица» правила применяются следующим образом:
- Правила проверяются в порядке их объявления. Применяется первое найденное правило, которое соответствует паре «пользователь–таблица».
- Если ни одно из заданных правил не соответствует паре «пользователь–таблица», пользователю запрещаются любые действия над таблицей.
- Если не задано ни одно правило доступа к таблицам, каждый пользователь может выполнять любые действия над любой таблицей.
- Правила доступа к таблицам применяются совместно с общими правилами доступа к объектам каталогов.
Назначить правила при создании кластера
Правила доступа к таблицам можно назначить одновременно с созданием кластера Managed Service for Trino.
Важно
Указанные в правилах имена таблиц и схем не проверяются на валидность. Ошибка в имени таблицы или схемы приведет к некорректной работе правила.
-
В консоли управления
выберите каталог, в котором нужно создать кластер Managed Service for Trino. -
Перейдите в сервис Managed Service for Trino.
-
Нажмите кнопку Создать кластер и задайте параметры кластера.
-
В блоке Настройки доступа нажмите на значок
. -
В поле Таблицы нажмите кнопку Добавить правило.
-
В открывшемся окне задайте параметры правила:
-
(Опционально) В поле Комментарий введите описание правила.
-
(Опционально) В поле Пользователи выберите пользователей, на которых распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужных пользователей. Чтобы найти пользователя, используйте строку поиска над списком.
- Чтобы удалить пользователя, выбранного по ошибке, повторно нажмите на него в списке.
Если не выбран ни один пользователь, правило распространяется на всех пользователей.
-
(Опционально) В поле Группы выберите группы пользователей, на которые распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужные группы. Чтобы найти группу, используйте строку поиска над списком.
- Чтобы удалить группу, выбранную по ошибке, повторно нажмите на нее в списке.
Если не выбрана ни одна группа, правило распространяется на все группы пользователей.
-
(Опционально) В поле Привилегии выберите разрешенные действия над таблицами:
SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWс чтением данных из таблицы.
Если не выбрано ни одно разрешенное действие, правило запрещает выполнение любых действий над таблицами.
Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
(Опционально) В поле Фильтр укажите булево SQL-выражение, определяющее доступ пользователей к строкам таблицы.
Пользователь получит доступ к строке, только если выражение вернет
TRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы. -
(Опционально) В поле Каталоги, к которым применяется правило укажите, на какие каталоги распространяется правило:
- Имя — выберите имена каталогов. Можно выбрать только каталоги, добавленные в блоке Каталоги.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все каталоги кластера.
-
(Опционально) В поле Схемы, к которым применяется правило укажите, на какие схемы распространяется правило:
- Имя — выберите имена схем.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все схемы.
-
(Опционально) В поле Таблицы, к которым применяется правило укажите, на какие таблицы распространяется правило:
- Имя — выберите имена таблиц.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все таблицы.
-
(Опционально) В поле Доступ к столбцам добавьте список правил, ограничивающих доступ пользователей к столбцам таблицы:
-
Нажмите кнопку Добавить столбец.
-
Укажите имя столбца.
-
Выберите, доступен ли столбец:
None— недоступен,All— доступен. -
Укажите маску.
Примечание
Маска — это SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если маска не указана, для этого столбца маскирование не будет использоваться.
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы удалить правило, добавленное по ошибке, в строке этого правила нажмите на значок
.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
-
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы удалить правило, добавленное по ошибке, в строке этого правила нажмите на значок
. -
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к таблицам:
-
Создайте файл
access_control.yamlи добавьте в него следующее содержимое:tables: # Правило 1 - privileges: [<список_разрешений>] table: names: any: [<список_имен_таблиц>] name_regexp: <регулярное_выражение> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: name_regexp: <регулярное_выражение> columns: # Правило доступа к столбцу 1 - name: <имя_столбца> access: <доступность_столбца> mask: <SQL-выражение> # Правило доступа к столбцу 2 - <Параметры_доступа_к_столбцу_2> ... # Правило доступа к столбцу N - <Параметры_доступа_к_столбцу_N> filter: <SQL-выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
tables— список правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если параметрcatalogне указан, правило распространяется на все каталоги кластера.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
-
columns— список правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Посмотрите описание команды CLI для создания кластера:
yc managed-trino cluster create --help -
Выполните команду:
yc managed-trino cluster create \ ... --access-control-from-file access_control.yamlДоступные параметры кластера и их описания см. в инструкции.
-
Создайте конфигурационный файл Terraform с планом инфраструктуры.
-
Добавьте в конфигурационный файл ресурс
yandex_trino_access_control, содержащий список правилtables.resource "yandex_trino_cluster" "<имя_кластера>" { ... } resource "yandex_trino_catalog" "<имя_каталога_1>" { ... } resource "yandex_trino_catalog" "<имя_каталога_2>" { ... } ... resource "yandex_trino_catalog" "<имя_каталога_N>" { ... } resource "yandex_trino_access_control" "trino_access_control" { ... cluster_id = yandex_trino_cluster.<имя_кластера>.id tables = [ # Правило 1 { privileges = ["<список_разрешений>"] table = { names = ["<список_имен_таблиц>"] name_regexp = "<регулярное_выражение>" } schema = { names = ["<список_имен_схем>"] name_regexp = "<регулярное_выражение>" } catalog = { ids = [ yandex_trino_catalog.<имя_каталога_1>.id, yandex_trino_catalog.<имя_каталога_2>.id, ... yandex_trino_catalog.<имя_каталога_N>.id ] name_regexp = "<регулярное_выражение>" } columns = [ # Правило доступа к столбцу 1 { name = "<имя_столбца>" access = "<доступность_столбца>" mask = "<SQL-выражение>" }, # Правило доступа к столбцу 2 { ... }, ... # Правило доступа к столбцу N { ... } ] filter = "<SQL-выражение>" users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны создаваться в том же манифесте.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
idsилиname_regexp. -
columns— список блоков правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ <Параметры_кластера> ... "trino": { "catalogs": [ { "name": "имя_каталога_1", ... }, { "name": "имя_каталога_2", ... }, ... { "name": "имя_каталога_N", ... } ] ... "accessControl": { "tables": [ { "privileges": [ "<список_разрешений>" ], "table": { "names": { "any": [ "<список_имен_таблиц>" ] }, "nameRegexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "nameRegexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "nameRegexp": "<регулярное_выражение>" }, "columns": [ { "name": "<имя_столбца>", "access": "<доступность_столбца>", "mask": "<SQL-выражение>" }, { <Правило_доступа_к_столбцу_2> }, ... { <Правило_доступа_к_столбцу_N> } ], "filter": "<SQL-выражение>", "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
accessControl— конфигурация прав доступа в рамках кластера. -
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWс чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если блокtableне указан, правило распространяется на все таблицы.names— список имен таблиц.nameRegexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Блок
tableдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.nameRegexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.names— список имен каталогов. Каталоги должны создаваться в этом же вызове Cluster.Create.nameRegexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
columns— список блоков правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
Доступные параметры кластера и их описания см. в инструкции.
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters' --data '@body.json' -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ <Параметры_кластера> ... "trino": { "catalogs": [ { "name": "имя_каталога_1", ... }, { "name": "имя_каталога_2", ... }, ... { "name": "имя_каталога_N", ... } ] ... "access_control": { "tables": [ { "privileges": [ "<список_разрешений>" ], "table": { "names": { "any": [ "<список_имен_таблиц>" ] }, "name_regexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "name_regexp": "<регулярное_выражение>" }, "columns": [ { "name": "<имя_столбца>", "access": "<доступность_столбца>", "mask": "<SQL-выражение>" }, { <Правило_доступа_к_столбцу_2> }, ... { <Правило_доступа_к_столбцу_N> } ], "filter": "<SQL-выражение>", "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
access_control— конфигурация прав доступа в рамках кластера. -
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если блокtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Блок
tableдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.names— список имен каталогов. Каталоги должны создаваться в этом же вызове ClusterService/Create.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
columns— список блоков правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
Доступные параметры кластера и их описания см. в инструкции.
-
-
Воспользуйтесь вызовом ClusterService/Create и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.Create \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Назначить правила для существующего кластера
Правила доступа к таблицам можно назначить или обновить в уже существующем кластере Managed Service for Trino.
Важно
Указанные в правилах имена таблиц и схем не проверяются на валидность. Ошибка в имени таблицы или схемы приведет к некорректной работе правила.
-
В консоли управления
перейдите в нужный каталог. -
Перейдите в сервис Managed Service for Trino.
-
Нажмите на имя нужного кластера.
-
Перейдите в блок Настройки доступа → Таблицы.
-
Чтобы добавить правило, нажмите кнопку Добавить правило и в открывшемся окне задайте параметры правила:
-
(Опционально) В поле Комментарий введите описание правила.
-
(Опционально) В поле Пользователи выберите пользователей, на которых распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужных пользователей. Чтобы найти пользователя, используйте строку поиска над списком.
- Чтобы удалить пользователя, выбранного по ошибке, повторно нажмите на него в списке.
Если не выбран ни один пользователь, правило распространяется на всех пользователей.
-
(Опционально) В поле Группы выберите группы пользователей, на которые распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужные группы. Чтобы найти группу, используйте строку поиска над списком.
- Чтобы удалить группу, выбранную по ошибке, повторно нажмите на нее в списке.
Если не выбрана ни одна группа, правило распространяется на все группы пользователей.
-
(Опционально) В поле Привилегии выберите разрешенные действия над таблицами:
SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWс чтением данных из таблицы.
Если не выбрано ни одно разрешенное действие, правило запрещает выполнение любых действий над таблицами.
Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
(Опционально) В поле Фильтр укажите булево SQL-выражение, определяющее доступ пользователей к строкам таблицы.
Пользователь получит доступ к строке, только если выражение вернет
TRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы. -
(Опционально) В поле Каталоги, к которым применяется правило укажите, на какие каталоги распространяется правило:
- ID — выберите идентификаторы каталогов. Можно выбрать только те каталоги, которые есть в кластере.
- Имя — выберите имена каталогов. Можно выбрать только те каталоги, которые есть в кластере.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все каталоги кластера.
-
(Опционально) В поле Схемы, к которым применяется правило укажите, на какие схемы распространяется правило:
- Имя — выберите имена схем.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все схемы.
-
(Опционально) В поле Таблицы, к которым применяется правило укажите, на какие таблицы распространяется правило:
- Имя — выберите имена таблиц.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все таблицы.
-
(Опционально) В поле Доступ к столбцам добавьте список правил, ограничивающих доступ пользователей к столбцам таблицы:
-
Нажмите кнопку Добавить столбец.
-
Укажите имя столбца.
-
Выберите, доступен ли столбец:
None— недоступен,All— доступен. -
Укажите маску.
Примечание
Маска — это SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если маска не указана, для этого столбца маскирование не будет использоваться.
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы удалить правило, добавленное по ошибке, в строке этого правила нажмите на значок
.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
-
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы отредактировать правило:
- В строке этого правила нажмите на значок
. - Измените параметры правила и нажмите кнопку Обновить.
- В строке этого правила нажмите на значок
-
Чтобы удалить ненужное правило, в строке этого правила нажмите на значок
. -
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к таблицам:
-
Если правила доступа еще не заданы, создайте файл
access_control.yamlи добавьте в него следующее содержимое:tables: # Правило 1 - privileges: [<список_разрешений>] table: names: any: [<список_имен_таблиц>] name_regexp: <регулярное_выражение> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: ids: any: [<список_идентификаторов_каталогов>] names: any: [<список_имен_каталогов>] name_regexp: <регулярное_выражение> columns: # Правило доступа к столбцу 1 - name: <имя_столбца> access: <доступность_столбца> mask: <SQL-выражение> # Правило доступа к столбцу 2 - <Параметры_доступа_к_столбцу_2> ... # Правило доступа к столбцу N - <Параметры_доступа_к_столбцу_N> filter: <SQL-выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
tables— список правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги, на которые распространяется правило. Если параметрcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
ids,namesилиname_regexp. -
columns— список правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила доступа уже заданы, откройте файл
access_control.yamlи внесите в него изменения. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Выполните команду:
yc managed-trino cluster set-access-control <имя_или_идентификатор_кластера> \ --from-file access_control.yamlИдентификатор и имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Если правила доступа еще не заданы, добавьте ресурс
yandex_trino_access_control, содержащий список правилtables.resource "yandex_trino_cluster" "<имя_кластера>" { ... } resource "yandex_trino_catalog" "<имя_каталога_1>" { ... } resource "yandex_trino_catalog" "<имя_каталога_2>" { ... } ... resource "yandex_trino_catalog" "<имя_каталога_N>" { ... } resource "yandex_trino_access_control" "trino_access_control" { ... cluster_id = yandex_trino_cluster.<имя_кластера>.id tables = [ # Правило 1 { privileges = ["<список_разрешений>"] table = { names = ["<список_имен_таблиц>"] name_regexp = "<регулярное_выражение>" } schema = { names = ["<список_имен_схем>"] name_regexp = "<регулярное_выражение>" } catalog = { ids = [ yandex_trino_catalog.<имя_каталога_1>.id, yandex_trino_catalog.<имя_каталога_2>.id, ... yandex_trino_catalog.<имя_каталога_N>.id ] name_regexp = "<регулярное_выражение>" } columns = [ # Правило доступа к столбцу 1 { name = "<имя_столбца>" access = "<доступность_столбца>" mask = "<SQL-выражение>" }, # Правило доступа к столбцу 2 { ... }, ... # Правило доступа к столбцу N { ... } ] filter = "<SQL-выражение>" users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать или создаваться в том же манифесте.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
idsилиname_regexp. -
columns— список блоков правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила доступа уже заданы, внесите правки в описание ресурса
yandex_trino_access_control. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Если правила доступа еще не заданы, создайте файл
body.jsonи добавьте в него следующее содержимое:{ "updateMask": "trino.accessControl.tables", "trino": { "accessControl": { "tables": [ { "privileges": [ "<список_разрешений>" ], "table": { "names": { "any": [ "<список_имен_таблиц>" ] }, "nameRegexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "nameRegexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "nameRegexp": "<регулярное_выражение>" }, "columns": [ { "name": "<имя_столбца>", "access": "<доступность_столбца>", "mask": "<SQL-выражение>" }, { <Правило_доступа_к_столбцу_2> }, ... { <Правило_доступа_к_столбцу_N> } ], "filter": "<SQL-выражение>", "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
updateMask— перечень изменяемых параметров в строку через запятую.Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask. -
accessControl— конфигурация прав доступа в рамках кластера. -
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWс чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если блокtableне указан, правило распространяется на все таблицы.names— список имен таблиц.nameRegexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Блок
tableдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.nameRegexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.nameRegexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо один из вложенных блоковidsилиnames, либо параметрnameRegexp. -
columns— список блоков правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила уже заданы, откройте существующий файл
body.jsonс правилами и внесите в него правки. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Воспользуйтесь методом Cluster.Update и выполните запрос, например с помощью cURL
:curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>' --data '@body.json'Идентификатор кластера можно получить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Если правила доступа еще не заданы, создайте файл
body.jsonи добавьте в него следующее содержимое:{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ "trino.access_control.tables" ] }, "trino": { "access_control": { "tables": [ { "privileges": [ "<список_разрешений>" ], "table": { "names": { "any": [ "<список_имен_таблиц>" ] }, "name_regexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "name_regexp": "<регулярное_выражение>" }, "columns": [ { "name": "<имя_столбца>", "access": "<доступность_столбца>", "mask": "<SQL-выражение>" }, { <Правило_доступа_к_столбцу_2> }, ... { <Правило_доступа_к_столбцу_N> } ], "filter": "<SQL-выражение>", "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
cluster_id— идентификатор кластера.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask. -
access_control— конфигурация прав доступа в рамках кластера. -
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если блокtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Блок
tableдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо один из вложенных блоковidsилиnames, либо параметрname_regexp. -
columns— список блоков правил, ограничивающих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца не задано правило, доступ пользователей к нему не ограничен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила уже заданы, откройте существующий файл
body.jsonс правилами и внесите в него правки. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.Update \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Пример назначения правил доступа к таблицам
Допустим, вам нужно настроить правила доступа к таблицам в кластере Trino:
- Запретить любые действия над таблицами пользователю с идентификатором
banned_user_id. - Разрешить пользователям из группы с идентификатором
admins_group_idвыполнять любые действия над таблицами. - Разрешить всем пользователям чтение данных из таблиц с именами
salesиorders, причем:- Строка таблицы будет доступна, только если значение в столбце
manager_idравно идентификатору текущего пользователя. - Значение в столбце
client_phone, кроме четырех последних цифр, будет замаскировано символами***.
- Строка таблицы будет доступна, только если значение в столбце
- Запретить любые действия над таблицами всем остальным пользователям.
Файл access_control.yaml для такого набора правил выглядит так:
tables:
- users:
- banned_user_id
- groups:
- admins_group_id
privileges:
- SELECT
- INSERT
- DELETE
- UPDATE
- OWNERSHIP
- GRANT_SELECT
- table:
names:
any:
- sales
- orders
columns:
- name: client_phone
access: ALL
mask: "'***' || substring(client_phone, -4)"
filter: "manager_id = current_user"
privileges:
- SELECT
Конфигурационный файл для такого набора правил выглядит так:
resource "yandex_trino_access_control" "trino_access_control" {
...
cluster_id = <идентификатор_кластера>
tables = [
{
users = ["banned_user_id"]
},
{
groups = ["admins_group_id"]
privileges = ["SELECT", "INSERT", "DELETE", "UPDATE", "OWNERSHIP", "GRANT_SELECT"]
},
{
table = {
names = ["sales", "orders"]
}
columns = [
{
name = "client_phone"
access = "ALL"
mask = "'***' || substring(client_phone, -4)"
}
]
filter = "manager_id = current_user"
privileges = ["SELECT"]
}
]
...
}
Файл body.json для такого набора правил выглядит так:
{
"updateMask": "trino.accessControl.tables",
"trino": {
"accessControl": {
"tables": [
{
"users": [
"banned_user_id"
]
},
{
"groups": [
"admins_group_id"
],
"privileges": [
"SELECT",
"INSERT",
"DELETE",
"UPDATE",
"OWNERSHIP",
"GRANT_SELECT"
]
},
{
"table": {
"names": {
"any": [
"orders",
"sales"
]
}
},
"columns": [
{
"name": "client_phone",
"access": "ALL",
"mask": "'***' || substring(client_phone, -4)"
}
],
"filter": "manager_id = current_user",
"privileges": [
"SELECT"
]
}
]
}
}
}
Файл body.json для такого набора правил выглядит так:
{
"cluster_id": "<идентификатор_кластера>",
"update_mask": {
"paths": [
"trino.access_control.tables"
]
},
"trino": {
"access_control": {
"tables": [
{
"users": [
"banned_user_id"
]
},
{
"groups": [
"admins_group_id"
],
"privileges": [
"SELECT",
"INSERT",
"DELETE",
"UPDATE",
"OWNERSHIP",
"GRANT_SELECT"
]
},
{
"table": {
"names": {
"any": [
"orders",
"sales"
]
}
},
"columns": [
{
"name": "client_phone",
"access": "ALL",
"mask": "'***' || substring(client_phone, -4)"
}
],
"filter": "manager_id = current_user",
"privileges": [
"SELECT"
]
}
]
}
}
}