Разрешения
Общий перечень команд
Получить список доступных команд можно через интерактивную справку:
ydb scheme permissions --help
Usage: ydb [global options...] scheme permissions [options...] <subcommand>
Description: Modify permissions
Subcommands:
permissions Modify permissions
├─ chown Change owner
├─ clear Clear permissions
├─ grant Grant permission (aliases: add)
├─ list List permissions
├─ revoke Revoke permission (aliases: remove)
├─ set Set permissions
├─ clear-inheritance Set to do not inherit permissions from the parent
└─ set-inheritance Set to inherit permissions from the parent
Все команды имеют дополнительный параметр, который для них не критичен:
--timeout ms - технологический параметр, задающий таймаут на отклик сервера.
grant, revoke
Команды grant и revoke позволяют установить и отозвать, соответственно, права доступа к объектам схемы для пользователя или группы пользователей. По сути, это аналоги соответствующих YQL-команд GRANT и REVOKE.
Синтаксис команд YDB CLI выглядит следующим образом:
ydb [connection options] scheme permissions grant [options...] <path> <subject>
ydb [connection options] scheme permissions revoke [options...] <path> <subject>
Параметры:
<path> — полный путь от корня кластера до объекта, права на который необходимо модифицировать;
<subject> — имя пользователя или группы, для которых изменяются права доступа.
Дополнительные параметры [options...]:
{-p|--permission} NAME — список прав, которые необходимо предоставить (grant) или отозвать (revoke) у пользователя.
Каждое право нужно передавать отдельным параметром, например:
ydb scheme permissions grant -p "ydb.access.grant" -p "ydb.generic.read" '/Root/db1/MyApp/Orders' testuser
set
Команда set позволяет установить права доступа к объектам схемы для пользователя или группы пользователей.
Синтаксис команды:
ydb [connection options] scheme permissions set [options...] <path> <subject>
Значения всех параметров полностью идентичны командам grant, revoke. Однако ключевое отличие команды set от grant и revoke заключается в установке на указанный объект ровно тех прав доступа, которые перечислены в параметрах -p (--permission). Другие права для указанного пользователя или группы будут отозваны.
Например, ранее пользователю testuser на объект '/Root/db1' были выданы права "ydb.granular.select_row", "ydb.granular.update_row", "ydb.granular.erase_row", "ydb.granular.read_attributes", "ydb.granular.write_attributes", "ydb.granular.create_directory".
Тогда в результате выполнения команды все права на указанный объект будут отозваны (как будто для каждого из прав вызывали revoke) и останется только право "ydb.granular.select_row" — непосредственно указанное в команде set:
ydb scheme permissions set -p "ydb.granular.select_row" '/Root/db1' testuser
list
Команда list позволяет получить текущий список прав доступа к объектам схемы.
Синтаксис команды:
ydb [connection options] scheme permissions list [options...] <path>
Параметры:
<path> — полный путь от корня кластера до объекта, права на который необходимо получить.
Пример результата выполнения list:
ydb scheme permissions list '/Root/db1/MyApp'
Owner: root
Permissions:
user1:ydb.generic.read
Effective permissions:
USERS:ydb.database.connect
METADATA-READERS:ydb.generic.list
DATA-READERS:ydb.granular.select_row
DATA-WRITERS:ydb.tables.modify
DDL-ADMINS:ydb.granular.create_directory,ydb.granular.write_attributes,ydb.granular.create_table,ydb.granular.remove_schema,ydb.granular.alter_schema
ACCESS-ADMINS:ydb.access.grant
DATABASE-ADMINS:ydb.generic.manage
user1:ydb.generic.read
Структура результата состоит из трёх блоков:
Owner— показывает владельца объекта схемы.Permissions— отображает список прав, выданных непосредственно на данный объект.Effective permissions— отображает список прав, фактически действующих на данный схемный объект с учётом правил наследования прав. Данный список также включает все права, отображаемые в секцииPermissions.
clear
Команда clear позволяет отозвать все ранее выданные права на схемный объект. Права, действующие на него по правилам наследования, продолжат действовать.
ydb [global options...] scheme permissions clear [options...] <path>
Параметры:
<path> — полный путь от корня кластера до объекта, права на который необходимо отозвать.
Например, если над состоянием базы данных из предыдущего примера list выполнить команду:
ydb scheme permissions clear '/Root/db1/MyApp'
И затем заново выполнить команду list на объект /Root/db1/MyApp, то получим следующий результат:
Owner: root
Permissions:
none
Effective permissions:
USERS:ydb.database.connect
METADATA-READERS:ydb.generic.list
DATA-READERS:ydb.granular.select_row
DATA-WRITERS:ydb.tables.modify
DDL-ADMINS:ydb.granular.create_directory,ydb.granular.write_attributes,ydb.granular.create_table,ydb.granular.remove_schema,ydb.granular.alter_schema
ACCESS-ADMINS:ydb.access.grant
DATABASE-ADMINS:ydb.generic.manage
Обратите внимание, что секция Permissions теперь пуста. То есть все права на данный объект были отозваны. Также произошли изменения в содержании секцииEffective permissions: в ней более не указаны права, которые были выданы непосредственно на объект /Root/db1/MyApp.
chown
Команда chown позволяет сменить владельца для схемного объекта.
Синтаксис команды:
ydb [connection options] scheme permissions chown [options...] <path> <owner>
Параметры:
<path> — полный путь от корня кластера до объекта, права на который необходимо модифицировать;
<owner> — имя нового владельца указанного объекта, может быть пользователем или группой.
Пример команды chown:
ydb scheme permissions chown '/Root/db1' testuser
Примечание
В текущей версии YDB есть ограничение, что только непосредственно пользователь - текущий владелец схемного объекта может сменить владельца.
clear-inheritance
Команда clear-inheritance позволяет запретить наследование разрешений для схемного объекта.
Синтаксис команды:
ydb [connection options] scheme permissions clear-inheritance [options...] <path>
Параметры:
<path> — полный путь от корня кластера до объекта, права на который необходимо модифицировать.
Пример команды clear-inheritance:
ydb scheme permissions clear-inheritance '/Root/db1'
set-inheritance
Команда set-inheritance позволяет включить наследование разрешений для схемного объекта.
Синтаксис команды:
ydb [connection options] scheme permissions set-inheritance [options...] <path>
Параметры:
<path> — полный путь от корня кластера до объекта, права на который необходимо модифицировать.
Пример команды set-inheritance:
ydb scheme permissions set-inheritance '/Root/db1'