Разрешения
Общий перечень команд
Получить список доступных команд можно через интерактивную справку:
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'