diff --git a/ydb/docs/en/core/concepts/_includes/connect_overlay/auth_choose.md b/ydb/docs/en/core/concepts/_includes/connect_overlay/auth_choose.md deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/ydb/docs/en/core/concepts/auth.md b/ydb/docs/en/core/concepts/auth.md index 429b63e0275a..a1ec40634fc5 100644 --- a/ydb/docs/en/core/concepts/auth.md +++ b/ydb/docs/en/core/concepts/auth.md @@ -8,6 +8,12 @@ The following authentication modes are supported: * [Authentication through a third-party IAM provider](#iam), for example, [Yandex Identity and Access Management]{% if lang == "en" %}(https://cloud.yandex.com/en/docs/iam/){% endif %}{% if lang == "ru" %}(https://cloud.yandex.ru/docs/iam/){% endif %}. * Authentication by [username and password](#static-credentials). +## Anonymous authentication + +Anonymous authentication allows you to connect to {{ ydb-short-name }} without specifying any credentials like username and password. This type of access should be used only for educational purposes in local databases that cannot be accessed over the network. + +To enable anonymous authentication, use `false` in the `enforce_user_token_requirement` key of the cluster's [configuration file](../reference/configuration/index.md#auth). + ## Authentication through a third-party IAM provider {#iam} * **Anonymous**: Empty token passed in a request. @@ -35,23 +41,20 @@ The token to specify in request parameters can be obtained in the IAM system tha When using modes in which the {{ ydb-short-name }} client accesses the IAM system, the IAM URL that provides an API for issuing tokens can be set additionally. By default, existing SDKs and CLIs attempt to access the {{ yandex-cloud }} IAM API hosted at `iam.api.cloud.yandex.net:443`. -{% include [overlay/auth_choose.md](_includes/connect_overlay/auth_choose.md) %} - ## Authenticating by username and password {#static-credentials} -Authentication by username and password includes the following steps: +This type of access implies that each database user has a username and password. +Only digits and lowercase Latin letters can be used in usernames. Passwords are not restricted; even empty passwords can be used. -1. The client accesses the database and presents their username and password to the {{ ydb-short-name }} authentication service. +The username and hashed password are stored in a table inside the authentication component. The password is hashed using the [Argon2](https://en.wikipedia.org/wiki/Argon2) method. In authentication mode, only the system administrator can use a username and password pair to access the table. - You can only use lower case Latin letters and digits in usernames. No restrictions apply to passwords (empty passwords can be used). +A token is returned in response to the username and password. Tokens have a default lifetime of 12 hours. To rotate tokens, the client, such as the [SDK](../reference/ydb-sdk/index.md), independently accesses the authentication service. Tokens accelerate authentication and enhance security. +Authentication by username and password includes the following steps: + +1. The client accesses the database and presents their username and password to the {{ ydb-short-name }} authentication service. 1. The authentication service passes authentication data to the {{ ydb-short-name }} authentication component. 1. The component validates authentication data. If the data matches, it generates a token and returns it to the authentication service. - - Tokens accelerate authentication and strengthen security. Tokens have a default lifetime of 12 hours. YDB SDK rotates tokens by accessing the authentication service. - - The username and hashed password are stored in the table inside the authentication component. The password is hashed by the [Argon2]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Argon2){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Argon2){% endif %} method. In authentication mode, only the system administrator can use a username/password pair to access the table. - 1. The authentication system returns the token to the client. 1. The client accesses the database, presenting their token as authentication data. diff --git a/ydb/docs/redirects.yaml b/ydb/docs/redirects.yaml index 1a7106dc2f77..533bd1d33029 100644 --- a/ydb/docs/redirects.yaml +++ b/ydb/docs/redirects.yaml @@ -184,11 +184,15 @@ common: # Security-related redirects - from: /cluster/access.md - to: /security/acess-management.md + to: /security/authorization.md - from: /cluster/audit-log.md to: /security/audit-log.md - from: /cluster/short-access-control-notation.md to: /security/short-access-control-notation.md + - from: /concepts/auth.md + to: /security/authentication.md + - from: /security/access-management.md + to: /security/authorization.md # Contributors-related redirects - from: /development/build-ya.md diff --git a/ydb/docs/ru/core/_includes/do-not-create-users-in-ldap.md b/ydb/docs/ru/core/_includes/do-not-create-users-in-ldap.md new file mode 100644 index 000000000000..119b6a658d2a --- /dev/null +++ b/ydb/docs/ru/core/_includes/do-not-create-users-in-ldap.md @@ -0,0 +1,8 @@ +{% note info %} + +Область действия команд `CREATE USER`, `ALTER USER`, `DROP USER` не распространяется на внешние каталоги пользователей. +Учитывайте это, если к {{ ydb-short-name }} подключаются пользователи со сторонней аутентификацией (например, LDAP). +Например, команда `CREATE USER` не создаст пользователя в LDAP-каталоге. +Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP-каталогом](../security/authentication.md#ldap-auth-provider). + +{% endnote %} diff --git a/ydb/docs/ru/core/changelog-server.md b/ydb/docs/ru/core/changelog-server.md index 5740c2a9b6ba..afd5ae5e5abf 100644 --- a/ydb/docs/ru/core/changelog-server.md +++ b/ydb/docs/ru/core/changelog-server.md @@ -131,7 +131,7 @@ * Реализована [Knn UDF](./yql/reference/udf/list/knn.md) для точного поиска ближайших векторов. * Разработан gRPC сервис QueryService, обеспечивающий возможность выполнения всех типов запросов (DML, DDL) и выборку неограниченных объёмов данных. -* Реализована [интеграция с LDAP протоколом](./concepts/auth.md) и возможность получения перечня групп из внешних LDAP-каталогов. +* Реализована [интеграция с LDAP протоколом](./security/authentication.md) и возможность получения перечня групп из внешних LDAP-каталогов. ### Встроенный UI diff --git a/ydb/docs/ru/core/concepts/_includes/connect_overlay/auth_choose.md b/ydb/docs/ru/core/concepts/_includes/connect_overlay/auth_choose.md deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/ydb/docs/ru/core/concepts/datamodel/_includes/dir.md b/ydb/docs/ru/core/concepts/datamodel/_includes/dir.md index 986586de84cb..ca7818368a06 100644 --- a/ydb/docs/ru/core/concepts/datamodel/_includes/dir.md +++ b/ydb/docs/ru/core/concepts/datamodel/_includes/dir.md @@ -1,3 +1,3 @@ # Директория -Для удобства организации поддерживается создание директорий по аналогии с файловой системой, то есть вся база состоит из дерева директорий, а таблицы и другие сущности находятся в листах этого дерева (аналогично файлам файловой системы). В одной директории могут быть несколько поддиректорий и несколько таблиц. Имена у сущностей внутри одной директории уникальны. +Для удобства организации поддерживается создание [директорий](../../glossary.md#folder) по аналогии с файловой системой, то есть вся база состоит из дерева директорий, а [схемные объекты](../../glossary.md#scheme-object), например, таблицы, находятся в листах этого дерева. В одной директории могут быть несколько поддиректорий и несколько схемных объектов. Имена схемных объектов внутри одной директории уникальны. diff --git a/ydb/docs/ru/core/concepts/federated_query/ydb.md b/ydb/docs/ru/core/concepts/federated_query/ydb.md index a75c059cebdc..fdeef4975cf1 100644 --- a/ydb/docs/ru/core/concepts/federated_query/ydb.md +++ b/ydb/docs/ru/core/concepts/federated_query/ydb.md @@ -4,7 +4,7 @@ Для подключения к внешней базе {{ ydb-short-name }} со стороны другой базы {{ ydb-short-name }}, выступающей в роли движка обработки федеративных запросов, на последней требуется выполнить следующие шаги: -1. Подготовить аутентификационные данные для доступа к удалённой базе {{ ydb-short-name }}. В настоящее время в федеративных запросах к {{ ydb-short-name }} доступен метод аутентификации по [логину и паролю](../../concepts/auth.md#static-credentials) (остальные методы не поддерживаются). Пароль к внешней базе сохраняется в виде [секрета](../datamodel/secrets.md): +1. Подготовить аутентификационные данные для доступа к удалённой базе {{ ydb-short-name }}. В настоящее время в федеративных запросах к {{ ydb-short-name }} доступен метод аутентификации по [логину и паролю](../../security/authentication.md#static-credentials) (остальные методы не поддерживаются). Пароль к внешней базе сохраняется в виде [секрета](../datamodel/secrets.md): ```yql CREATE OBJECT ydb_datasource_user_password (TYPE SECRET) WITH (value = ""); @@ -93,4 +93,4 @@ SELECT * FROM ydb_datasource. |`Datetime`|`Datetime`| |`Timestamp`|`Timestamp`| |`Json`|`Json`| -|`JsonDocument`|`Json`| \ No newline at end of file +|`JsonDocument`|`Json`| diff --git a/ydb/docs/ru/core/concepts/glossary.md b/ydb/docs/ru/core/concepts/glossary.md index 8aea2522e105..3c131a324b30 100644 --- a/ydb/docs/ru/core/concepts/glossary.md +++ b/ydb/docs/ru/core/concepts/glossary.md @@ -269,9 +269,52 @@ **Секрет** или **secret** — это конфиденциальные метаданные, требующие особого обращения. Например, секреты могут использоваться в определениях [внешних источников данных](#external-data-source) и представляют собой такие сущности, как пароли и токены. +### Объект схемы {#scheme-object} + +Схема базы данных состоит из **схемных объектов** или **объектов схемы**, которыми могут быть базы данных, [таблицы](#table) (включая [внешние таблицы](#external-table)), [топики](#topic), [папки](#folder) и т.д. + +Для удобства организации, схемные объекты образуют иерархию с помощью [папок](#folder). + ### Папка {#folder} -Как и в файловых системах, **папка**, **каталог**, **folder** или **directory** является контейнером для других сущностей. В случае {{ ydb-short-name }}, эти сущности могут быть [таблицами](#table) (включая [внешние таблицы](#external-table)), [топиками](#topic), другими папками и т.д. +Как и в файловых системах, **папка**, **каталог**, **folder** или **directory** является контейнером для [схемных объектов](#scheme-object). + +Папки могут содержать подпапки и такая вложенность может быть произвольной глубины. + +### Объект доступа {#access-object} + +**Объект доступа** или **access object** при [авторизации](../security/authorization.md) — сущность, для которой настраиваются права и ограничения доступа. В {{ ydb-short-name }} объектами доступа являются [объекты схемы](#scheme-object). +У каждого объекта доступа есть [владелец](#access-owner) и [список разрешений](#access-control-list). + +### Субъект доступа {#access-subject} + +**Субъект доступа** или **access subject** — сущность, которая может обращаться к [объектам доступа](#access-object) или выполнять определённые действия в системе. Получение доступа при этих обращениях и действиях зависит от настроенных [списков разрешений](#access-control-list). + +Субъектом доступа может быть [пользователь](#access-user) или [группа](#access-group). + +### Право доступа {#access-right} + +**[Право доступа](../security/authorization.md#right)** или **access right** — сущность, отражающая разрешение [субъекту доступа](#access-subject) выполнять конкретный набор операций в кластере или базе данных над конкретным [объектом доступа](#access-object). + +### Список разрешений {#access-control-list} + +**Список разрешений**, **access control list** или **ACL** — список всех [прав](#access-right), предоставленных [субъектам доступа](#access-subject) (пользователям и группам) на конкретный [объект доступа](#access-object). + +### Владелец {#access-owner} + +**[Владелец](../security/authorization.md#owner)** - [субъект доступа](#access-subject) ([пользователь](#access-user) или [группа](#access-group)) имеющий полный объем прав на конкретный [объект доступа](#access-object). + +### Пользователь {#access-user} + +**[Пользователь](../security/authorization.md#user)** - лицо, использующее {{ ydb-short-name }} для выполнения конкретной функции. + +### Группа {#access-group} + +**[Группа](../security/authorization.md#group)** или **группа доступа** - именованное множество [пользователей](#access-user) с одинаковыми [правами доступа](#access-right) к тем или иным [объектам доступа](#access-object). + +### SID {#access-sid} + + **SID** (**Security Identifier**) - строка вида `[@]`, идентифицирующая [субъект доступа](../concepts/glossary.md#access-subject) в [списках разрешений](#access-control-list). ### Оптимизатор запросов {#optimizer} diff --git a/ydb/docs/ru/core/concepts/toc_i.yaml b/ydb/docs/ru/core/concepts/toc_i.yaml index f36cd1c48021..82921b8245c9 100644 --- a/ydb/docs/ru/core/concepts/toc_i.yaml +++ b/ydb/docs/ru/core/concepts/toc_i.yaml @@ -3,8 +3,6 @@ items: href: glossary.md - name: Соединение с БД href: connect.md -- name: Аутентификация - href: auth.md - name: Модель данных и схема href: datamodel/index.md include: diff --git a/ydb/docs/ru/core/dev/example-app/go/_includes/run_custom.md b/ydb/docs/ru/core/dev/example-app/go/_includes/run_custom.md index 225f5b2967c8..2fbff712256f 100644 --- a/ydb/docs/ru/core/dev/example-app/go/_includes/run_custom.md +++ b/ydb/docs/ru/core/dev/example-app/go/_includes/run_custom.md @@ -1,6 +1,6 @@ Для выполнения примера с использованием любой доступной базы данных YDB вам потребуется знать [эндпоинт](../../../../concepts/connect.md#endpoint) и [путь базы данных](../../../../concepts/connect.md#database). -Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../concepts/auth.md) и получить секреты - токен или логин/пароль. +Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../security/authentication.md) и получить секреты - токен или логин/пароль. Выполните команду по следующему образцу: diff --git a/ydb/docs/ru/core/dev/example-app/java/_includes/run_custom.md b/ydb/docs/ru/core/dev/example-app/java/_includes/run_custom.md index e5cf34f0c242..0240668e03f4 100644 --- a/ydb/docs/ru/core/dev/example-app/java/_includes/run_custom.md +++ b/ydb/docs/ru/core/dev/example-app/java/_includes/run_custom.md @@ -1,6 +1,6 @@ Для выполнения примера с использованием любой доступной базы данных {{ ydb-short-name }} вам потребуется знать [эндпоинт](../../../../concepts/connect.md#endpoint) и [путь базы данных](../../../../concepts/connect.md#database). -Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../concepts/auth.md) и получить секреты - токен или логин/пароль. +Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../security/authentication.md) и получить секреты - токен или логин/пароль. Выполните команду по следующему образцу: @@ -19,4 +19,4 @@ ```bash YDB_ACCESS_TOKEN_CREDENTIALS="..." java -jar ydb-java-examples/query-example/target/ydb-query-example.jar grpcs://ydb.example.com:2135/somepath/somelocation -``` \ No newline at end of file +``` diff --git a/ydb/docs/ru/core/dev/example-app/java/index.md b/ydb/docs/ru/core/dev/example-app/java/index.md index 2e40e5378008..8f31d79ffecf 100644 --- a/ydb/docs/ru/core/dev/example-app/java/index.md +++ b/ydb/docs/ru/core/dev/example-app/java/index.md @@ -29,7 +29,7 @@ mvn package -f ./ydb-java-examples Основные параметры инициализации драйвера: * Cтрока подключения с информацией об [эндпоинте](../../../concepts/connect.md#endpoint) и [базе данных](../../../concepts/connect.md#database). Единственный обязательный параметр. -* Провайдер [аутенфикации](../../../recipes/ydb-sdk/auth.md##auth-provider). В случае отсутствия прямого указания будет использоваться [анонимное подключение](../../../concepts/auth.md). +* Провайдер [аутенфикации](../../../recipes/ydb-sdk/auth.md##auth-provider). В случае отсутствия прямого указания будет использоваться [анонимное подключение](../../../security/authentication.md). * Настройки [пула сессий](../../../recipes/ydb-sdk/session-pool-limit.md). Фрагмент кода приложения для инициализации драйвера: diff --git a/ydb/docs/ru/core/dev/example-app/python/_includes/run_custom.md b/ydb/docs/ru/core/dev/example-app/python/_includes/run_custom.md index dcf7b3e06715..1ecb1173ccb7 100644 --- a/ydb/docs/ru/core/dev/example-app/python/_includes/run_custom.md +++ b/ydb/docs/ru/core/dev/example-app/python/_includes/run_custom.md @@ -1,6 +1,6 @@ Для выполнения примера с использованием любой доступной базы данных {{ ydb-short-name }} вам потребуется знать [эндпоинт](../../../../concepts/connect.md#endpoint) и [путь базы данных](../../../../concepts/connect.md#database). -Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../concepts/auth.md) и получить секреты - токен или логин/пароль. +Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../security/authentication.md) и получить секреты - токен или логин/пароль. Выполните команду по следующему образцу: diff --git a/ydb/docs/ru/core/dev/terraform.md b/ydb/docs/ru/core/dev/terraform.md index eb23c17169f0..d73259690bcc 100644 --- a/ydb/docs/ru/core/dev/terraform.md +++ b/ydb/docs/ru/core/dev/terraform.md @@ -61,9 +61,9 @@ Где: -* `token` - указывается токен доступа к БД, если используется аутентификация, например, с использованием стороннего [IAM](../concepts/auth.md#iam) провайдера. -* `user` - имя пользователя для доступа к базе данных в случае использования аутентификации по [логину и паролю](../concepts/auth.md#static-credentials) -* `password` - пароль для доступа к базе данных в случае использования аутентификации по [логину и паролю](../concepts/auth.md#static-credentials) +* `token` - указывается токен доступа к БД, если используется аутентификация, например, с использованием стороннего [IAM](../security/authentication.md#iam) провайдера. +* `user` - имя пользователя для доступа к базе данных в случае использования аутентификации по [логину и паролю](../security/authentication.md#static-credentials). +* `password` - пароль для доступа к базе данных в случае использования аутентификации по [логину и паролю](../security/authentication.md#static-credentials). ## Использование Terraform провайдера {{ ydb-short-name }} {#work-with-tf} diff --git a/ydb/docs/ru/core/devops/manual/initial-deployment.md b/ydb/docs/ru/core/devops/manual/initial-deployment.md index 2a451e6ffb3a..292af112a8a9 100644 --- a/ydb/docs/ru/core/devops/manual/initial-deployment.md +++ b/ydb/docs/ru/core/devops/manual/initial-deployment.md @@ -484,7 +484,7 @@ sudo chmod 700 /opt/ydb/certs Если в файле настроек кластера включен режим аутентификации, то перед началом работы с кластером {{ ydb-short-name }} необходимо выполнить первоначальную настройку учетных записей. -При первоначальной установке кластера {{ ydb-short-name }} автоматически создается учетная запись `root` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [Управление доступом](../../security/access-management.md). +При первоначальной установке кластера {{ ydb-short-name }} автоматически создается учетная запись `root` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [{#T}](../../yql/reference/syntax/alter-group.md#builtin). Для выполнения первоначальной настройки учетных записей в созданном кластере {{ ydb-short-name }} выполните следующие операции: diff --git a/ydb/docs/ru/core/integrations/ingestion/logstash.md b/ydb/docs/ru/core/integrations/ingestion/logstash.md index 46406d494481..c513aaef9ea5 100644 --- a/ydb/docs/ru/core/integrations/ingestion/logstash.md +++ b/ydb/docs/ru/core/integrations/ingestion/logstash.md @@ -34,7 +34,7 @@ ## Конфигурация подключения плагинов к {{ ydb-short-name }} -Все плагины используют одни и те же параметры для настройки подключения к базе данных {{ ydb-short-name }}. Среди этих параметров обязателен только `connection_string`, а все остальные параметры опциональны и позволяют задать [режим аутентификации](../../concepts/auth.md). Если ни один из них не указан, то будет использоваться анонимная аутентификация. +Все плагины используют одни и те же параметры для настройки подключения к базе данных {{ ydb-short-name }}. Среди этих параметров обязателен только `connection_string`, а все остальные параметры опциональны и позволяют задать [режим аутентификации](../../security/authentication.md). Если ни один из них не указан, то будет использоваться анонимная аутентификация. ```ruby # Пример указан для плагина ydb_storage, настройка подключения diff --git a/ydb/docs/ru/core/integrations/migration/liquibase.md b/ydb/docs/ru/core/integrations/migration/liquibase.md index e35bbce81a7e..54b142297be5 100644 --- a/ydb/docs/ru/core/integrations/migration/liquibase.md +++ b/ydb/docs/ru/core/integrations/migration/liquibase.md @@ -560,4 +560,4 @@ liquibase changelog-sync --changelog-file=dbchangelog.xml Если ваш кластер настроен с использованием логина и пароля, процесс аутентификации происходит через параметры Liquibase. -За дополнительной информацией о различных настройках аутентификации обратитесь к соответствующему [разделу](../../concepts/auth.md). +За дополнительной информацией о различных настройках аутентификации обратитесь к соответствующему [разделу](../../security/authentication.md). diff --git a/ydb/docs/ru/core/integrations/orchestration/airflow.md b/ydb/docs/ru/core/integrations/orchestration/airflow.md index e6d0df64b788..79bc40947a76 100644 --- a/ydb/docs/ru/core/integrations/orchestration/airflow.md +++ b/ydb/docs/ru/core/integrations/orchestration/airflow.md @@ -132,11 +132,11 @@ connection.close() Укажите реквизиты для одного из следующих способов аутентификации на кластере {{ ydb-full-name }}: -- `Login` и `Password` - укажите реквизиты пользователя для аутентификации [по логину и паролю](../../concepts/auth.md#static-credentials). -- `Service account auth JSON` - укажите значение [`Service Account Key`](../../concepts/auth.md#iam). +- `Login` и `Password` - укажите реквизиты пользователя для аутентификации [по логину и паролю](../../security/authentication.md#static-credentials). +- `Service account auth JSON` - укажите значение [`Service Account Key`](../../security/authentication.md#iam). - `Service account auth JSON file path` - укажите путь к файлу, содержащему `Service Account Key`. -- `IAM token` - укажите [IAM токен](../../concepts/auth.md#iam). -- `Use VM metadata` - указание использовать [метаданные виртуальной машины](../../concepts/auth.md#iam). +- `IAM token` - укажите [IAM токен](../../security/authentication.md#iam). +- `Use VM metadata` - указание использовать [метаданные виртуальной машины](../../security/authentication.md#iam). ## Соответствие YQL и Python-типов diff --git a/ydb/docs/ru/core/integrations/visualization/grafana.md b/ydb/docs/ru/core/integrations/visualization/grafana.md index 7dc3713e8010..39523f057992 100644 --- a/ydb/docs/ru/core/integrations/visualization/grafana.md +++ b/ydb/docs/ru/core/integrations/visualization/grafana.md @@ -12,7 +12,7 @@ ### {{ ydb-short-name }} пользователь для источника данных -Настройте аккаунт пользователя {{ ydb-short-name }} с правами **только на чтение** [(подробнее об уровнях доступа)](../../security/access-management.md) и доступом до баз данных и таблиц, к которым потребуется делать запросы. +Настройте аккаунт пользователя {{ ydb-short-name }} с правами **только на чтение** [(подробнее об правах доступа)](../../security/authorization.md#right) и доступом до баз данных и таблиц, к которым потребуется делать запросы. {% note warning %} diff --git a/ydb/docs/ru/core/reference/configuration/index.md b/ydb/docs/ru/core/reference/configuration/index.md index a92adbc7ee56..98856d9e3690 100644 --- a/ydb/docs/ru/core/reference/configuration/index.md +++ b/ydb/docs/ru/core/reference/configuration/index.md @@ -209,7 +209,7 @@ state_storage: ## Конфигурация аутентификации {#auth} -[Режим аутентификации](../../concepts/auth.md) на кластере {{ ydb-short-name }} задается в разделе `domains_config.security_config`. +[Режим аутентификации](../../security/authentication.md) на кластере {{ ydb-short-name }} задается в разделе `domains_config.security_config`. ### Синтаксис @@ -605,7 +605,7 @@ blob_storage_config: ### Конфигурация LDAP аутентификации {#ldap-auth-config} -Одним из способов аутентификации пользователей в {{ ydb-short-name }} является использование LDAP каталога. Подробнее о таком виде аутентификации написано в разделе про [взаимодействие {{ ydb-short-name }} с LDAP каталогом](../../concepts/auth.md#ldap-auth-provider). Для конфигурирования LDAP аутентификации необходимо описать секцию `ldap_authentication`. +Одним из способов аутентификации пользователей в {{ ydb-short-name }} является использование LDAP каталога. Подробнее о таком виде аутентификации написано в разделе про [взаимодействие {{ ydb-short-name }} с LDAP каталогом](../../security/authentication.md#ldap-auth-provider). Для конфигурирования LDAP аутентификации необходимо описать секцию `ldap_authentication`. Пример секции `ldap_authentication`: @@ -645,11 +645,11 @@ auth_config: `bind_password` | Пароль сервисного аккаунта, от имени которого выполняется поиск записи пользователя `search_filter` | Фильтр для поиска записи пользователя в LDAP каталоге. В строке фильтра может встречаться последовательность символов *$username*, которая будет заменена на имя пользователя, запрошенное для аутентификации в базе данных `use_tls` | Настройки для конфигурирования TLS соединения между {{ ydb-short-name }} и LDAP сервером -`enable` | Определяет, будет ли произведена попытка установить TLS-соединение с [использованием запроса `StartTls`](../../concepts/auth.md#starttls). При установке значения этого параметра в `true`, необходимо отключить использование схемы соединения `ldaps`, присвоив параметру `ldap_authentication.scheme` значение `ldap`. +`enable` | Определяет, будет ли произведена попытка установить TLS-соединение с [использованием запроса `StartTls`](../../security/authentication.md#starttls). При установке значения этого параметра в `true`, необходимо отключить использование схемы соединения `ldaps`, присвоив параметру `ldap_authentication.scheme` значение `ldap`. `ca_cert_file` | Путь до файла сертификата удостоверяющего центра `cert_require` | Уровень требований к сертификату LDAP сервера.
Возможные значения:
  • `NEVER` - {{ ydb-short-name }} не запрашивает сертификат или проверку проходит любой сертификат.
  • `ALLOW` - {{ ydb-short-name }} требует, что бы LDAP сервер предоставил сертификат. Если предоставленному сертификату нельзя доверять, TLS сессия все равно установится.
  • `TRY` - {{ ydb-short-name }} требует, что бы LDAP сервер предоставил сертификат. Если предоставленному сертификату нельзя доверять, установление TLS соединения прекращается.
  • `DEMAND` и `HARD` - Эти требования эквивалентны параметру `TRY`. По умолчанию установлено значение `DEMAND`.
`ldap_authentication_domain` | Идентификатор, прикрепляемый к имени пользователя, позволяющий отличать пользователей из LDAP каталога от пользователей аутентифицируемых с помощью других провайдеров. Значение по умолчанию `ldap` -`scheme` | Схема соединения с LDAP-сервером.
Возможные значения:
  • `ldap` — {{ ydb-short-name }} будет выполнять соединение с LDAP-сервером без какого-либо шифрования. Пароли будут отправляться на LDAP-сервер в открытом виде. Это значение установлено по умолчанию.
  • `ldaps` — {{ ydb-short-name }} будет выполнять зашифрованное соединение с LDAP-сервером по протоколу TLS с самого первого запроса. Для успешного установления соединения по схеме `ldaps` необходимо отключить использование [запроса `StartTls`](../../concepts/auth.md#starttls) в секции `ldap_authentication.use_tls.enable: false` и заполнить информацию о сертификате `ldap_authentication.use_tls.ca_cert_file` и уровне требования сертификата `ldap_authentication.use_tls.cert_require`.
  • При использовании любого другого значения будет браться значение по умолчанию - `ldap`.
+`scheme` | Схема соединения с LDAP-сервером.
Возможные значения:
  • `ldap` — {{ ydb-short-name }} будет выполнять соединение с LDAP-сервером без какого-либо шифрования. Пароли будут отправляться на LDAP-сервер в открытом виде. Это значение установлено по умолчанию.
  • `ldaps` — {{ ydb-short-name }} будет выполнять зашифрованное соединение с LDAP-сервером по протоколу TLS с самого первого запроса. Для успешного установления соединения по схеме `ldaps` необходимо отключить использование [запроса `StartTls`](../../security/authentication.md#starttls) в секции `ldap_authentication.use_tls.enable: false` и заполнить информацию о сертификате `ldap_authentication.use_tls.ca_cert_file` и уровне требования сертификата `ldap_authentication.use_tls.cert_require`.
  • При использовании любого другого значения будет браться значение по умолчанию - `ldap`.
`requested_group_attribute` | Атрибут обратного членства в группе. По умолчанию `memberOf`. `extended_settings.enable_nested_groups_search` | Флаг определяет, будет ли выполнятся запрос для получения всего дерева групп, в которые входят непосредственные группы пользователя. `host` | Имя хоста, на котором работает LDAP-сервер. Это устаревший параметр, вместо него должен использоваться параметр `hosts`. diff --git a/ydb/docs/ru/core/reference/configuration/tls.md b/ydb/docs/ru/core/reference/configuration/tls.md index 63faa5471912..7c7126630a40 100644 --- a/ydb/docs/ru/core/reference/configuration/tls.md +++ b/ydb/docs/ru/core/reference/configuration/tls.md @@ -77,7 +77,7 @@ monitoring_config: ### LDAP -{{ ydb-short-name }} поддерживает [LDAP](../../concepts/auth.md#ldap) для аутентификации пользователей. Протокол LDAP имеет два варианта включения TLS. +{{ ydb-short-name }} поддерживает [LDAP](../../security/authentication.md#ldap) для аутентификации пользователей. Протокол LDAP имеет два варианта включения TLS. Пример включения TLS для LDAP через расширение протокола `StartTls`: diff --git a/ydb/docs/ru/core/reference/kafka-api/auth.md b/ydb/docs/ru/core/reference/kafka-api/auth.md index 7814315468ce..a8486a1a4513 100644 --- a/ydb/docs/ru/core/reference/kafka-api/auth.md +++ b/ydb/docs/ru/core/reference/kafka-api/auth.md @@ -4,8 +4,8 @@ Для аутентификации необходимы: -* `` — имя пользователя. Об управлении пользователями читайте в разделе [Управление доступом](../../security/access-management.md). -* `` — пароль пользователя. Об управлении пользователями читайте в разделе [Управление доступом](../../security/access-management.md). +* `` — имя пользователя. Об управлении пользователями читайте в разделе [{#T}](../../security/authentication.md). +* `` — пароль пользователя. Об управлении пользователями читайте в разделе [{#T}](../../security/authentication.md). * `` — [путь базы данных](../../concepts/connect#database). Из этих параметров формируются: @@ -19,4 +19,4 @@ {% endnote %} -Примеры аутентификации смотрите в [Чтение и запись](./read-write.md). \ No newline at end of file +Примеры аутентификации смотрите в [Чтение и запись](./read-write.md). diff --git a/ydb/docs/ru/core/reference/kafka-api/read-write.md b/ydb/docs/ru/core/reference/kafka-api/read-write.md index 8e2adbc34729..19e4dcd1f2ba 100644 --- a/ydb/docs/ru/core/reference/kafka-api/read-write.md +++ b/ydb/docs/ru/core/reference/kafka-api/read-write.md @@ -6,7 +6,7 @@ 1. [Создайте топик](../ydb-cli/topic-create.md). 1. [Добавьте читателя](../ydb-cli/topic-consumer-add.md). -1. [Создайте пользователя](../../security/access-management.md#users). +1. [Создайте пользователя](../../yql/reference/syntax/create-user.md). В примерах используются: diff --git a/ydb/docs/ru/core/reference/ydb-cli/_includes/commands.md b/ydb/docs/ru/core/reference/ydb-cli/_includes/commands.md index 1ebe95e87e6b..24d0147b30c2 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/_includes/commands.md +++ b/ydb/docs/ru/core/reference/ydb-cli/_includes/commands.md @@ -43,15 +43,14 @@ [scheme describe](../commands/scheme-describe.md) | Описание объекта схемы данных [scheme ls](../commands/scheme-ls.md) | Список объектов схемы данных [scheme mkdir](../commands/dir.md#mkdir) | Создание директории -scheme permissions add | Предоставление разрешения -scheme permissions chown | Изменение владельца объекта -scheme permissions clear | Очистка разрешений -scheme permissions grant | Предоставление разрешения -scheme permissions remove | Удаление разрешения -scheme permissions revoke | Удаление разрешения -scheme permissions set | Установка разрешений -scheme permissions clear-inheritance | Запрет наследования разрешений -scheme permissions set-inheritance | Установка наследования разрешений +[scheme permissions chown](../commands/scheme-permissions.md#chown) | Изменение владельца объекта +[scheme permissions clear](../commands/scheme-permissions.md#clear) | Очистка разрешений +[scheme permissions grant](../commands/scheme-permissions.md#grant-revoke) | Предоставление разрешения +[scheme permissions revoke](../commands/scheme-permissions.md#grant-revoke) | Удаление разрешения +[scheme permissions set](../commands/scheme-permissions.md#set) | Установка разрешений +[scheme permissions list](../commands/scheme-permissions.md#list) | Просмотр разрешений +[scheme permissions clear-inheritance](../commands/scheme-permissions.md#clear-inheritance) | Запрет наследования разрешений +[scheme permissions set-inheritance](../commands/scheme-permissions.md#set-inheritance) | Установка наследования разрешений [scheme rmdir](../commands/dir.md#rmdir) | Удаление директории [scripting yql](../scripting-yql.md) | Выполнение YQL-скрипта table attribute add | Добавление атрибута для строкой или колоночной таблицы diff --git a/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md b/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md index c40ff81af0ec..d7b9ad32ead3 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md +++ b/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md @@ -4,7 +4,7 @@ Большинство команд {{ ydb-short-name }} CLI относится к операциям над базой данных {{ ydb-short-name }} и требует соединения с ней для исполнения. -{{ ydb-short-name }} CLI определяет, с какой БД необходимо соединиться и какой [режим аутентификации](../../../concepts/auth.md) использовать из следующих источников (в порядке убывания приоритета): +{{ ydb-short-name }} CLI определяет, с какой БД необходимо соединиться и какой [режим аутентификации](../../../security/authentication.md) использовать из следующих источников (в порядке убывания приоритета): 1. Командной строки 2. Профиля, выбранного опцией командной строки `--profile` diff --git a/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-describe.md b/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-describe.md index c98f1d974d4d..be2c63916e0c 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-describe.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-describe.md @@ -1,6 +1,6 @@ # Получение информации об объекте схемы -Получите информацию об объекте схемы: +Получите информацию об [объекте схемы](../../../../concepts/glossary.md#scheme-object): ```bash {{ ydb-cli }} scheme describe episodes --stats diff --git a/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-ls.md b/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-ls.md index 58ecfb5ab888..fa685d8557eb 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-ls.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/_includes/scheme-ls.md @@ -1,6 +1,6 @@ # Список объектов -Команда `scheme ls` позволяет получить список объектов в базе данных: +Команда `scheme ls` позволяет получить список [схемных объектов](../../../../concepts/glossary.md#scheme-object) в базе данных: ```bash {{ ydb-cli }} [connection options] scheme ls [path] [-lR1] diff --git a/ydb/docs/ru/core/reference/ydb-cli/commands/config-info.md b/ydb/docs/ru/core/reference/ydb-cli/commands/config-info.md index 6786547baf46..2590a212ceac 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/config-info.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/config-info.md @@ -15,14 +15,14 @@ * [endpoint](../../../concepts/connect.md#endpoint) — URL кластера базы данных. * [database](../../../concepts/connect.md#database) — Путь к базе данных. * **Параметры аутентификации:** - * [token](../../../concepts/auth.md#iam) — Access Token. - * [yc-token](../../../concepts/auth.md#iam) — Refresh Token. - * [sa-key-file](../../../concepts/auth.md#iam) — Service Account Key. - * [use-metadata-credentials](../../../concepts/auth.md#iam) — Metadata. - * [user](../../../concepts/auth.md#static-credentials) - * [password](../../../concepts/auth.md#static-credentials) + * [token](../../../security/authentication.md#iam) — Access Token. + * [yc-token](../../../security/authentication.md#iam) — Refresh Token. + * [sa-key-file](../../../security/authentication.md#iam) — Service Account Key. + * [use-metadata-credentials](../../../security/authentication.md#iam) — Metadata. + * [user](../../../security/authentication.md#static-credentials) + * [password](../../../security/authentication.md#static-credentials) * [ca-file](../../../concepts/connect.md#tls-cert) — Корневой сертификат. -* [iam-endpoint](../../../concepts/auth.md#iam) — URL IAM сервиса. +* [iam-endpoint](../../../security/authentication.md#iam) — URL IAM сервиса. ## Примеры {#examples} diff --git a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md new file mode 100644 index 000000000000..2180cfa3ef1c --- /dev/null +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -0,0 +1,217 @@ +# Разрешения + +## Общий перечень команд + +Получить список доступных команд можно через интерактивную справку: + +```bash +{{ ydb-cli }} scheme permissions --help +``` + +```bash +Usage: ydb [global options...] scheme permissions [options...] + +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](../../../yql/reference/syntax/grant.md) и [REVOKE](../../../yql/reference/syntax/revoke.md). + +Синтаксис команд {{ ydb-short-name }} CLI выглядит следующим образом: + +```bash +{{ ydb-cli }} [connection options] scheme permissions grant [options...] +{{ ydb-cli }} [connection options] scheme permissions revoke [options...] +``` + +Параметры: + +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать; +`` — имя пользователя или группы, для которых изменяются права доступа. + +Дополнительные параметры `[options...]`: + +`{-p|--permission} NAME` — список прав, которые необходимо предоставить (grant) или отозвать (revoke) у пользователя. + +Каждое право нужно передавать отдельным параметром, например: + +```bash +{{ ydb-cli }} scheme permissions grant -p "ydb.access.grant" -p "ydb.generic.read" '/Root/db1/MyApp/Orders' testuser +``` + +## set + +Команда `set` позволяет установить права доступа к объектам схемы для пользователя или группы пользователей. + +Синтаксис команды: + +```bash +{{ ydb-cli }} [connection options] scheme permissions set [options...] +``` + +Значения всех параметров полностью идентичны командам [`grant`, `revoke`](#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`: + +```bash +{{ ydb-cli }} scheme permissions set -p "ydb.granular.select_row" '/Root/db1' testuser +``` + +## list + +Команда `list` позволяет получить текущий список прав доступа к объектам схемы. + +Синтаксис команды: + +```bash +{{ ydb-cli }} [connection options] scheme permissions list [options...] +``` + +Параметры: +`` — полный путь от корня кластера до объекта, права на который необходимо получить. + +Пример результата выполнения `list`: + +```bash +{{ ydb-cli }} scheme permissions list '/Root/db1/MyApp' +``` + +```bash +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` позволяет отозвать все ранее выданные права на схемный объект. Права, действующие на него по правилам наследования, продолжат действовать. + +```bash +{{ ydb-cli }} [global options...] scheme permissions clear [options...] +``` + +Параметры: +`` — полный путь от корня кластера до объекта, права на который необходимо отозвать. + +Например, если над состоянием базы данных из предыдущего примера [`list`](#list) выполнить команду: + +```bash +{{ ydb-cli }} scheme permissions clear '/Root/db1/MyApp' +``` + +И затем заново выполнить команду `list` на объект `/Root/db1/MyApp`, то получим следующий результат: + +```bash +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` позволяет сменить владельца для схемного объекта. + +Синтаксис команды: + +```bash +{{ ydb-cli }} [connection options] scheme permissions chown [options...] +``` + +Параметры: +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать; +`` — имя нового владельца указанного объекта, может быть пользователем или группой. + +Пример команды `chown`: + +```bash +{{ ydb-cli }} scheme permissions chown '/Root/db1' testuser +``` + +{% note info %} + +В текущей версии {{ ydb }} есть ограничение, что только непосредственно пользователь - текущий владелец схемного объекта может сменить владельца. + +{% endnote %} + +## clear-inheritance + +Команда `clear-inheritance` позволяет запретить наследование разрешений для схемного объекта. + +Синтаксис команды: + +```bash +{{ ydb-cli }} [connection options] scheme permissions clear-inheritance [options...] +``` + +Параметры: +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать. + +Пример команды `clear-inheritance`: + +```bash +{{ ydb-cli }} scheme permissions clear-inheritance '/Root/db1' +``` + +## set-inheritance + +Команда `set-inheritance` позволяет включить наследование разрешений для схемного объекта. + +Синтаксис команды: + +```bash +{{ ydb-cli }} [connection options] scheme permissions set-inheritance [options...] +``` + +Параметры: +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать. + +Пример команды `set-inheritance`: + +```bash +{{ ydb-cli }} scheme permissions set-inheritance '/Root/db1' +``` diff --git a/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md b/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md index 4605bf86c72c..91a7c32df03f 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md +++ b/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md @@ -216,7 +216,7 @@ Please enter your numeric choice: ``` - Все доступные методы аутентификации описаны в статье [{#T}](../../../../concepts/auth.md). Набор методов и текст подсказок может отличаться от приведенного в данном примере. + Все доступные методы аутентификации описаны в статье [{#T}](../../../../security/authentication.md). Набор методов и текст подсказок может отличаться от приведенного в данном примере. Если выбранный вами метод подразумевает указание дополнительного параметра, вам будет предложено его ввести. Например, если вы выбрали `4` (Use service account key file): diff --git a/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml b/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml index 170f762998d7..5f8f63f89e64 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml +++ b/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml @@ -21,6 +21,8 @@ items: href: commands/scheme-ls.md - name: Информация об объекте href: commands/scheme-describe.md + - name: Права + href: commands/scheme-permissions.md - name: Директории href: commands/dir.md - name: Вторичные индексы diff --git a/ydb/docs/ru/core/reference/ydb-dstool/global-options.md b/ydb/docs/ru/core/reference/ydb-dstool/global-options.md index de47f4153cac..afced63ef160 100644 --- a/ydb/docs/ru/core/reference/ydb-dstool/global-options.md +++ b/ydb/docs/ru/core/reference/ydb-dstool/global-options.md @@ -12,7 +12,7 @@ `--grpc-port` | gRPC-порт для вызова процедур. `--mon-port` | Порт для просмотра данных HTTP-мониторинга в формате JSON. `--mon-protocol` | Если протокол для подключения к кластеру не задан явно в эндпоинте, то используется указанное здесь значение. -`--token-file` | Путь к файлу с [Access Token](../../concepts/auth.md#iam). +`--token-file` | Путь к файлу с [Access Token](../../security/authentication.md#iam). `--ca-file` | Путь к файлу корневого PEM-сертификата для TLS-соединения. `--http` | Использовать HTTP для подключения к Blob Storage вместо gRPC. `--http-timeout` | Тайм-аут на операции ввода-вывода сокета во время HTTP(s)-запросов. diff --git a/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md b/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md index f655e78ecc4c..42e4b65f1794 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md @@ -1,10 +1,10 @@ # Аутентификация в SDK -Как описано в статье о [подключении к серверу {{ ydb-short-name }}](../../../concepts/connect.md), клиент с каждым запросом должен отправить [аутентификационный токен](../../../concepts/auth.md). Аутентификационный токен проверяется сервером и, в случае успешной аутентификации, запрос авторизуется и выполняется, иначе возвращается ошибка `Unauthenticated`. +Как описано в статье о [подключении к серверу {{ ydb-short-name }}](../../../concepts/connect.md), клиент с каждым запросом должен отправить [аутентификационный токен](../../../security/authentication.md). Аутентификационный токен проверяется сервером и, в случае успешной аутентификации, запрос авторизуется и выполняется, иначе возвращается ошибка `Unauthenticated`. {{ ydb-short-name }} SDK использует объект, отвечающий за генерацию таких токенов. SDK предоставляет встроенные cпособы получения такого объекта: -1. Методы с явной передачей параметров, каждый из методов реализует один из [режимов аутентификации](../../../concepts/auth.md). +1. Методы с явной передачей параметров, каждый из методов реализует один из [режимов аутентификации](../../../security/authentication.md). 2. Метод определения режима аутентификации и необходимых параметров из переменных окружения. Обычно объект генерации токенов создается перед инициализацией драйвера {{ ydb-short-name }} и передается параметром в его конструктор. C++ и Go SDK дополнительно позволяют через один драйвер работать с несколькими БД и объектами генерации токенов. diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index 80829738fdaf..e96c4b7eee78 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -51,7 +51,7 @@ TDriver driver(driverConfig); ``` - В этом примере используется аутентификационный токен, сохранённый в переменной окружения `YDB_TOKEN`. Подробнее про [соединение с БД](../../concepts/connect.md) и [аутентификацию](../../concepts/auth.md). + В этом примере используется аутентификационный токен, сохранённый в переменной окружения `YDB_TOKEN`. Подробнее про [соединение с БД](../../concepts/connect.md) и [аутентификацию](../../security/authentication.md). Фрагмент кода приложения для создания клиента: @@ -77,7 +77,7 @@ В этом примере используется вспомогательный метод `CloudAuthHelper.getAuthProviderFromEnviron()`, получающий токен из переменных окружения. Например, `YDB_ACCESS_TOKEN_CREDENTIALS`. - Подробнее про [соединение с БД](../../concepts/connect.md) и [аутентификацию](../../concepts/auth.md). + Подробнее про [соединение с БД](../../concepts/connect.md) и [аутентификацию](../../security/authentication.md). Клиент сервиса топиков ([исходный код](https://github.com/ydb-platform/ydb-java-sdk/blob/master/topic/src/main/java/tech/ydb/topic/TopicClient.java#L34)) работает поверх транспорта {{ ydb-short-name }} и отвечает как за управляющие операции с топиками, так и за создание писателей и читателей. diff --git a/ydb/docs/ru/core/security/access-management.md b/ydb/docs/ru/core/security/access-management.md deleted file mode 100644 index e33476500e50..000000000000 --- a/ydb/docs/ru/core/security/access-management.md +++ /dev/null @@ -1,57 +0,0 @@ -# Управление доступом - -{{ ydb-short-name }} поддерживает аутентификацию по логину паролю. Подробнее читайте в разделе [{#T}](../concepts/auth.md). - -## Встроенные группы {#builtin} - -Кластер {{ ydb-short-name }} имеет встроенные группы, предоставляющие заранее определенные наборы ролей: - -Группа | Описание ---- | --- -`ADMINS` | Неограниченные права на всю схему кластера. -`DATABASE-ADMINS` | Права на создание и удаление баз данных (`CreateDatabase`, `DropDatabase`). -`ACCESS-ADMINS` | Права на управление правами других пользователей (`GrantAccessRights`). -`DDL-ADMINS` | Права на изменение схемы баз данных (`CreateDirectory`, `CreateTable`, `WriteAttributes`, `AlterSchema`, `RemoveSchema`). -`DATA-WRITERS` | Права на изменение данных (`UpdateRow`, `EraseRow`). -`DATA-READERS` | Права на чтение данных (`SelectRow`). -`METADATA-READERS` | Права на чтение метаинформации, без доступа к данным (`DescribeSchema` и `ReadAttributes`). -`USERS` | Права на подключение к базам данных (`ConnectDatabase`). - -Все пользователи по умолчанию входят в группу `USERS`. Пользователь `root` по умолчанию входит в группу `ADMINS`. - -Ниже показано, как группы наследуют разрешения друг друга. Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS`: - -![groups](../_assets/groups.svg) - -## Управление группами {#groups} - -Для создания, изменения или удаления группы воспользуйтесь операторами YQL: - -* [{#T}](../yql/reference/syntax/create-group.md). -* [{#T}](../yql/reference/syntax/alter-group.md). -* [{#T}](../yql/reference/syntax/drop-group.md). - -{% note info %} - -Имена встроенных групп в команде `ALTER GROUP` необходимо указывать в верхнем регистре. Кроме того, при указании встроенных групп, содержащих в своем имени символ "-", необходимо использовать обратные кавычки (бэктики), например: - -```yql -ALTER GROUP `DATA-WRITERS` ADD USER myuser1; -``` - -{% endnote %} - -## Управление пользователями {#users} - -Для создания, изменения или удаления пользователя воспользуйтесь операторами YQL: - -* [{#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/concepts/auth.md b/ydb/docs/ru/core/security/authentication.md similarity index 88% rename from ydb/docs/ru/core/concepts/auth.md rename to ydb/docs/ru/core/security/authentication.md index 0c56898a31d4..d421cbae8b9b 100644 --- a/ydb/docs/ru/core/concepts/auth.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -2,12 +2,58 @@ После успешной установки сетевого соединения сервер принимает к обработке запросы от клиента, в которых передается аутентификационная информация. На ее основании сервер определяет учетную запись (аккаунт) клиента и проверяет доступ на выполнение запроса. +{% note info %} + +Под клиентом аутентификации понимается пользователь, проходящий процедуру проверки подлинности при доступе к {{ ydb-short-name }}. Примерами клиентов являются [SDK](../reference/ydb-sdk/index.md) или [CLI](../reference/ydb-cli/index.md). + +{% endnote %} + Поддерживаются следующие режимы аутентификации: -* Анонимный доступ — включен по умолчанию и доступен сразу после [установки кластера](../devops/index.md). -* [Аутентификация с использованием стороннего IAM-провайдера](#iam), например [Yandex Identity and Access Management]{% if lang == "en" %}(https://cloud.yandex.com/en/docs/iam/){% endif %}{% if lang == "ru" %}(https://cloud.yandex.ru/docs/iam/){% endif %}. +* [Анонимная](#anonymous) аутентификация. * Аутентификация по [логину и паролю](#static-credentials). * Аутентификация с использованием [LDAP каталога](#ldap-auth-provider). +* [Аутентификация с использованием стороннего IAM-провайдера](#iam), например [Yandex Identity and Access Management](https://yandex.cloud/ru/docs/iam/). + +## Анонимная аутентификация {#anonymous} + +В данном режиме допускается логин без указания аутентификационных данных, таких как имя пользователя или токен. В этом случае также не производится [авторизация](authorization.md) (проверка прав доступа). + +Но если будет указан пользователь или токен, то будет работать соответствующий режим аутентификации с последующей авторизацией. + +{% note warning %} + +Использовать анонимную аутентификацию следует только в ознакомительных целях для локальных баз данных, не имеющих доступа по сети. + +{% endnote %} + +За включение анонимной аутентификации отвечает ключ `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. + +## Аутентификация по логину и паролю {#static-credentials} + +Данный вид доступа подразумевает наличие у каждого пользователя базы данных логина и пароля. +Логин пользователя может содержать только строчные буквы латинского алфавита, цифры и символ `@`. +Допускается использование пустого пароля. + +Логин пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом [Argon2](https://ru.wikipedia.org/wiki/Argon2). Доступ к этой таблице имеет только администратор системы. + +В ответ на логин и пароль возвращается токен. Время жизни токена по умолчанию составляет 12 часов. Для ротации токенов клиент, например, [SDK](../reference/ydb-sdk/index.md), самостоятельно обращается к сервису аутентификации. Использование токена ускоряет процесс аутентификации и повышает безопасность. + +Процесс аутентификации по логину и паролю включает следующие шаги: + +1. Клиент обращается к базе данных и передаёт логин и пароль пользователя сервису аутентификации {{ ydb-short-name }}. +1. Сервис проверяет аутентификационные данные, при успешном сопоставлении создаёт токен и возвращает его клиенту. +1. Клиент обращается к БД, передавая в качестве аутентификационной информации токен. + +Для включения аутентификации по логину и паролю укажите значение `true` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. + +Об управлении ролями и пользователями читайте в [{#T}](../security/authorization.md). + +## Взаимодействие с LDAP каталогом {#ldap-auth-provider} + +В {{ ydb-short-name }} интегрировано взаимодействие с [LDAP каталогом](https://ru.wikipedia.org/wiki/LDAP). LDAP каталог является внешним по отношению к {{ ydb-short-name }} сервисом и используется для аутентификации и авторизации пользователей базы данных. Прежде чем воспользоваться данным способом аутентификации и авторизации необходимо иметь развернутый LDAP сервис и настроенный сетевой доступ между ним и серверами {{ ydb-short-name }}. + +Примеры поддерживаемых реализаций LDAP каталогов: [OpenLdap](https://openldap.org/), [Active Directory](https://azure.microsoft.com/en-us/products/active-directory/). ## Аутентификация с использованием стороннего IAM-провайдера {#iam} @@ -35,36 +81,6 @@ При использовании режимов, предусматривающих обращение клиента {{ ydb-short-name }} к IAM, дополнительно может быть задан URL IAM, предоставляющий API выдачи токенов. По умолчанию в существующих SDK и CLI производится попытка обращения к API IAM {{ yandex-cloud }}, размещенному на `iam.api.cloud.yandex.net:443`. -{% include [overlay/auth_choose.md](_includes/connect_overlay/auth_choose.md) %} - -## Аутентификация по логину и паролю {#static-credentials} - -Процесс аутентификации по логину и паролю включает следующие шаги: - -1. Клиент обращается к БД и передает логин и пароль пользователя сервису аутентификации {{ ydb-short-name }}. - - Имя пользователя может содержать только строчные буквы латинского алфавита и цифры. Требования к паролю не предъявляются, пароль может быть пустым. - -1. Сервис аутентификации передает аутентификационные данные в компонент аутентификации {{ ydb-short-name }}. -1. Компонент валидирует аутентификационные данные, при успешном сопоставлении создает токен и возвращает его сервису аутентификации. - - Использование токена ускоряет процесс аутентификации и повышает безопасность. Время жизни токена по умолчанию 12 часов. Для ротации токенов YDB SDK самостоятельно обращается к сервису аутентификации. - - Имя пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом [Argon2]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Argon2){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Argon2){% endif %}. В режиме аутентификации по логину и паролю доступ к таблице имеет только администратор системы. - -1. Сервис аутентификации возвращает токен клиенту. -1. Клиент обращается к БД, передавая в качестве аутентификационной информации токен. - -Для включения аутентификации по логину и паролю укажите значение `true` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. - -Об управлении ролями и пользователями читайте в [{#T}](../security/access-management.md). - -## Взаимодействие с LDAP каталогом {#ldap-auth-provider} - -В {{ ydb-short-name }} интегрировано взаимодействие с [LDAP каталогом](https://ru.wikipedia.org/wiki/LDAP). LDAP каталог является внешним по отношению к {{ ydb-short-name }} сервисом и используется для аутентификации и авторизации пользователей базы данных. Прежде чем воспользоваться данным способом аутентификации и авторизации необходимо иметь развернутый LDAP сервис и настроенный сетевой доступ между ним и серверами {{ ydb-short-name }}. - -Примеры поддерживаемых реализаций LDAP каталогов: [OpenLdap](https://openldap.org/), [Active Directory](https://azure.microsoft.com/en-us/products/active-directory/). - ### Аутентификация Аутентификация с помощью LDAP протокола похожа на процесс аутентификации по логину и паролю. Отличие заключается лишь в том, что роль компонента аутентификации играет LDAP каталог. LDAP каталог используется только для проверки пары логин/пароль. diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md new file mode 100644 index 000000000000..504d7b42a42f --- /dev/null +++ b/ydb/docs/ru/core/security/authorization.md @@ -0,0 +1,109 @@ +# Авторизация + +## Основные понятия + +Авторизация в {{ ydb-short-name }} основана на понятиях: + +* [Объект доступа](../concepts/glossary.md#access-object) +* [Субъект доступа](../concepts/glossary.md#access-subject) +* [Право доступа](../concepts/glossary.md#access-right) +* [Список разрешений](../concepts/glossary.md#access-acl) +* [Владелец](../concepts/glossary.md#access-owner) +* [Пользователь](../concepts/glossary.md#access-user) +* [Группа](../concepts/glossary.md#access-group) + +Независимо от метода [аутентификации](https://ru.wikipedia.org/wiki/Аутентификация), [авторизация](https://ru.wikipedia.org/wiki/Авторизация) всегда выполняется на серверной стороне {{ ydb-short-name }} на основе хранящейся в ней информации об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. + +Авторизация выполняется на каждое действие пользователя: его права не кешируются, так как могут быть отозваны или предоставлены в любой момент времени. + +## Пользователь {#user} + +Для создания, изменения и удаления пользователей {{ ydb-short-name }} есть команды: + +* [{#T}](../yql/reference/syntax/create-user.md) +* [{#T}](../yql/reference/syntax/alter-user.md) +* [{#T}](../yql/reference/syntax/drop-user.md) + +{% include [!](../_includes/do-not-create-users-in-ldap.md) %} + +{% note info %} + +Отдельно выделяется пользователь `root` с максимальными правами. Он создаётся при первоначальном развёртывании кластера, в ходе которой ему нужно сразу установить пароль. В дальнейшем использование данной учетной записи не рекомендуется и следует завести пользователей с ограниченными правами. + +Подробнее про первоначальное развертывание: + +* [Ansible](../devops/ansible/initial-deployment.md) +* [Kubernetes](../devops/kubernetes/initial-deployment.md) +* [Вручную](../devops/manual/initial-deployment.md) + +{% endnote %} + +{{ ydb-short-name }} позволяет работать с [пользователями](../concepts/glossary.md#access-user) из разных каталогов и систем, и они отличаются [SID](../concepts/glossary.md#access-sid) с использованием суффикса. + +Суффикс `@` идентифицирует «источник пользователя» или «auth-домен», внутри которых гарантируется уникальность всех `login`. Например, в случае [аутентификации LDAP](authentication.md#ldap-auth-provider) имена пользователей будут `user1@ldap` и `user2@ldap`. +Если указан `login` без суффикса, то имеются в виду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. + +## Группа {#group} + +Любого [пользователя](../concepts/glossary.md#access-user) можно включить в ту или иную [группу доступа](../concepts/glossary.md#access-group) или исключить из неё. Как только пользователь включается в группу, он получает все права на [объекты базы данных](../concepts/glossary.md#access-object), которые предоставлялись группе доступа. +С помощью групп доступа {{ ydb-short-name }} можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права доступа на нужные объекты. + +{% note info %} + +Группа доступа может быть пустой, когда в неё не входит ни один пользователь. + +Группы доступа могут быть вложенными. + +{% endnote %} + +Для создания, изменения и удаления [групп](../concepts/glossary.md#access-group) есть следующие виды YQL запросов: + +* [{#T}](../yql/reference/syntax/create-group.md) +* [{#T}](../yql/reference/syntax/alter-group.md) +* [{#T}](../yql/reference/syntax/drop-group.md) + +## Право {#right} + +[Права](../concepts/glossary.md#access-right) в {{ ydb-short-name }} привязаны не [субъекту](../concepts/glossary.md#access-subject), а к [объекту доступа](../concepts/glossary.md#access-object). + +У каждого объекта доступа есть список разрешений — [ACL](../concepts/glossary.md#access-acl) (Access Control List) — он хранит все предоставленные [субъектам доступа](../concepts/glossary.md#subject) (пользователям и группам) права на объект. + +По умолчанию, права наследуются от родителей потомкам по дереву объектов доступа. + +Для управления правами служат следующие виды YQL запросов: + +* [{#T}](../yql/reference/syntax/grant.md). +* [{#T}](../yql/reference/syntax/revoke.md). + +Для управления правами служат следующие CLI-команды: + +* [chown](../reference/ydb-cli/commands/scheme-permissions.md#chown) +* [grant](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke) +* [revoke](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke) +* [set](../reference/ydb-cli/commands/scheme-permissions.md#set) +* [clear](../reference/ydb-cli/commands/scheme-permissions.md#clear) +* [clear-inheritance](../reference/ydb-cli/commands/scheme-permissions.md#clear-inheritance) +* [set-inheritance](../reference/ydb-cli/commands/scheme-permissions.md#set-inheritance) + +Для просмотра ACL объекта доступа служат следующие CLI-команды: + +* [describe](../reference/ydb-cli/commands/scheme-describe.md) +* [list](../reference/ydb-cli/commands/scheme-permissions.md#list) + +## Владелец объекта {#owner} + +У каждого объекта доступа есть [владелец](../concepts/glossary.md#access-owner). Им по умолчанию становится [субъект доступа](../concepts/glossary.md#access-subject), создавший [объект доступа](../concepts/glossary.md#access-object). + +{% note info %} + +Для владельца не проверяются [списки разрешений](../concepts/glossary.md#access-control-list) на данный [объект доступа](../concepts/glossary.md#access-object). + +Он имеет полный набор прав на объект. + +{% endnote %} + +Владелец объекта есть в том числе у кластера в целом и каждой базы данных. + +Сменить владельца можно с помощью CLI команды [`chown`](../reference/ydb-cli/commands/scheme-permissions.md#chown). + +Просматривать владельца объекта можно с помощью CLI команды [`describe`](../reference/ydb-cli/commands/scheme-describe.md). diff --git a/ydb/docs/ru/core/security/encryption/data-in-transit.md b/ydb/docs/ru/core/security/encryption/data-in-transit.md index 067b0fac39ee..1339239248be 100644 --- a/ydb/docs/ru/core/security/encryption/data-in-transit.md +++ b/ydb/docs/ru/core/security/encryption/data-in-transit.md @@ -12,7 +12,7 @@ * {{ ydb-short-name }} в роли клиента: - * [LDAP](../../concepts/auth.md#ldap) — для аутентификации пользователей. + * [LDAP](../authentication.md#ldap) — для аутентификации пользователей. * [Федеративные запросы](../../concepts/federated_query/index.md) — функциональность, позволяющая {{ ydb-short-name }} выполнять запросы к различным внешним источникам данных. Запросы к некоторым источникам отправляются напрямую из процесса `ydbd`, в то время как другие проксируются через отдельный процесс-коннектор. * [Трассировочные](../../reference/observability/tracing/setup.md) данные отправляются во внешний сборщик через gRPC. diff --git a/ydb/docs/ru/core/security/index.md b/ydb/docs/ru/core/security/index.md index e7b05f76854f..1026268e9b7b 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -4,7 +4,8 @@ Основные материалы: -- [{#T}](access-management.md) +- [{#T}](authentication.md) +- [{#T}](authorization.md) - [{#T}](audit-log.md) - Шифрование: @@ -14,5 +15,4 @@ - [{#T}](short-access-control-notation.md) - Концепции: - - [{#T}](../concepts/auth.md) - - [{#T}](../concepts/connect.md) \ No newline at end of file + - [{#T}](../concepts/connect.md) diff --git a/ydb/docs/ru/core/security/toc_p.yaml b/ydb/docs/ru/core/security/toc_p.yaml index 3431bae533e6..adc1a854600c 100644 --- a/ydb/docs/ru/core/security/toc_p.yaml +++ b/ydb/docs/ru/core/security/toc_p.yaml @@ -1,6 +1,8 @@ items: -- name: Управление доступом - href: access-management.md +- name: Аутентификация + href: authentication.md +- name: Авторизация + href: authorization.md - name: Аудитный лог href: audit-log.md - name: Шифрование diff --git a/ydb/docs/ru/core/_assets/groups.svg b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_assets/builtin_groups.svg similarity index 100% rename from ydb/docs/ru/core/_assets/groups.svg rename to ydb/docs/ru/core/yql/reference/yql-core/syntax/_assets/builtin_groups.svg diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/builtin_groups.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/builtin_groups.md new file mode 100644 index 000000000000..e1c98b6ebccf --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/builtin_groups.md @@ -0,0 +1,20 @@ +## Встроенные группы {#builtin} + +Кластер {{ ydb-short-name }} имеет встроенные группы, предоставляющие заранее определенные наборы ролей: + +Группа | Описание +--- | --- +`ADMINS` | Неограниченные права на всю схему кластера +`DATABASE-ADMINS` | Права на создание и удаление баз данных (`CreateDatabase`, `DropDatabase`) +`ACCESS-ADMINS` | Права на управление правами других пользователей (`GrantAccessRights`) +`DDL-ADMINS` | Права на изменение схемы баз данных (`CreateDirectory`, `CreateTable`, `WriteAttributes`, `AlterSchema`, `RemoveSchema`) +`DATA-WRITERS` | Права на изменение данных (`UpdateRow`, `EraseRow`) +`DATA-READERS` | Права на чтение данных (`SelectRow`) +`METADATA-READERS` | Права на чтение метаинформации, без доступа к данным (`DescribeSchema` и `ReadAttributes`) +`USERS` | Права на подключение к базам данных (`ConnectDatabase`) + +Все пользователи по умолчанию входят в группу `USERS`. Пользователь `root` по умолчанию входит в группу `ADMINS`. + +Ниже показано, как группы наследуют разрешения друг друга. Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS`: + +![builtin_groups](../_assets/builtin_groups.svg) 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 index 84a96f4677e9..21c734d21751 100644 --- 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 @@ -1,34 +1,51 @@ ## Права доступа {#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` +В качестве имён прав доступа можно использовать имена {{ ydb-short-name }} прав или соответствующие им ключевые слова YQL. +В таблице ниже перечислены возможные имена прав. + +{{ ydb-short-name }} право | Ключевое слово YQL | Описание +--- | --- | --- +Права уровня баз данных +`ydb.database.connect` | `CONNECT` | Право подключаться к базе данных +`ydb.database.create` | `CREATE` | Право создавать новые базы данных в кластере +`ydb.database.drop` | `DROP` | Право удалять базы данных в кластере +Элементарные права на объекты базы данных +`ydb.granular.select_row` | `SELECT ROW` | Право читать строки из таблицы (select), читать сообщения сообщения из топиков +`ydb.granular.update_row` | `UPDATE ROW` | Право обновлять строки в таблице (insert, update, insert, erase), писать сообщения в топики +`ydb.granular.erase_row` | `ERASE ROW` | Право удалять строки из таблицы +`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` | Право просмотра имеющихся прав доступа (ACL) на объект доступа, просмотра описания объектов доступа (директории, таблицы, топики) +`ydb.granular.alter_schema` | `ALTER SCHEMA` | Право изменять объекты доступа (директории, таблицы, топики), в том числе права пользователей на объекты доступа +Дополнительные флаги +`ydb.access.grant` | `GRANT` | Дополнительный флаг, помечающий другие выдаваемые права, что их пользователь может также выдать другим пользователям (аналог `WITH GRANT OPTION`) +Права, основанные на других правах +`ydb.tables.modify` | `MODIFY TABLES` | `ydb.granular.update_row` + `ydb.granular.erase_row` +`ydb.tables.read` | `SELECT TABLES` | Синоним `ydb.granular.select_row` +`ydb.generic.list` | `LIST` | Синоним `ydb.granular.describe_schema` +`ydb.generic.read` | `SELECT` | `ydb.granular.select_row` + `ydb.generic.list` +`ydb.generic.write` | `INSERT` | `ydb.granular.update_row` + `ydb.granular.erase_row` + `ydb.granular.create_directory` + `ydb.granular.create_table` + `ydb.granular.create_queue` + `ydb.granular.remove_schema` + `ydb.granular.alter_schema` +`ydb.generic.use_legacy` | `USE LEGACY` | `ydb.generic.read` + `ydb.generic.write` + `ydb.access.grant` +`ydb.generic.use` | `USE` | `ydb.generic.use_legacy` + `ydb.database.connect` +`ydb.generic.manage` | `MANAGE` | `ydb.database.create` + `ydb.database.drop` +`ydb.generic.full_legacy` | `FULL LEGACY` | `ydb.generic.use_legacy` + `ydb.generic.manage` +`ydb.generic.full` | `FULL` | `ydb.generic.use` + `ydb.generic.manage` * `ALL [PRIVILEGES]` - используется для указания всех возможных прав на объекты схемы для пользователей или групп. `PRIVILEGES` является необязательным ключевым словом, необходимым для совместимости с SQL стандартом. + +{% note info %} + +Права `ydb.database.connect`, `ydb.granular.describe_schema`, `ydb.granular.select_row`, `ydb.granular.update_row` необходимо рассматривать как слои прав. + +```mermaid +graph TD; + ydb.database.connect --> ydb.granular.describe_schema; + ydb.granular.describe_schema --> ydb.granular.select_row; + ydb.granular.select_row --> ydb.granular.update_row; +``` + +Например, для изменения строк необходимо не только право `ydb.granular.update_row`, но и все вышележащие права. + +{% endnote %} diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-group.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-group.md index e8eea2f6bb34..e5c92a61610c 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-group.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-group.md @@ -11,3 +11,5 @@ ALTER GROUP role_name DROP USER user_name [, ... ] * `role_name` — имя группы. * `user_name` — имя пользователя. + +{% include [x](_includes/builtin_groups.md) %} diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md index c53b5cfba904..2c61075b2757 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md @@ -9,7 +9,9 @@ ALTER USER user_name [ WITH ] option [ ... ] ``` * `user_name` — имя пользователя. -* `option` — пароль пользователя: +* `option` — опция команды: - * `PASSWORD 'password'` — создает пользователя с паролем `password`. Опция `ENCRYPTED` всегда включена. - * `PASSWORD NULL` — создает пользователя с пустым паролем. + * `PASSWORD 'password'` — изменяет пароль на `password`. + * `PASSWORD NULL` — устанавливает пустой пароль. + * `NOLOGIN` - запрет на логин пользователя (блокировка пользователя). + * `LOGIN` - разрешение на логин пользователя (разблокировка пользователя). diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md index 50a420232007..1d61bb2b06b1 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md @@ -9,6 +9,10 @@ CREATE USER user_name [option] ``` * `user_name` — имя пользователя. Может содержать строчные буквы латинского алфавита и цифры. -* `option` — пароль пользователя: - * `PASSWORD 'password'` — создает пользователя с паролем `password`. Опция `ENCRYPTED` всегда включена. - * `PASSWORD NULL` — создает пользователя с пустым паролем. +* `option` — опция команды: + * `PASSWORD 'password'` — создает пользователя с паролем `password`. + * `PASSWORD NULL` — создает пользователя с пустым паролем (по умолчанию). + * `NOLOGIN` - запрет на логин пользователя (блокировка пользователя). + * `LOGIN` - разрешение на логин пользователя (по умолчанию). + +{% include [!](../../../_includes/do-not-create-users-in-ldap.md) %} diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-user.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-user.md index e2fe7270c8cf..b6e814361c22 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-user.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-user.md @@ -9,4 +9,4 @@ DROP USER [ IF EXISTS ] user_name [, ...] ``` * `IF EXISTS` — не выводить ошибку, если пользователь не существует. -* `user_name` — имя пользователя, которого нужно удалить. +* `user_name` — имя удаляемого пользователя. Поддерживается возможность задать список пользователей через запятую, например: `DROP USER user1, user2, user3;`. 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 index 51752fe8c475..dbeb12a3feef 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/grant.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/grant.md @@ -12,7 +12,7 @@ GRANT {{permission_name} [, ...] | ALL [PRIVILEGES]} ON {path_to_scheme_object [ * `path_to_scheme_object` - путь до объекта схемы, на который выдаются права. * `role_name` - имя пользователя или группы, для которого выдаются права на объект схемы. -`WITH GRANT OPTION` - использование этой конструкции наделяет пользователя или группу пользователей правом управлять правами доступа - назначать или отзывать определенные права. Конструкция имееет функцианальность аналогичную выдаче права `"ydb.access.grant"` или `GRANT`. +`WITH GRANT OPTION` - использование этой конструкции наделяет пользователя или группу пользователей правом управлять правами доступа - назначать или отзывать определенные права. Конструкция имеет функциональность аналогичную выдаче права `"ydb.access.grant"` или `GRANT`. Субъект, обладающий правом `ydb.access.grant`, не может выдавать права шире, чем обладает сам. {% include [x](_includes/permissions/permissions_list.md) %}