summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormolotkov-and <[email protected]>2023-10-26 12:06:57 +0300
committermolotkov-and <[email protected]>2023-10-26 12:41:31 +0300
commitc5fb05a9e55500a5565ab8bdbfcd3b6d4c6f54d0 (patch)
treec9a9caf04615a301852374f57b220e716b225470
parent204583b193e6547af1857e1975e0a586607db0da (diff)
Manage YDB permissions via YQL
-rw-r--r--ydb/docs/ru/core/cluster/access.md7
-rw-r--r--ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/permissions/permissions_list.md33
-rw-r--r--ydb/docs/ru/core/yql/reference/yql-core/syntax/grant.md43
-rw-r--r--ydb/docs/ru/core/yql/reference/yql-core/syntax/revoke.md42
-rw-r--r--ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml2
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 }