diff options
author | molotkov-and <[email protected]> | 2023-10-26 12:06:57 +0300 |
---|---|---|
committer | molotkov-and <[email protected]> | 2023-10-26 12:41:31 +0300 |
commit | c5fb05a9e55500a5565ab8bdbfcd3b6d4c6f54d0 (patch) | |
tree | c9a9caf04615a301852374f57b220e716b225470 | |
parent | 204583b193e6547af1857e1975e0a586607db0da (diff) |
Manage YDB permissions via YQL
5 files changed, 127 insertions, 0 deletions
diff --git a/ydb/docs/ru/core/cluster/access.md b/ydb/docs/ru/core/cluster/access.md index 0502d4cba66..5f265b9a76d 100644 --- a/ydb/docs/ru/core/cluster/access.md +++ b/ydb/docs/ru/core/cluster/access.md @@ -48,3 +48,10 @@ ALTER GROUP `DATA-WRITERS` ADD USER myuser1; * [{#T}](../yql/reference/syntax/create-user.md). * [{#T}](../yql/reference/syntax/alter-user.md). * [{#T}](../yql/reference/syntax/drop-user.md). + +## Управление правами доступа операторами YQL + +Для назначения или отзыва прав доступа на объекты схемы для пользователей или групп воспользуйтесь операторами YQL: + +* [{#T}](../yql/reference/syntax/grant.md). +* [{#T}](../yql/reference/syntax/revoke.md). diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/permissions/permissions_list.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/permissions/permissions_list.md new file mode 100644 index 00000000000..08637f431da --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/permissions/permissions_list.md @@ -0,0 +1,33 @@ +## Права доступа {#permissions-list} +В качестве имен прав доступа можно использовать специфичные для {{ ydb-short-name }} права или соответствующие им ключевые слова. В таблице ниже перечислены возможные имена прав и соответствующие им ключевые слова. +Нужно заметить, что специфичные для {{ ydb-short-name }} права задаются как строки и должны заключаться в одинарные или двойные кавычки. + +{{ ydb-short-name }} право | Ключевое слово +---|--- +`"ydb.database.connect"` | `CONNECT` +`"ydb.tables.modify"` | `MODIFY TABLES` +`"ydb.tables.read"` | `SELECT TABLES` +`"ydb.generic.list"` | `LIST` +`"ydb.generic.read"` | `SELECT` +`"ydb.generic.write"` | `INSERT` +`"ydb.access.grant"` | `GRANT` +`"ydb.generic.use"` | `USE` +`"ydb.generic.use_legacy"` | `USE LEGACY` +`"ydb.database.create"` | `CREATE` +`"ydb.database.drop"` | `DROP` +`"ydb.generic.manage"` | `MANAGE` +`"ydb.generic.full"` | `FULL` +`"ydb.generic.full_legacy"` | `FULL LEGACY` +`"ydb.granular.select_row"` | `SELECT ROW` +`"ydb.granular.update_row"` | `UPDATE ROW` +`"ydb.granular.erase_row"` | `ERASE ROW` +`"ydb.granular.read_attributes"` | `SELECT ATTRIBUTES` +`"ydb.granular.write_attributes"` | `MODIFY ATTRIBUTES` +`"ydb.granular.create_directory"` | `CREATE DIRECTORY` +`"ydb.granular.create_table"` | `CREATE TABLE` +`"ydb.granular.create_queue"` | `CREATE QUEUE` +`"ydb.granular.remove_schema"` | `REMOVE SCHEMA` +`"ydb.granular.describe_schema"` | `DESCRIBE SCHEMA` +`"ydb.granular.alter_schema"` | `ALTER SCHEMA` + +* `ALL [PRIVILEGES]` - используется для указания всех возможных прав на объекты схемы для пользователей или групп. `PRIVILEGES` является необязательным ключевым словом, необходимым для совместимости с SQL стандартом. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/grant.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/grant.md new file mode 100644 index 00000000000..7507dcf28f9 --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/grant.md @@ -0,0 +1,43 @@ +# GRANT + +Команда `GRANT` позволяет установить права доступа к объектам схемы для пользователя или группы пользователей. + +Синтаксис: + +```yql +GRANT {{permission_name} [, ...] | ALL [PRIVILEGES]} ON {path_to_scheme_object [, ...]} TO {role_name [, ...]} [WITH GRANT OPTION] +``` + +* `permission_name` - имя права доступа к объектам схемы, которое нужно назначить. +* `path_to_scheme_object` - путь до объекта схемы, на который выдаются права. +* `role_name` - имя пользователя или группы, для которого выдаются права на объект схемы. + +`WITH GRANT OPTION` - использование этой конструкции наделяет пользователя или группу пользователей правом управлять правами доступа - назначать или отзывать определенные права. Конструкция имееет функцианальность аналогичную выдаче права `"ydb.access.grant"` или `GRANT`. +Субъект, обладающий правом `ydb.access.grant`, не может выдавать права шире, чем обладает сам. + +{% include [x](_includes/permissions/permissions_list.md) %} + +## Примеры +* Назначить право `ydb.generic.read` на таблицу `/shop_db/orders` для пользователя `user1`: + ``` + GRANT 'ydb.generic.read' ON `/shop_db/orders` TO user1; + ``` + Та же команда, с использованием ключевого слова + ``` + GRANT SELECT ON `/shop_db/orders` TO user1; + ``` + +* Назначить права `ydb.database.connect`, `ydb.generic.list` на корень базы `/shop_db` для пользователя `user2` и группы `group1`: + ``` + GRANT LIST, CONNECT ON `/shop_db` TO user2, group1; + ``` + +* Назначить право `ydb.generic.use` на таблицы `/shop_db/orders` и `/shop_db/sellers` для пользователей `user1@domain`, `user2@domain`: + ``` + GRANT 'ydb.generic.use' ON `/shop_db/orders`, `/shop_db/sellers` TO `user1@domain`, `user2@domain`; + ``` + +* Назначить все права на таблицу `/shop_db/sellers` для пользователя `admin_user`: + ``` + GRANT ALL ON `/shop_db/sellers` TO admin_user; + ``` diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/revoke.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/revoke.md new file mode 100644 index 00000000000..c228e7e42b2 --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/revoke.md @@ -0,0 +1,42 @@ +# REVOKE + +Команда `REVOKE` позволяет отозвать права доступа к объектам схемы для пользователей или групп пользователей. + +Синтаксис: + +```yql +REVOKE [GRANT OPTION FOR] {{permission_name} [, ...] | ALL [PRIVILEGES]} ON {path_to_scheme_object [, ...]} FROM {role_name [, ...]} +``` + +* `permission_name` - имя права доступа к объектам схемы, которое нужно отозвать. +* `path_to_scheme_object` - путь до объекта схемы, с которого отзываются права. +* `role_name` - имя пользователя или группы, для которого отзываются права на объект схемы. + +`GRANT OPTION FOR` - использование этой конструкции отзывает у пользователя или группы право управлять правами доступа. Все ранее выданные этим пользователем права остаются в силе. Конструкция имеет функцианальность аналогичную отзыву права `"ydb.access.grant"` или `GRANT`. + +{% include [x](_includes/permissions/permissions_list.md) %} + +## Примеры +* Отозвать право `ydb.generic.read` на таблицу `/shop_db/orders` у пользователя `user1`: + ``` + REVOKE 'ydb.generic.read' ON `/shop_db/orders` FROM user1; + ``` + Та же команда, с использованием ключевого слова + ``` + REVOKE SELECT ON `/shop_db/orders` FROM user1; + ``` + +* Отозвать права `ydb.database.connect`, `ydb.generic.list` на корень базы `/shop_db` у пользователя `user2` и группы `group1`: + ``` + REVOKE LIST, CONNECT ON `/shop_db` FROM user2, group1; + ``` + +* Отозвать право `ydb.generic.use` на таблицы `/shop_db/orders` и `/shop_db/sellers` у пользователей `user1@domain`, `user2@domain`: + ``` + REVOKE 'ydb.generic.use' ON `/shop_db/orders`, `/shop_db/sellers` FROM `user1@domain`, `user2@domain`; + ``` + +* Отозвать все права на таблицу `/shop_db/sellers` для пользователя `user`: + ``` + REVOKE ALL ON `/shop_db/sellers` FROM user; + ``` diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml b/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml index 0ed5d7f5516..ecc7b3c93ac 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml @@ -26,6 +26,7 @@ items: - { name: DROP TABLE, href: drop_table.md } - { name: DROP TOPIC, href: drop-topic.md, when: feature_topic_control_plane } - { name: DROP USER, href: drop-user.md, when: feature_user_and_group } +- { name: GRANT, href: grant.md, when: feature_user_and_group } - { name: GROUP BY, href: group_by.md } - { name: EXPORT и IMPORT, href: export_import.md, when: feature_mapreduce } - { name: FLATTEN, href: flatten.md } @@ -37,6 +38,7 @@ items: - { name: PROCESS, href: process.md, when: feature_mapreduce and process_command == "PROCESS" } - { name: REDUCE, href: reduce.md, when: feature_mapreduce and reduce_command == "REDUCE" } - { name: REPLACE, href: replace_into.md, when: feature_replace } +- { name: REVOKE, href: revoke.md, when: feature_user_and_group } - { name: SELECT, href: select.md } - { name: SELECT STREAM, href: select_stream.md, when: feature_mapreduce and process_command == "PROCESS STREAM" } - { name: SUBQUERY, href: subquery.md, when: feature_subquery } |