From 4659e86a6907a2ec892b5cf48e872777b39061b9 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Mon, 16 Dec 2024 16:26:46 +0300 Subject: [PATCH 01/27] Authentication --- .../_includes/connect_overlay/auth_choose.md | 0 .../auth.md => security/authentication.md} | 23 +++++++----- ydb/docs/redirects.yaml | 2 + .../_includes/connect_overlay/auth_choose.md | 0 .../auth.md => security/authentication.md} | 37 +++++++++++++------ 5 files changed, 40 insertions(+), 22 deletions(-) delete mode 100644 ydb/docs/en/core/concepts/_includes/connect_overlay/auth_choose.md rename ydb/docs/en/core/{concepts/auth.md => security/authentication.md} (92%) delete mode 100644 ydb/docs/ru/core/concepts/_includes/connect_overlay/auth_choose.md rename ydb/docs/ru/core/{concepts/auth.md => security/authentication.md} (92%) 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/security/authentication.md similarity index 92% rename from ydb/docs/en/core/concepts/auth.md rename to ydb/docs/en/core/security/authentication.md index 429b63e0275a..3b8f3638d52c 100644 --- a/ydb/docs/en/core/concepts/auth.md +++ b/ydb/docs/en/core/security/authentication.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 without specifying a username and password. This type of access should be used only for informational purposes for internal local databases that do not have access 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. +You can only use lower case Latin letters and digits in usernames. No restrictions apply to passwords (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 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. - 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, for example, the SDK, independently accesses the authentication service. Tokens accelerate authentication and strengthen 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..edb585fc0c7b 100644 --- a/ydb/docs/redirects.yaml +++ b/ydb/docs/redirects.yaml @@ -37,6 +37,8 @@ common: to: /postgresql/import.md - from: /concepts/column-table.md to: /concepts/datamodel/table.md + - from: /concepts/auth.md + to: /concepts/security/authentication.md # DevOps-related redirects - from: /getting_started/kubernetes.md 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/auth.md b/ydb/docs/ru/core/security/authentication.md similarity index 92% rename from ydb/docs/ru/core/concepts/auth.md rename to ydb/docs/ru/core/security/authentication.md index 0c56898a31d4..d186da3ba6c6 100644 --- a/ydb/docs/ru/core/concepts/auth.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -1,14 +1,29 @@ # Аутентификация +В данном документе + После успешной установки сетевого соединения сервер принимает к обработке запросы от клиента, в которых передается аутентификационная информация. На ее основании сервер определяет учетную запись (аккаунт) клиента и проверяет доступ на выполнение запроса. +{% note info %} + +Под клиентом аутентификации понимается SDK или CLI. + +{% endnote %} + Поддерживаются следующие режимы аутентификации: -* Анонимный доступ — включен по умолчанию и доступен сразу после [установки кластера](../devops/index.md). +* Анонимный аутентификация — включена по умолчанию и доступна сразу после [установки кластера](../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 %}. * Аутентификация по [логину и паролю](#static-credentials). * Аутентификация с использованием [LDAP каталога](#ldap-auth-provider). +## Анонимная аутентификация + +Позволяет подключаться к YDB без указания имени пользователя и пароля. Использовать данный вид доступа следует только в ознакомительных целях для внутренних локальных баз данных, не имеющих доступа по сети. + +Чтобы включить данный вид доступа, необходимо указать значение `false` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. + + ## Аутентификация с использованием стороннего IAM-провайдера {#iam} * **Access Token** — параметром для клиента (SDK или CLI) задается фиксированный токен, который передается в запросы. @@ -35,23 +50,21 @@ При использовании режимов, предусматривающих обращение клиента {{ 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 }}. +Логин пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом [Argon2]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Argon2){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Argon2){% endif %}. В режиме аутентификации по логину и паролю доступ к таблице имеет только администратор системы. - Имя пользователя может содержать только строчные буквы латинского алфавита и цифры. Требования к паролю не предъявляются, пароль может быть пустым. - -1. Сервис аутентификации передает аутентификационные данные в компонент аутентификации {{ ydb-short-name }}. -1. Компонент валидирует аутентификационные данные, при успешном сопоставлении создает токен и возвращает его сервису аутентификации. +В ответ на логин и пароль возвращается токен. Время жизни токена по умолчанию 12 часов. Для ротации токенов клиент, например, SDK, самостоятельно обращается к сервису аутентификации. Использование токена ускоряет процесс аутентификации и повышает безопасность. - Использование токена ускоряет процесс аутентификации и повышает безопасность. Время жизни токена по умолчанию 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. Клиент обращается к БД и передает логин и пароль пользователя сервису аутентификации {{ ydb-short-name }}. +1. Сервис аутентификации передает аутентификационные данные в компонент аутентификации {{ ydb-short-name }}. +1. Компонент проверяет аутентификационные данные, при успешном сопоставлении создает токен и возвращает его сервису аутентификации. 1. Сервис аутентификации возвращает токен клиенту. 1. Клиент обращается к БД, передавая в качестве аутентификационной информации токен. From 28d1eddc7aa4f86b2a4667fcd9b28e5d03c8baa7 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Tue, 17 Dec 2024 12:51:46 +0300 Subject: [PATCH 02/27] authorization --- ydb/docs/redirects.yaml | 8 +- .../core/devops/manual/initial-deployment.md | 2 +- .../integrations/visualization/grafana.md | 2 +- ydb/docs/ru/core/reference/kafka-api/auth.md | 6 +- .../ru/core/reference/kafka-api/read-write.md | 2 +- .../_includes/do-not-create-users-in-ldap.md | 8 ++ .../ru/core/security/access-management.md | 19 ---- ydb/docs/ru/core/security/authentication.md | 2 +- ydb/docs/ru/core/security/authorization.md | 87 ++++++++++++++++++ ydb/docs/ru/core/security/group.md | 39 ++++++++ ydb/docs/ru/core/security/index.md | 7 +- ydb/docs/ru/core/security/right.md | 92 +++++++++++++++++++ .../reference/yql-core/syntax/alter-user.md | 6 +- .../reference/yql-core/syntax/create-user.md | 7 +- .../reference/yql-core/syntax/drop-user.md | 3 +- 15 files changed, 253 insertions(+), 37 deletions(-) create mode 100644 ydb/docs/ru/core/security/_includes/do-not-create-users-in-ldap.md create mode 100644 ydb/docs/ru/core/security/authorization.md create mode 100644 ydb/docs/ru/core/security/group.md create mode 100644 ydb/docs/ru/core/security/right.md diff --git a/ydb/docs/redirects.yaml b/ydb/docs/redirects.yaml index edb585fc0c7b..533bd1d33029 100644 --- a/ydb/docs/redirects.yaml +++ b/ydb/docs/redirects.yaml @@ -37,8 +37,6 @@ common: to: /postgresql/import.md - from: /concepts/column-table.md to: /concepts/datamodel/table.md - - from: /concepts/auth.md - to: /concepts/security/authentication.md # DevOps-related redirects - from: /getting_started/kubernetes.md @@ -186,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/devops/manual/initial-deployment.md b/ydb/docs/ru/core/devops/manual/initial-deployment.md index 2a451e6ffb3a..9230caa6aca5 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}](../../security/group.md). Для выполнения первоначальной настройки учетных записей в созданном кластере {{ ydb-short-name }} выполните следующие операции: diff --git a/ydb/docs/ru/core/integrations/visualization/grafana.md b/ydb/docs/ru/core/integrations/visualization/grafana.md index 7dc3713e8010..55ab09b45d85 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/right.md) и доступом до баз данных и таблиц, к которым потребуется делать запросы. {% note warning %} 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/security/_includes/do-not-create-users-in-ldap.md b/ydb/docs/ru/core/security/_includes/do-not-create-users-in-ldap.md new file mode 100644 index 000000000000..fe0d865682bb --- /dev/null +++ b/ydb/docs/ru/core/security/_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 каталогом](../../concepts/auth.md#ldap-auth-provider). + +{% endnote %} diff --git a/ydb/docs/ru/core/security/access-management.md b/ydb/docs/ru/core/security/access-management.md index e33476500e50..0bcfd8950352 100644 --- a/ydb/docs/ru/core/security/access-management.md +++ b/ydb/docs/ru/core/security/access-management.md @@ -4,25 +4,6 @@ ## Встроенные группы {#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: diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index d186da3ba6c6..bae64e84fb0e 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -70,7 +70,7 @@ Для включения аутентификации по логину и паролю укажите значение `true` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. -Об управлении ролями и пользователями читайте в [{#T}](../security/access-management.md). +Об управлении ролями и пользователями читайте в [{#T}](../security/authorization.md). ## Взаимодействие с LDAP каталогом {#ldap-auth-provider} diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md new file mode 100644 index 000000000000..6948e002aa5b --- /dev/null +++ b/ydb/docs/ru/core/security/authorization.md @@ -0,0 +1,87 @@ +# Авторизация + +## Основные понятия + +Так, разграничение прав доступа пользователей основано на понятиях: + +* [Объект доступа](#object); +* [Субъект доступа](#subject); +* [Право](#right); +* [Владелец](#owner). + + +Независимо от метода аутентификации, авторизация всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информацию об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. Авторизация выполняется на каждое действие пользователя: его права не кешируются, так как могут быть отозваны или предоставлены в любой момент времени. + +## Объект доступа {#object} + +Объект доступа - узел дерева [директорий](../concepts/glossary.md#папка-folder), например: база данных, директории, таблицы, представления, топики. + +Директории организованы в иерархическую структуру объектов схемы в виде и вложенных объектов в них: баз данных, таблиц, представлений, топиков. Директории могут содержать поддиректории, и такая вложенность может быть произвольной глубины. + +## Субъект доступа {#subject} + +### SID + +Субъект доступа является [пользователем](#user) или [группой]{#group}. + +Субъект доступа идентифицируется SID (Security Identifier) в формате `"login@subsystem"`. Суффикс `subsystem` — это пространство имён, внутри которого гарантируется уникальность всех login. +Например, в случае интеграции с LDAP, имена пользователей будут `user1@ldap` и `user2@ldap`. +Если указан login без суффикса, то имеются ввиду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. + +SID является уникальным в рамках кластера. + +### Пользователь {#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) %} + +### Группа {#group} + +Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. +За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. + +Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. + +Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. +Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права +доступа на нужные объекты. + +Для создания, изменения и удаления групп есть команды: + +* [{#T}](../yql/reference/syntax/create-group.md). +* [{#T}](../yql/reference/syntax/alter-grop.md). +* [{#T}](../yql/reference/syntax/drop-group.md). + +Подробнее о группах пользователей: [{#T}](../../security/group.md). + +## Право {#right} + +Обладание правом в {{ ydb-short-name }} даёт возможность выполнять определённые операции в кластере или базе данных. +Права в {{ ydb-short-name }} выдаются на объекты доступа (узлы дерева директорий). +У каждого такого объекта есть список разрешений — ACL (Access Control List) — он хранит все предоставленные пользователям и группам права на объект. + +Для управления правами служат следующие YQL-команды: + +* [{#T}](../yql/reference/syntax/grant.md). +* [{#T}](../yql/reference/syntax/revoke.md). + +Пример использования команды [{#T}](../yql/reference/syntax/grant.md): + +```yql +GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser +``` + +Подробнее о правах и их полный перечень: [{#T}](../../security/right.md). + +## Владелец объекта {#owner} + +У каждого объекта доступа есть владелец, в том числе у кластера в целом и каждой базы данных. Владельцем объекта по умолчанию становится субъект доступа, создавший объект. + +Для владельца не проверяются ACL права на данный объект. Он имеет полный набор прав на объект. + +Сменить владельца можно с помощью CLI команды `ydb scheme permissions chown`. diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md new file mode 100644 index 000000000000..9a1874cf7750 --- /dev/null +++ b/ydb/docs/ru/core/security/group.md @@ -0,0 +1,39 @@ +# Группа пользователей + +## Основные понятия + +Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. +За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. + +Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. + +Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. +Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права +доступа на нужные объекты. + +Для создания, изменения и удаления групп есть команды: + +* [{#T}](../yql/reference/syntax/create-group.md). +* [{#T}](../yql/reference/syntax/alter-grop.md). +* [{#T}](../yql/reference/syntax/drop-group.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) diff --git a/ydb/docs/ru/core/security/index.md b/ydb/docs/ru/core/security/index.md index e7b05f76854f..e6e5f34a3876 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -4,7 +4,10 @@ Основные материалы: -- [{#T}](access-management.md) +- [{#T}](authentification.md) +- [{#T}](authorization.md) +- [{#T}](group.md) +- [{#T}](right.md) - [{#T}](audit-log.md) - Шифрование: @@ -15,4 +18,4 @@ - Концепции: - [{#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/right.md b/ydb/docs/ru/core/security/right.md new file mode 100644 index 000000000000..685f4c6ddca1 --- /dev/null +++ b/ydb/docs/ru/core/security/right.md @@ -0,0 +1,92 @@ +# Права + +## Основные понятия + +Обладание правом в {{ ydb-short-name }} даёт возможность выполнять определённые операции в кластере или базе данных. +Права в {{ ydb-short-name }} выдаются на объекты доступа. У каждого такого объекта есть список разрешений — ACL (Access Control List) — он хранит все предоставленные пользователям и группам права на объект. Объектом может быть директория, содержащая другие поддиректории или непосредственно объекты, не имеющие других вложенных объектов, — таблицы, топики, представления и не только. +В дальнейшем, если внутри директории появляются другие объекты, они по умолчанию наследуют все права, выданные на родительскую директорию. + +{% note info %} + +Права привязаны не пользователю, а к объекту доступа. + +{% endnote %} + +## Перечень прав + +В качестве имён прав доступа можно использовать имена {{ 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` + +{% note info %} + +Права `ydb.database.connect`, `ydb.granular.describe_schema`, `ydb.granular.select_row`, `ydb.granular.update_row` необходимо рассматривать как слои прав. +Например, для изменения строк необходимо не только право `ydb.granular.update_row`, но и все предыдущие права. + +{% endnote %} + +## Управление правами + +### Управление правами с помощью YQL + +Для управления правами служат следующие YQL-команды: + +* [{#T}](../yql/reference/syntax/grant.md). +* [{#T}](../yql/reference/syntax/revoke.md). + +Это команды принимают названия прав в обоих стилях: "{{ ydb-short-name }} право.2 и "Ключевое слово YQL". + +Пример использования c "Ключевое слово YQL": + +```yql +GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser +``` + +Пример использования c "{{ ydb-short-name }} право": + +```yql +GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser +``` + +### Управление правами с помощью CLI + +Для управления правами служат следующие CLI-команды: + +* [{#T}](). +* [{#T}](). + +Через CLI используется только стиль из столбца "{{ ydb-short-name }} право". +Например: + +```bash +ydb scheme permissions grant -p "ydb.granular.create_directory" `/Root/db1` testuser +``` 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..596803078577 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,7 @@ ALTER USER user_name [ WITH ] option [ ... ] ``` * `user_name` — имя пользователя. -* `option` — пароль пользователя: +* `option` — опция команды: - * `PASSWORD 'password'` — создает пользователя с паролем `password`. Опция `ENCRYPTED` всегда включена. - * `PASSWORD NULL` — создает пользователя с пустым паролем. + * `PASSWORD 'password'` — изменяет пароль на `password`. + * `PASSWORD NULL` — устанавливает пустой пароль. 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..d1550465efe1 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,9 @@ CREATE USER user_name [option] ``` * `user_name` — имя пользователя. Может содержать строчные буквы латинского алфавита и цифры. -* `option` — пароль пользователя: - * `PASSWORD 'password'` — создает пользователя с паролем `password`. Опция `ENCRYPTED` всегда включена. +* `option` — опция команды: + * `PASSWORD 'password'` — создает пользователя с паролем `password`. * `PASSWORD NULL` — создает пользователя с пустым паролем. + * Если опустить данную опцию — это эквивалентно `PASSWORD NULL`. + +{% include [!](../../../../security/_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..5b1315b079c7 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,5 @@ DROP USER [ IF EXISTS ] user_name [, ...] ``` * `IF EXISTS` — не выводить ошибку, если пользователь не существует. -* `user_name` — имя пользователя, которого нужно удалить. +* `user_name` — имя удаляемого пользователя. Поддерживается +возможность задать список пользователей через запятую: `DROP USER [IF EXISTS] user1,user2,user3`. From 15e664cb5c0a85cb3ad974ee699d233a3acb1517 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Thu, 19 Dec 2024 13:59:52 +0300 Subject: [PATCH 03/27] scheme permissions --- .../reference/ydb-cli/_includes/commands.md | 15 +- .../ydb-cli/commands/scheme-permissions.md | 176 ++++++++++++++++++ ydb/docs/ru/core/security/authorization.md | 3 +- ydb/docs/ru/core/security/right.md | 4 +- 4 files changed, 185 insertions(+), 13 deletions(-) create mode 100644 ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.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..9f9fee738e69 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,12 @@ [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 rmdir](../commands/dir.md#rmdir) | Удаление директории [scripting yql](../scripting-yql.md) | Выполнение YQL-скрипта table attribute add | Добавление атрибута для строкой или колоночной таблицы 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..e3e8fe19d139 --- /dev/null +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -0,0 +1,176 @@ +# Разрешения + +## Общий перечень команд + +Получить список доступных команд можно через интерактивную справку: +``` +{{ ydb-cli }} scheme permissions --help +``` + +``` +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 +``` + +## grant, revoke + +Команды `grant` и `revoke` позволяют установить и отозвать, соответственно, права доступа к объектам схемы для пользователя или группы пользователей. +По сути это аналоги соответствующих YQL-команд [GRANT](../../../yql/reference/syntax/grant.md) и [REVOKE](../../../yql/reference/syntax/revoke.md). + +Синтаксис команд YDB CLI выглядит следующим образом: + +```bash +{{ ydb-cli }} [connection options] scheme permissions grant [options...] +{{ ydb-cli }} [connection options] scheme permissions revoke [options...] +``` + +Параметры: +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать +`` - имя пользователя или группы, для которых изменяются права доступа + +Дополнительные параметры `[options...]`: +`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. +`{-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...] +``` + +Параметры: +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать + +Дополнительные параметры `[options...]`: +`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. + +Пример результата выполнения 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...] +``` + +Параметры: +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать + +Дополнительные параметры `[options...]`: +`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. + +Например, если выполнить команду: + +```bash +{{ ydb-cli }} scheme permissions clear '/Root/db1/MyApp' +``` + +над состоянием БД из прошлого примера [`list`](#list) и заново выполнить команду `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...] +``` + +Параметры: +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать +`` - имя пользователя или группы – нового владельца указанного объекта + +Дополнительные параметры `[options...]`: +`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. + +{% note info %} + +В текущей версии {{ ydb }} есть ограничение, что только непосредственно текущий владелец схемного объекта может сменить владельца +{% endnote %} diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index 6948e002aa5b..b2d1d6e9e1c7 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -9,7 +9,6 @@ * [Право](#right); * [Владелец](#owner). - Независимо от метода аутентификации, авторизация всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информацию об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. Авторизация выполняется на каждое действие пользователя: его права не кешируются, так как могут быть отозваны или предоставлены в любой момент времени. ## Объект доступа {#object} @@ -84,4 +83,4 @@ GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser Для владельца не проверяются ACL права на данный объект. Он имеет полный набор прав на объект. -Сменить владельца можно с помощью CLI команды `ydb scheme permissions chown`. +Сменить владельца можно с помощью CLI команды [`{{ ydb-cli }} scheme permissions chown`](../reference/ydb-cli/commands/scheme-permissions.md#chown). diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index 685f4c6ddca1..2659d60f5f15 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -81,8 +81,8 @@ GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser Для управления правами служат следующие CLI-команды: -* [{#T}](). -* [{#T}](). +* [{#T}]((../reference/ydb-cli/commands/scheme-permissions.md#grant)). +* [{#T}]((../reference/ydb-cli/commands/scheme-permissions.md#revoke)). Через CLI используется только стиль из столбца "{{ ydb-short-name }} право". Например: From 44c73d67cca9ee3a2322faab685bb1495c709ab9 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Thu, 19 Dec 2024 15:54:44 +0300 Subject: [PATCH 04/27] link renames --- ydb/docs/en/core/changelog-server.md | 2 +- ydb/docs/en/core/concepts/federated_query/ydb.md | 4 ++-- .../dev/example-app/go/_includes/run_custom.md | 2 +- .../dev/example-app/java/_includes/run_custom.md | 2 +- ydb/docs/en/core/dev/example-app/java/index.md | 2 +- .../dev/example-app/python/_includes/run_custom.md | 2 +- ydb/docs/en/core/dev/terraform.md | 6 +++--- .../en/core/integrations/ingestion/logstash.md | 2 +- .../en/core/integrations/migration/liquibase.md | 2 +- ydb/docs/en/core/reference/configuration/index.md | 8 ++++---- ydb/docs/en/core/reference/configuration/tls.md | 4 ++-- .../en/core/reference/ydb-cli/_includes/connect.md | 2 +- .../core/reference/ydb-cli/commands/config-info.md | 14 +++++++------- .../reference/ydb-cli/profile/_includes/create.md | 2 +- .../en/core/reference/ydb-dstool/global-options.md | 2 +- .../en/core/reference/ydb-sdk/_includes/auth.md | 4 ++-- ydb/docs/en/core/reference/ydb-sdk/topic.md | 4 ++-- .../en/core/security/encryption/data-in-transit.md | 4 ++-- ydb/docs/en/core/security/index.md | 3 +-- ydb/docs/ru/core/changelog-server.md | 2 +- ydb/docs/ru/core/concepts/federated_query/ydb.md | 4 ++-- .../dev/example-app/go/_includes/run_custom.md | 2 +- .../dev/example-app/java/_includes/run_custom.md | 4 ++-- ydb/docs/ru/core/dev/example-app/java/index.md | 2 +- .../dev/example-app/python/_includes/run_custom.md | 2 +- ydb/docs/ru/core/dev/terraform.md | 6 +++--- .../ru/core/integrations/ingestion/logstash.md | 2 +- .../ru/core/integrations/migration/liquibase.md | 2 +- .../ru/core/integrations/orchestration/airflow.md | 8 ++++---- ydb/docs/ru/core/reference/configuration/index.md | 8 ++++---- ydb/docs/ru/core/reference/configuration/tls.md | 2 +- .../ru/core/reference/ydb-cli/_includes/connect.md | 2 +- .../core/reference/ydb-cli/commands/config-info.md | 14 +++++++------- .../reference/ydb-cli/profile/_includes/create.md | 2 +- .../ru/core/reference/ydb-dstool/global-options.md | 2 +- .../ru/core/reference/ydb-sdk/_includes/auth.md | 4 ++-- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 4 ++-- .../_includes/do-not-create-users-in-ldap.md | 2 +- ydb/docs/ru/core/security/access-management.md | 2 +- .../ru/core/security/encryption/data-in-transit.md | 2 +- ydb/docs/ru/core/security/index.md | 1 - ydb/docs/ru/core/security/toc_p.yaml | 6 ++++-- 42 files changed, 78 insertions(+), 78 deletions(-) diff --git a/ydb/docs/en/core/changelog-server.md b/ydb/docs/en/core/changelog-server.md index 7d4bf8bdce67..1c0c3e1568d8 100644 --- a/ydb/docs/en/core/changelog-server.md +++ b/ydb/docs/en/core/changelog-server.md @@ -131,7 +131,7 @@ Release date: July 31, 2024. * The [Knn UDF](./yql/reference/udf/list/knn.md) function for precise nearest vector search has been implemented. * The gRPC Query service has been developed, enabling the execution of all types of queries (DML, DDL) and retrieval of unlimited amounts of data. -* [Integration with the LDAP protocol](./concepts/auth.md) has been implemented, allowing the retrieval of a list of groups from external LDAP directories. +* [Integration with the LDAP protocol](./security/authentication.md) has been implemented, allowing the retrieval of a list of groups from external LDAP directories. ### Embedded UI diff --git a/ydb/docs/en/core/concepts/federated_query/ydb.md b/ydb/docs/en/core/concepts/federated_query/ydb.md index 00065d6d5de6..852b8edc76c6 100644 --- a/ydb/docs/en/core/concepts/federated_query/ydb.md +++ b/ydb/docs/en/core/concepts/federated_query/ydb.md @@ -4,7 +4,7 @@ To connect to an external {{ ydb-short-name }} database from another {{ ydb-short-name }} database acting as the federated query engine, the following steps need to be performed on the latter: -1. Prepare authentication data to access the remote {{ ydb-short-name }} database. Currently, in federated queries to {{ ydb-short-name }}, the only available authentication method is [login and password](../../concepts/auth.md#static-credentials) (other methods are not supported). The password to the external database is stored as a [secret](../datamodel/secrets.md): +1. Prepare authentication data to access the remote {{ ydb-short-name }} database. Currently, in federated queries to {{ ydb-short-name }}, the only available authentication method is [login and password](../../security/authentication.md#static-credentials) (other methods are not supported). The password to the external database is stored as a [secret](../datamodel/secrets.md): ```yql CREATE OBJECT ydb_datasource_user_password (TYPE SECRET) WITH (value = ""); @@ -92,4 +92,4 @@ When working with tables located in the external {{ ydb-short-name }} database, |`Datetime`|`Datetime`| |`Timestamp`|`Timestamp`| |`Json`|`Json`| -|`JsonDocument`|`Json`| \ No newline at end of file +|`JsonDocument`|`Json`| diff --git a/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md b/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md index 8b07e52541fb..4df1cb8e2158 100644 --- a/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md +++ b/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md @@ -1,6 +1,6 @@ To run the example against any available {{ ydb-short-name }} database, the [endpoint](../../../../concepts/connect.md#endpoint) and the [database path](../../../../concepts/connect.md#database) need to be provide. -If authentication is enabled for the database, the [authentication mode](../../../../concepts/auth.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. +If authentication is enabled for the database, the [authentication mode](../../../../security/authentication.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. Run the command as follows: diff --git a/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md b/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md index eb4566b28de4..fb5fbb1c1e1c 100644 --- a/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md +++ b/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md @@ -1,6 +1,6 @@ To run the example against any available {{ ydb-short-name }} database, the [endpoint](../../../../concepts/connect.md#endpoint) and the [database path](../../../../concepts/connect.md#database) need to be provide. -If authentication is enabled for the database, the [authentication mode](../../../../concepts/auth.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. +If authentication is enabled for the database, the [authentication mode](../../../../security/authentication.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. Run the command as follows: diff --git a/ydb/docs/en/core/dev/example-app/java/index.md b/ydb/docs/en/core/dev/example-app/java/index.md index 9b9b1eb8832c..4798d767c353 100644 --- a/ydb/docs/en/core/dev/example-app/java/index.md +++ b/ydb/docs/en/core/dev/example-app/java/index.md @@ -29,7 +29,7 @@ Next, from the same working directory, run the following command to start the te Main driver initialization parameters * A connection string containing details about an [endpoint](../../../concepts/connect.md#endpoint) and [database](../../../concepts/connect.md#database). This is the only parameter that is required. -* [Authentication](../../../recipes/ydb-sdk/auth.md#auth-provider) provider. Unless explicitly specified, an [anonymous connection](../../../concepts/auth.md) is used. +* [Authentication](../../../recipes/ydb-sdk/auth.md#auth-provider) provider. Unless explicitly specified, an [anonymous connection](../../../security/authentication.md) is used. * [Session pool](../../../recipes/ydb-sdk/session-pool-limit.md) settings App code snippet for driver initialization: diff --git a/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md b/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md index 6ecc1b65f69d..63fd47dd9fb6 100644 --- a/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md +++ b/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md @@ -1,6 +1,6 @@ To run the example against any available {{ ydb-short-name }} database, the [endpoint](../../../../concepts/connect.md#endpoint) and the [database path](../../../../concepts/connect.md#database) need to be provide. -If authentication is enabled for the database, the [authentication mode](../../../../concepts/auth.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. +If authentication is enabled for the database, the [authentication mode](../../../../security/authentication.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. Run the command as follows: diff --git a/ydb/docs/en/core/dev/terraform.md b/ydb/docs/en/core/dev/terraform.md index c8f3a0941872..7afc30aed541 100644 --- a/ydb/docs/en/core/dev/terraform.md +++ b/ydb/docs/en/core/dev/terraform.md @@ -62,9 +62,9 @@ The provider will be installed in the Terraform plugins folder - `~/.terraform.d Where: -* `token` - specifies the access token to the database if authentication is used, for example, using a third-party [IAM](../concepts/auth.md#iam) provider. -* `user` - the username for accessing the database in case of using authentication by [username and password](../concepts/auth.md#static-credentials) -* `password` - the password for accessing the database in case of using authentication by [username and password](../concepts/auth.md#static-credentials) +* `token` - specifies the access token to the database if authentication is used, for example, using a third-party [IAM](../security/authentication.md#iam) provider. +* `user` - the username for accessing the database in case of using authentication by [username and password](../security/authentication.md#static-credentials) +* `password` - the password for accessing the database in case of using authentication by [username and password](../security/authentication.md#static-credentials) ## Using the Terraform provider {{ ydb-short-name }} {#work-with-tf} diff --git a/ydb/docs/en/core/integrations/ingestion/logstash.md b/ydb/docs/en/core/integrations/ingestion/logstash.md index c890c1a83bfe..7e64145d0ffe 100644 --- a/ydb/docs/en/core/integrations/ingestion/logstash.md +++ b/ydb/docs/en/core/integrations/ingestion/logstash.md @@ -34,7 +34,7 @@ The command will return a list of all installed plugins, which contain the plugi ## Configure {{ ydb-short-name }} connection -All plugins use the same set of parameters to configure the connection to {{ ydb-short-name }}. This set contains only one required parameter, `connection_string`. Other parameters are optional and allow configuring [an authentication mode](../../concepts/auth.md). An anonymous mode will be used if the configuration doesn't contain any of these parameters. +All plugins use the same set of parameters to configure the connection to {{ ydb-short-name }}. This set contains only one required parameter, `connection_string`. Other parameters are optional and allow configuring [an authentication mode](../../security/authentication.md). An anonymous mode will be used if the configuration doesn't contain any of these parameters. ```ruby # This example demonstrates configuration for ydb_storage plugin. diff --git a/ydb/docs/en/core/integrations/migration/liquibase.md b/ydb/docs/en/core/integrations/migration/liquibase.md index b9371968fd79..2e41f8b6f4b1 100644 --- a/ydb/docs/en/core/integrations/migration/liquibase.md +++ b/ydb/docs/en/core/integrations/migration/liquibase.md @@ -555,4 +555,4 @@ List of different authentication options through URL parameters: Also, if your cluster is configured using username and password, authentication is done through Liquibase parameters. -For more info about different authentication settings, refer to the [section](../../concepts/auth.md). +For more info about different authentication settings, refer to the [section](../../security/authentication.md). diff --git a/ydb/docs/en/core/reference/configuration/index.md b/ydb/docs/en/core/reference/configuration/index.md index 02db60423291..0e0a21fa10cc 100644 --- a/ydb/docs/en/core/reference/configuration/index.md +++ b/ydb/docs/en/core/reference/configuration/index.md @@ -209,7 +209,7 @@ Odd numbers must be used for `nto_select` because using even numbers does not im ## Authentication configuration {#auth} -The [authentication mode](../../concepts/auth.md) in the {{ ydb-short-name }} cluster is created in the `domains_config.security_config` section. +The [authentication mode](../../security/authentication.md) in the {{ ydb-short-name }} cluster is created in the `domains_config.security_config` section. ### Syntax @@ -607,7 +607,7 @@ For a configuration located in 3 availability zones, specify 3 rings. For a conf ### Configuring LDAP authentication {#ldap-auth-config} -One of the user authentication methods in {{ ydb-short-name }} is with an LDAP directory. More details about this type of authentication can be found in the section on [interacting with the LDAP directory](../../concepts/auth.md#ldap-auth-provider). To configure LDAP authentication, the `ldap_authentication` section must be defined. +One of the user authentication methods in {{ ydb-short-name }} is with an LDAP directory. More details about this type of authentication can be found in the section on [interacting with the LDAP directory](../../security/authentication.md#ldap-auth-provider). To configure LDAP authentication, the `ldap_authentication` section must be defined. Example of the `ldap_authentication` section: @@ -647,11 +647,11 @@ auth_config: | `bind_password` | The password for the service account used to search for the user entry. | | `search_filter` | A filter for searching the user entry in the LDAP directory. The filter string can include the sequence *$username*, which is replaced with the username requested for authentication in the database. | | `use_tls` | Configuration settings for the TLS connection between {{ ydb-short-name }} and the LDAP server. | -| `enable` | Determines if a TLS connection [using the `StartTls` request](../../concepts/auth.md#starttls) will be attempted. When set to `true`, the `ldaps` connection scheme should be disabled by setting `ldap_authentication.scheme` to `ldap`. | +| `enable` | Determines if a TLS connection [using the `StartTls` request](../../security/authentication.md#starttls) will be attempted. When set to `true`, the `ldaps` connection scheme should be disabled by setting `ldap_authentication.scheme` to `ldap`. | | `ca_cert_file` | The path to the certification authority's certificate file. | | `cert_require` | Specifies the certificate requirement level for the LDAP server.
Possible values:
  • `NEVER` - {{ ydb-short-name }} does not request a certificate or accepts any presented certificate.
  • `ALLOW` - {{ ydb-short-name }} requests a certificate from the LDAP server but will establish the TLS session even if the certificate is not trusted.
  • `TRY` - {{ ydb-short-name }} requires a certificate from the LDAP server and terminates the connection if it is not trusted.
  • `DEMAND`/`HARD` - These are equivalent to `TRY` and are the default setting, with the value set to `DEMAND`.
| | `ldap_authentication_domain` | An identifier appended to the username to distinguish LDAP directory users from those authenticated using other providers. The default value is `ldap`. | -| `scheme` | The connection scheme to the LDAP server.
Possible values:
  • `ldap` - Connects without encryption, sending passwords in plain text. This is the default value.
  • `ldaps` - Connects using TLS encryption from the first request. To use `ldaps`, disable the [`StartTls` request](../../concepts/auth.md#starttls) by setting `ldap_authentication.use_tls.enable` to `false`, and provide certificate details in `ldap_authentication.use_tls.ca_cert_file` and set the certificate requirement level in `ldap_authentication.use_tls.cert_require`.
  • Any other value defaults to `ldap`.
| +| `scheme` | The connection scheme to the LDAP server.
Possible values:
  • `ldap` - Connects without encryption, sending passwords in plain text. This is the default value.
  • `ldaps` - Connects using TLS encryption from the first request. To use `ldaps`, disable the [`StartTls` request](../../security/authentication.md#starttls) by setting `ldap_authentication.use_tls.enable` to `false`, and provide certificate details in `ldap_authentication.use_tls.ca_cert_file` and set the certificate requirement level in `ldap_authentication.use_tls.cert_require`.
  • Any other value defaults to `ldap`.
| | `requested_group_attribute` | The attribute used for reverse group membership. The default is `memberOf`. | | `extended_settings.enable_nested_groups_search` | A flag indicating whether to perform a request to retrieve the full hierarchy of groups to which the user's direct groups belong. | | `host` | The hostname of the LDAP server. This parameter is deprecated and should be replaced with the `hosts` parameter. | diff --git a/ydb/docs/en/core/reference/configuration/tls.md b/ydb/docs/en/core/reference/configuration/tls.md index b21cebf67aef..092c8187db38 100644 --- a/ydb/docs/en/core/reference/configuration/tls.md +++ b/ydb/docs/en/core/reference/configuration/tls.md @@ -77,7 +77,7 @@ monitoring_config: ### LDAP -{{ ydb-short-name }} supports [LDAP](../../concepts/auth.md#ldap) for user authentication. The LDAP protocol has two options for enabling TLS. +{{ ydb-short-name }} supports [LDAP](../../security/authentication.md#ldap) for user authentication. The LDAP protocol has two options for enabling TLS. Example of enabling TLS for LDAP via the `StartTls` protocol extension: @@ -123,4 +123,4 @@ tracing_config: ## Asynchronous replication -[Asynchronous replication](../../concepts/async-replication.md) synchronizes data between two {{ ydb-short-name }} databases, where one serves as a client to the other. Whether this communication uses TLS-encrypted connections is controlled by the `CONNECTION_STRING` setting of [CREATE ASYNC REPLICATION](../../yql/reference/syntax/create-async-replication.md) queries. Use the `grpcs://` protocol for TLS connections. No changes to the server-side configuration are required. \ No newline at end of file +[Asynchronous replication](../../concepts/async-replication.md) synchronizes data between two {{ ydb-short-name }} databases, where one serves as a client to the other. Whether this communication uses TLS-encrypted connections is controlled by the `CONNECTION_STRING` setting of [CREATE ASYNC REPLICATION](../../yql/reference/syntax/create-async-replication.md) queries. Use the `grpcs://` protocol for TLS connections. No changes to the server-side configuration are required. diff --git a/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md b/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md index 956214e509b1..adbcdf6e0204 100644 --- a/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md +++ b/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md @@ -4,7 +4,7 @@ Most of the {{ ydb-short-name }} CLI commands relate to operations on a {{ ydb-short-name }} database and require establishing a connection to it to be executed. -The {{ ydb-short-name }} CLI uses the following sources to determine the database to connect to and the [authentication mode](../../../concepts/auth.md) to use with it (listed in descending priority): +The {{ ydb-short-name }} CLI uses the following sources to determine the database to connect to and the [authentication mode](../../../security/authentication.md) to use with it (listed in descending priority): 1. The command line. 2. The profile set in the `--profile` command-line option. diff --git a/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md b/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md index 70244683a165..3961abb5b0a9 100644 --- a/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md +++ b/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md @@ -16,15 +16,15 @@ General format of the command: * [database](../../../concepts/connect.md#database) — Database path. * Authentication parameters: - * [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) — Root certificate. -* [iam-endpoint](../../../concepts/auth.md#iam) — URL of IAM service. +* [iam-endpoint](../../../security/authentication.md#iam) — URL of IAM service. ## Examples {#examples} diff --git a/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md b/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md index 40299c1e31ed..a9e6837dd0fc 100644 --- a/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md +++ b/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md @@ -216,7 +216,7 @@ Creating a new `mydb1` profile: Please enter your numeric choice: ``` - All the available authentication methods are described in [{#T}](../../../../concepts/auth.md). The set of methods and text of the hints may differ from those given in this example. + All the available authentication methods are described in [{#T}](../../../../security/authentication.md). The set of methods and text of the hints may differ from those given in this example. If the method you choose involves specifying an additional parameter, you'll be prompted to enter it. For example, if you select `4` (Use service account key file): diff --git a/ydb/docs/en/core/reference/ydb-dstool/global-options.md b/ydb/docs/en/core/reference/ydb-dstool/global-options.md index 24ed42455149..0ad8f36b9a30 100644 --- a/ydb/docs/en/core/reference/ydb-dstool/global-options.md +++ b/ydb/docs/en/core/reference/ydb-dstool/global-options.md @@ -12,7 +12,7 @@ All the {{ ydb-short-name }} DSTool utility subcommands share the same global op | `--grpc-port` | gRPC port used to invoke procedures. | | `--mon-port` | Port to view HTTP monitoring data in JSON format. | | `--mon-protocol` | If you fail to specify the cluster connection protocol explicitly in the endpoint, the protocol is taken from here. | -| `--token-file` | Path to the file with [Access Token](../../concepts/auth.md#iam). | +| `--token-file` | Path to the file with [Access Token](../../security/authentication.md#iam). | | `--ca-file` | Path to a root certificate PEM file used for TLS connections. | | `--http` | Use HTTP instead of gRPC to connect to the Blob Storage. | | `--http-timeout` | Timeout for I/O operations on the socket when running HTTP(S) queries. | diff --git a/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md b/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md index f2d48dcaf0b4..22f62946a557 100644 --- a/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md +++ b/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md @@ -1,10 +1,10 @@ # Authentication in the SDK -As we discussed in the [{{ ydb-short-name }} server connection](../../../concepts/connect.md) article, the client must add an [authentication token](../../../concepts/auth.md) to each request. The authentication token is checked by the server. If the authentication is successful, the request is authorized and executed. Otherwise, the `Unauthenticated` error returns. +As we discussed in the [{{ ydb-short-name }} server connection](../../../concepts/connect.md) article, the client must add an [authentication token](../../../security/authentication.md) to each request. The authentication token is checked by the server. If the authentication is successful, the request is authorized and executed. Otherwise, the `Unauthenticated` error returns. The {{ ydb-short-name }} SDK uses an object that is responsible for generating these tokens. SDK provides built-in methods for getting such an object: -1. The methods that pass parameters explicitly, with each method implementing a certain [authentication mode](../../../concepts/auth.md). +1. The methods that pass parameters explicitly, with each method implementing a certain [authentication mode](../../../security/authentication.md). 2. The method that determines the authentication mode and relevant parameters based on environmental variables. Usually, you create a token generation object before you initialize the {{ ydb-short-name }} driver, and you pass the object to the driver constructor as a parameter. The C++ and Go SDKs additionally let you work with multiple databases and token generation objects through a single driver. diff --git a/ydb/docs/en/core/reference/ydb-sdk/topic.md b/ydb/docs/en/core/reference/ydb-sdk/topic.md index 3d82e6e63e2d..a7ce39648ae3 100644 --- a/ydb/docs/en/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/en/core/reference/ydb-sdk/topic.md @@ -49,7 +49,7 @@ Before performing the examples, [create a topic](../ydb-cli/topic-create.md) and TDriver driver(driverConfig); ``` - This example uses authentication token from the `YDB_TOKEN` environment variable. For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../concepts/auth.md) pages. + This example uses authentication token from the `YDB_TOKEN` environment variable. For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../security/authentication.md) pages. App code snippet for creating a client: @@ -75,7 +75,7 @@ Before performing the examples, [create a topic](../ydb-cli/topic-create.md) and In this example `CloudAuthHelper.getAuthProviderFromEnviron()` helper method is used which retrieves auth token from environment variables. For example, `YDB_ACCESS_TOKEN_CREDENTIALS`. - For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../concepts/auth.md) pages. + For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../security/authentication.md) pages. Topic client ([source code](https://github.com/ydb-platform/ydb-java-sdk/blob/master/topic/src/main/java/tech/ydb/topic/TopicClient.java#L34)) uses {{ ydb-short-name }} transport and handles all topics topic operations, manages read and write sessions. diff --git a/ydb/docs/en/core/security/encryption/data-in-transit.md b/ydb/docs/en/core/security/encryption/data-in-transit.md index c46d2f694330..b559216ebce2 100644 --- a/ydb/docs/en/core/security/encryption/data-in-transit.md +++ b/ydb/docs/en/core/security/encryption/data-in-transit.md @@ -12,10 +12,10 @@ As {{ ydb-short-name }} is a distributed system typically running on a cluster, * {{ ydb-short-name }} as a client: - * [LDAP](../../concepts/auth.md#ldap) for user authentication. + * [LDAP](../authentication.md#ldap) for user authentication. * [Federated queries](../../concepts/federated_query/index.md), a feature that allows {{ ydb-short-name }} to query various external data sources. Some sources are queried directly from the `ydbd` process, while others are proxied via a separate connector process. * [Tracing](../../reference/observability/tracing/setup.md) data sent to an external collector via gRPC. * In [asynchronous replication](../../concepts/async-replication.md) between two {{ ydb-short-name }} databases, one serves as a client to the other. -By default, data in transit encryption is disabled and must be enabled separately for each protocol. They can either share the same set of TLS certificates or use dedicated ones. For instructions on how to enable TLS, refer to the [{#T}](../../reference/configuration/tls.md) section. \ No newline at end of file +By default, data in transit encryption is disabled and must be enabled separately for each protocol. They can either share the same set of TLS certificates or use dedicated ones. For instructions on how to enable TLS, refer to the [{#T}](../../reference/configuration/tls.md) section. diff --git a/ydb/docs/en/core/security/index.md b/ydb/docs/en/core/security/index.md index 59c2471f03e4..317ee156ecd6 100644 --- a/ydb/docs/en/core/security/index.md +++ b/ydb/docs/en/core/security/index.md @@ -14,5 +14,4 @@ Main resources: - [{#T}](short-access-control-notation.md) - Concepts: - - [{#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/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/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/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..f4079176a781 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/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/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/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/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/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-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/_includes/do-not-create-users-in-ldap.md b/ydb/docs/ru/core/security/_includes/do-not-create-users-in-ldap.md index fe0d865682bb..00ff8ff7ff57 100644 --- a/ydb/docs/ru/core/security/_includes/do-not-create-users-in-ldap.md +++ b/ydb/docs/ru/core/security/_includes/do-not-create-users-in-ldap.md @@ -3,6 +3,6 @@ Область действия команд `CREATE USER`, `ALTER USER` , `DROP USER` не распространяется на внешние каталоги пользователей. Учитывайте это, если к {{ ydb-short-name }} подключаются пользователи со сторонней аутентификацией (например LDAP). Например, команда `CREATE USER` не создаст пользователя в LDAP-каталоге. -Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP каталогом](../../concepts/auth.md#ldap-auth-provider). +Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP каталогом](../authentication.md#ldap-auth-provider). {% endnote %} diff --git a/ydb/docs/ru/core/security/access-management.md b/ydb/docs/ru/core/security/access-management.md index 0bcfd8950352..80d61fd3fed1 100644 --- a/ydb/docs/ru/core/security/access-management.md +++ b/ydb/docs/ru/core/security/access-management.md @@ -1,6 +1,6 @@ # Управление доступом -{{ ydb-short-name }} поддерживает аутентификацию по логину паролю. Подробнее читайте в разделе [{#T}](../concepts/auth.md). +{{ ydb-short-name }} поддерживает аутентификацию по логину паролю. Подробнее читайте в разделе [{#T}](authentication.md). ## Встроенные группы {#builtin} 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 e6e5f34a3876..f8b264281140 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -17,5 +17,4 @@ - [{#T}](short-access-control-notation.md) - Концепции: - - [{#T}](../concepts/auth.md) - [{#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: Шифрование From 8d6616c2d253bd8a65e6b3ff46c195a71371faeb Mon Sep 17 00:00:00 2001 From: azevaykin Date: Thu, 19 Dec 2024 16:12:33 +0300 Subject: [PATCH 05/27] spaces --- ydb/docs/ru/core/security/authentication.md | 5 +---- ydb/docs/ru/core/security/authorization.md | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index bae64e84fb0e..67e556a4c87f 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -1,7 +1,5 @@ # Аутентификация -В данном документе - После успешной установки сетевого соединения сервер принимает к обработке запросы от клиента, в которых передается аутентификационная информация. На ее основании сервер определяет учетную запись (аккаунт) клиента и проверяет доступ на выполнение запроса. {% note info %} @@ -19,11 +17,10 @@ ## Анонимная аутентификация -Позволяет подключаться к YDB без указания имени пользователя и пароля. Использовать данный вид доступа следует только в ознакомительных целях для внутренних локальных баз данных, не имеющих доступа по сети. +Позволяет подключаться к YDB без указания имени пользователя и пароля. Использовать данный вид доступа следует только в ознакомительных целях для внутренних локальных баз данных, не имеющих доступа по сети. Чтобы включить данный вид доступа, необходимо указать значение `false` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. - ## Аутентификация с использованием стороннего IAM-провайдера {#iam} * **Access Token** — параметром для клиента (SDK или CLI) задается фиксированный токен, который передается в запросы. diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index b2d1d6e9e1c7..ab9c52931927 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -44,7 +44,7 @@ SID является уникальным в рамках кластера. Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. -Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. +Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права @@ -61,7 +61,7 @@ SID является уникальным в рамках кластера. ## Право {#right} Обладание правом в {{ ydb-short-name }} даёт возможность выполнять определённые операции в кластере или базе данных. -Права в {{ ydb-short-name }} выдаются на объекты доступа (узлы дерева директорий). +Права в {{ ydb-short-name }} выдаются на объекты доступа (узлы дерева директорий). У каждого такого объекта есть список разрешений — ACL (Access Control List) — он хранит все предоставленные пользователям и группам права на объект. Для управления правами служат следующие YQL-команды: From 5819ec75e732ae2fbb28cf752d66515e5261ef5d Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 20 Dec 2024 10:16:26 +0300 Subject: [PATCH 06/27] link --- ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d1550465efe1..1061c8172b20 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 @@ -14,4 +14,4 @@ CREATE USER user_name [option] * `PASSWORD NULL` — создает пользователя с пустым паролем. * Если опустить данную опцию — это эквивалентно `PASSWORD NULL`. -{% include [!](../../../../security/_includes/do-not-create-users-in-ldap.md) %} +{% include [!](../../../../../security/_includes/do-not-create-users-in-ldap.md) %} From 08e7e5966e61515dc8e41b31df500384ce141460 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 20 Dec 2024 10:17:19 +0300 Subject: [PATCH 07/27] Undo EN links renames --- ydb/docs/en/core/changelog-server.md | 2 +- ydb/docs/en/core/concepts/federated_query/ydb.md | 4 ++-- .../dev/example-app/go/_includes/run_custom.md | 2 +- .../dev/example-app/java/_includes/run_custom.md | 2 +- ydb/docs/en/core/dev/example-app/java/index.md | 2 +- .../dev/example-app/python/_includes/run_custom.md | 2 +- ydb/docs/en/core/dev/terraform.md | 6 +++--- .../en/core/integrations/ingestion/logstash.md | 2 +- .../en/core/integrations/migration/liquibase.md | 2 +- ydb/docs/en/core/reference/configuration/index.md | 8 ++++---- ydb/docs/en/core/reference/configuration/tls.md | 4 ++-- .../en/core/reference/ydb-cli/_includes/connect.md | 2 +- .../core/reference/ydb-cli/commands/config-info.md | 14 +++++++------- .../reference/ydb-cli/profile/_includes/create.md | 2 +- .../en/core/reference/ydb-dstool/global-options.md | 2 +- .../en/core/reference/ydb-sdk/_includes/auth.md | 4 ++-- ydb/docs/en/core/reference/ydb-sdk/topic.md | 4 ++-- .../en/core/security/encryption/data-in-transit.md | 4 ++-- ydb/docs/en/core/security/index.md | 3 ++- 19 files changed, 36 insertions(+), 35 deletions(-) diff --git a/ydb/docs/en/core/changelog-server.md b/ydb/docs/en/core/changelog-server.md index 1c0c3e1568d8..7d4bf8bdce67 100644 --- a/ydb/docs/en/core/changelog-server.md +++ b/ydb/docs/en/core/changelog-server.md @@ -131,7 +131,7 @@ Release date: July 31, 2024. * The [Knn UDF](./yql/reference/udf/list/knn.md) function for precise nearest vector search has been implemented. * The gRPC Query service has been developed, enabling the execution of all types of queries (DML, DDL) and retrieval of unlimited amounts of data. -* [Integration with the LDAP protocol](./security/authentication.md) has been implemented, allowing the retrieval of a list of groups from external LDAP directories. +* [Integration with the LDAP protocol](./concepts/auth.md) has been implemented, allowing the retrieval of a list of groups from external LDAP directories. ### Embedded UI diff --git a/ydb/docs/en/core/concepts/federated_query/ydb.md b/ydb/docs/en/core/concepts/federated_query/ydb.md index 852b8edc76c6..00065d6d5de6 100644 --- a/ydb/docs/en/core/concepts/federated_query/ydb.md +++ b/ydb/docs/en/core/concepts/federated_query/ydb.md @@ -4,7 +4,7 @@ To connect to an external {{ ydb-short-name }} database from another {{ ydb-short-name }} database acting as the federated query engine, the following steps need to be performed on the latter: -1. Prepare authentication data to access the remote {{ ydb-short-name }} database. Currently, in federated queries to {{ ydb-short-name }}, the only available authentication method is [login and password](../../security/authentication.md#static-credentials) (other methods are not supported). The password to the external database is stored as a [secret](../datamodel/secrets.md): +1. Prepare authentication data to access the remote {{ ydb-short-name }} database. Currently, in federated queries to {{ ydb-short-name }}, the only available authentication method is [login and password](../../concepts/auth.md#static-credentials) (other methods are not supported). The password to the external database is stored as a [secret](../datamodel/secrets.md): ```yql CREATE OBJECT ydb_datasource_user_password (TYPE SECRET) WITH (value = ""); @@ -92,4 +92,4 @@ When working with tables located in the external {{ ydb-short-name }} database, |`Datetime`|`Datetime`| |`Timestamp`|`Timestamp`| |`Json`|`Json`| -|`JsonDocument`|`Json`| +|`JsonDocument`|`Json`| \ No newline at end of file diff --git a/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md b/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md index 4df1cb8e2158..8b07e52541fb 100644 --- a/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md +++ b/ydb/docs/en/core/dev/example-app/go/_includes/run_custom.md @@ -1,6 +1,6 @@ To run the example against any available {{ ydb-short-name }} database, the [endpoint](../../../../concepts/connect.md#endpoint) and the [database path](../../../../concepts/connect.md#database) need to be provide. -If authentication is enabled for the database, the [authentication mode](../../../../security/authentication.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. +If authentication is enabled for the database, the [authentication mode](../../../../concepts/auth.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. Run the command as follows: diff --git a/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md b/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md index fb5fbb1c1e1c..eb4566b28de4 100644 --- a/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md +++ b/ydb/docs/en/core/dev/example-app/java/_includes/run_custom.md @@ -1,6 +1,6 @@ To run the example against any available {{ ydb-short-name }} database, the [endpoint](../../../../concepts/connect.md#endpoint) and the [database path](../../../../concepts/connect.md#database) need to be provide. -If authentication is enabled for the database, the [authentication mode](../../../../security/authentication.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. +If authentication is enabled for the database, the [authentication mode](../../../../concepts/auth.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. Run the command as follows: diff --git a/ydb/docs/en/core/dev/example-app/java/index.md b/ydb/docs/en/core/dev/example-app/java/index.md index 4798d767c353..9b9b1eb8832c 100644 --- a/ydb/docs/en/core/dev/example-app/java/index.md +++ b/ydb/docs/en/core/dev/example-app/java/index.md @@ -29,7 +29,7 @@ Next, from the same working directory, run the following command to start the te Main driver initialization parameters * A connection string containing details about an [endpoint](../../../concepts/connect.md#endpoint) and [database](../../../concepts/connect.md#database). This is the only parameter that is required. -* [Authentication](../../../recipes/ydb-sdk/auth.md#auth-provider) provider. Unless explicitly specified, an [anonymous connection](../../../security/authentication.md) is used. +* [Authentication](../../../recipes/ydb-sdk/auth.md#auth-provider) provider. Unless explicitly specified, an [anonymous connection](../../../concepts/auth.md) is used. * [Session pool](../../../recipes/ydb-sdk/session-pool-limit.md) settings App code snippet for driver initialization: diff --git a/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md b/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md index 63fd47dd9fb6..6ecc1b65f69d 100644 --- a/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md +++ b/ydb/docs/en/core/dev/example-app/python/_includes/run_custom.md @@ -1,6 +1,6 @@ To run the example against any available {{ ydb-short-name }} database, the [endpoint](../../../../concepts/connect.md#endpoint) and the [database path](../../../../concepts/connect.md#database) need to be provide. -If authentication is enabled for the database, the [authentication mode](../../../../security/authentication.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. +If authentication is enabled for the database, the [authentication mode](../../../../concepts/auth.md) needs to be chosen and credentials (a token or a username/password pair) need to be provided. Run the command as follows: diff --git a/ydb/docs/en/core/dev/terraform.md b/ydb/docs/en/core/dev/terraform.md index 7afc30aed541..c8f3a0941872 100644 --- a/ydb/docs/en/core/dev/terraform.md +++ b/ydb/docs/en/core/dev/terraform.md @@ -62,9 +62,9 @@ The provider will be installed in the Terraform plugins folder - `~/.terraform.d Where: -* `token` - specifies the access token to the database if authentication is used, for example, using a third-party [IAM](../security/authentication.md#iam) provider. -* `user` - the username for accessing the database in case of using authentication by [username and password](../security/authentication.md#static-credentials) -* `password` - the password for accessing the database in case of using authentication by [username and password](../security/authentication.md#static-credentials) +* `token` - specifies the access token to the database if authentication is used, for example, using a third-party [IAM](../concepts/auth.md#iam) provider. +* `user` - the username for accessing the database in case of using authentication by [username and password](../concepts/auth.md#static-credentials) +* `password` - the password for accessing the database in case of using authentication by [username and password](../concepts/auth.md#static-credentials) ## Using the Terraform provider {{ ydb-short-name }} {#work-with-tf} diff --git a/ydb/docs/en/core/integrations/ingestion/logstash.md b/ydb/docs/en/core/integrations/ingestion/logstash.md index 7e64145d0ffe..c890c1a83bfe 100644 --- a/ydb/docs/en/core/integrations/ingestion/logstash.md +++ b/ydb/docs/en/core/integrations/ingestion/logstash.md @@ -34,7 +34,7 @@ The command will return a list of all installed plugins, which contain the plugi ## Configure {{ ydb-short-name }} connection -All plugins use the same set of parameters to configure the connection to {{ ydb-short-name }}. This set contains only one required parameter, `connection_string`. Other parameters are optional and allow configuring [an authentication mode](../../security/authentication.md). An anonymous mode will be used if the configuration doesn't contain any of these parameters. +All plugins use the same set of parameters to configure the connection to {{ ydb-short-name }}. This set contains only one required parameter, `connection_string`. Other parameters are optional and allow configuring [an authentication mode](../../concepts/auth.md). An anonymous mode will be used if the configuration doesn't contain any of these parameters. ```ruby # This example demonstrates configuration for ydb_storage plugin. diff --git a/ydb/docs/en/core/integrations/migration/liquibase.md b/ydb/docs/en/core/integrations/migration/liquibase.md index 2e41f8b6f4b1..b9371968fd79 100644 --- a/ydb/docs/en/core/integrations/migration/liquibase.md +++ b/ydb/docs/en/core/integrations/migration/liquibase.md @@ -555,4 +555,4 @@ List of different authentication options through URL parameters: Also, if your cluster is configured using username and password, authentication is done through Liquibase parameters. -For more info about different authentication settings, refer to the [section](../../security/authentication.md). +For more info about different authentication settings, refer to the [section](../../concepts/auth.md). diff --git a/ydb/docs/en/core/reference/configuration/index.md b/ydb/docs/en/core/reference/configuration/index.md index 0e0a21fa10cc..02db60423291 100644 --- a/ydb/docs/en/core/reference/configuration/index.md +++ b/ydb/docs/en/core/reference/configuration/index.md @@ -209,7 +209,7 @@ Odd numbers must be used for `nto_select` because using even numbers does not im ## Authentication configuration {#auth} -The [authentication mode](../../security/authentication.md) in the {{ ydb-short-name }} cluster is created in the `domains_config.security_config` section. +The [authentication mode](../../concepts/auth.md) in the {{ ydb-short-name }} cluster is created in the `domains_config.security_config` section. ### Syntax @@ -607,7 +607,7 @@ For a configuration located in 3 availability zones, specify 3 rings. For a conf ### Configuring LDAP authentication {#ldap-auth-config} -One of the user authentication methods in {{ ydb-short-name }} is with an LDAP directory. More details about this type of authentication can be found in the section on [interacting with the LDAP directory](../../security/authentication.md#ldap-auth-provider). To configure LDAP authentication, the `ldap_authentication` section must be defined. +One of the user authentication methods in {{ ydb-short-name }} is with an LDAP directory. More details about this type of authentication can be found in the section on [interacting with the LDAP directory](../../concepts/auth.md#ldap-auth-provider). To configure LDAP authentication, the `ldap_authentication` section must be defined. Example of the `ldap_authentication` section: @@ -647,11 +647,11 @@ auth_config: | `bind_password` | The password for the service account used to search for the user entry. | | `search_filter` | A filter for searching the user entry in the LDAP directory. The filter string can include the sequence *$username*, which is replaced with the username requested for authentication in the database. | | `use_tls` | Configuration settings for the TLS connection between {{ ydb-short-name }} and the LDAP server. | -| `enable` | Determines if a TLS connection [using the `StartTls` request](../../security/authentication.md#starttls) will be attempted. When set to `true`, the `ldaps` connection scheme should be disabled by setting `ldap_authentication.scheme` to `ldap`. | +| `enable` | Determines if a TLS connection [using the `StartTls` request](../../concepts/auth.md#starttls) will be attempted. When set to `true`, the `ldaps` connection scheme should be disabled by setting `ldap_authentication.scheme` to `ldap`. | | `ca_cert_file` | The path to the certification authority's certificate file. | | `cert_require` | Specifies the certificate requirement level for the LDAP server.
Possible values:
  • `NEVER` - {{ ydb-short-name }} does not request a certificate or accepts any presented certificate.
  • `ALLOW` - {{ ydb-short-name }} requests a certificate from the LDAP server but will establish the TLS session even if the certificate is not trusted.
  • `TRY` - {{ ydb-short-name }} requires a certificate from the LDAP server and terminates the connection if it is not trusted.
  • `DEMAND`/`HARD` - These are equivalent to `TRY` and are the default setting, with the value set to `DEMAND`.
| | `ldap_authentication_domain` | An identifier appended to the username to distinguish LDAP directory users from those authenticated using other providers. The default value is `ldap`. | -| `scheme` | The connection scheme to the LDAP server.
Possible values:
  • `ldap` - Connects without encryption, sending passwords in plain text. This is the default value.
  • `ldaps` - Connects using TLS encryption from the first request. To use `ldaps`, disable the [`StartTls` request](../../security/authentication.md#starttls) by setting `ldap_authentication.use_tls.enable` to `false`, and provide certificate details in `ldap_authentication.use_tls.ca_cert_file` and set the certificate requirement level in `ldap_authentication.use_tls.cert_require`.
  • Any other value defaults to `ldap`.
| +| `scheme` | The connection scheme to the LDAP server.
Possible values:
  • `ldap` - Connects without encryption, sending passwords in plain text. This is the default value.
  • `ldaps` - Connects using TLS encryption from the first request. To use `ldaps`, disable the [`StartTls` request](../../concepts/auth.md#starttls) by setting `ldap_authentication.use_tls.enable` to `false`, and provide certificate details in `ldap_authentication.use_tls.ca_cert_file` and set the certificate requirement level in `ldap_authentication.use_tls.cert_require`.
  • Any other value defaults to `ldap`.
| | `requested_group_attribute` | The attribute used for reverse group membership. The default is `memberOf`. | | `extended_settings.enable_nested_groups_search` | A flag indicating whether to perform a request to retrieve the full hierarchy of groups to which the user's direct groups belong. | | `host` | The hostname of the LDAP server. This parameter is deprecated and should be replaced with the `hosts` parameter. | diff --git a/ydb/docs/en/core/reference/configuration/tls.md b/ydb/docs/en/core/reference/configuration/tls.md index 092c8187db38..b21cebf67aef 100644 --- a/ydb/docs/en/core/reference/configuration/tls.md +++ b/ydb/docs/en/core/reference/configuration/tls.md @@ -77,7 +77,7 @@ monitoring_config: ### LDAP -{{ ydb-short-name }} supports [LDAP](../../security/authentication.md#ldap) for user authentication. The LDAP protocol has two options for enabling TLS. +{{ ydb-short-name }} supports [LDAP](../../concepts/auth.md#ldap) for user authentication. The LDAP protocol has two options for enabling TLS. Example of enabling TLS for LDAP via the `StartTls` protocol extension: @@ -123,4 +123,4 @@ tracing_config: ## Asynchronous replication -[Asynchronous replication](../../concepts/async-replication.md) synchronizes data between two {{ ydb-short-name }} databases, where one serves as a client to the other. Whether this communication uses TLS-encrypted connections is controlled by the `CONNECTION_STRING` setting of [CREATE ASYNC REPLICATION](../../yql/reference/syntax/create-async-replication.md) queries. Use the `grpcs://` protocol for TLS connections. No changes to the server-side configuration are required. +[Asynchronous replication](../../concepts/async-replication.md) synchronizes data between two {{ ydb-short-name }} databases, where one serves as a client to the other. Whether this communication uses TLS-encrypted connections is controlled by the `CONNECTION_STRING` setting of [CREATE ASYNC REPLICATION](../../yql/reference/syntax/create-async-replication.md) queries. Use the `grpcs://` protocol for TLS connections. No changes to the server-side configuration are required. \ No newline at end of file diff --git a/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md b/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md index adbcdf6e0204..956214e509b1 100644 --- a/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md +++ b/ydb/docs/en/core/reference/ydb-cli/_includes/connect.md @@ -4,7 +4,7 @@ Most of the {{ ydb-short-name }} CLI commands relate to operations on a {{ ydb-short-name }} database and require establishing a connection to it to be executed. -The {{ ydb-short-name }} CLI uses the following sources to determine the database to connect to and the [authentication mode](../../../security/authentication.md) to use with it (listed in descending priority): +The {{ ydb-short-name }} CLI uses the following sources to determine the database to connect to and the [authentication mode](../../../concepts/auth.md) to use with it (listed in descending priority): 1. The command line. 2. The profile set in the `--profile` command-line option. diff --git a/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md b/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md index 3961abb5b0a9..70244683a165 100644 --- a/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md +++ b/ydb/docs/en/core/reference/ydb-cli/commands/config-info.md @@ -16,15 +16,15 @@ General format of the command: * [database](../../../concepts/connect.md#database) — Database path. * Authentication parameters: - * [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) + * [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) * [ca-file](../../../concepts/connect.md#tls-cert) — Root certificate. -* [iam-endpoint](../../../security/authentication.md#iam) — URL of IAM service. +* [iam-endpoint](../../../concepts/auth.md#iam) — URL of IAM service. ## Examples {#examples} diff --git a/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md b/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md index a9e6837dd0fc..40299c1e31ed 100644 --- a/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md +++ b/ydb/docs/en/core/reference/ydb-cli/profile/_includes/create.md @@ -216,7 +216,7 @@ Creating a new `mydb1` profile: Please enter your numeric choice: ``` - All the available authentication methods are described in [{#T}](../../../../security/authentication.md). The set of methods and text of the hints may differ from those given in this example. + All the available authentication methods are described in [{#T}](../../../../concepts/auth.md). The set of methods and text of the hints may differ from those given in this example. If the method you choose involves specifying an additional parameter, you'll be prompted to enter it. For example, if you select `4` (Use service account key file): diff --git a/ydb/docs/en/core/reference/ydb-dstool/global-options.md b/ydb/docs/en/core/reference/ydb-dstool/global-options.md index 0ad8f36b9a30..24ed42455149 100644 --- a/ydb/docs/en/core/reference/ydb-dstool/global-options.md +++ b/ydb/docs/en/core/reference/ydb-dstool/global-options.md @@ -12,7 +12,7 @@ All the {{ ydb-short-name }} DSTool utility subcommands share the same global op | `--grpc-port` | gRPC port used to invoke procedures. | | `--mon-port` | Port to view HTTP monitoring data in JSON format. | | `--mon-protocol` | If you fail to specify the cluster connection protocol explicitly in the endpoint, the protocol is taken from here. | -| `--token-file` | Path to the file with [Access Token](../../security/authentication.md#iam). | +| `--token-file` | Path to the file with [Access Token](../../concepts/auth.md#iam). | | `--ca-file` | Path to a root certificate PEM file used for TLS connections. | | `--http` | Use HTTP instead of gRPC to connect to the Blob Storage. | | `--http-timeout` | Timeout for I/O operations on the socket when running HTTP(S) queries. | diff --git a/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md b/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md index 22f62946a557..f2d48dcaf0b4 100644 --- a/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md +++ b/ydb/docs/en/core/reference/ydb-sdk/_includes/auth.md @@ -1,10 +1,10 @@ # Authentication in the SDK -As we discussed in the [{{ ydb-short-name }} server connection](../../../concepts/connect.md) article, the client must add an [authentication token](../../../security/authentication.md) to each request. The authentication token is checked by the server. If the authentication is successful, the request is authorized and executed. Otherwise, the `Unauthenticated` error returns. +As we discussed in the [{{ ydb-short-name }} server connection](../../../concepts/connect.md) article, the client must add an [authentication token](../../../concepts/auth.md) to each request. The authentication token is checked by the server. If the authentication is successful, the request is authorized and executed. Otherwise, the `Unauthenticated` error returns. The {{ ydb-short-name }} SDK uses an object that is responsible for generating these tokens. SDK provides built-in methods for getting such an object: -1. The methods that pass parameters explicitly, with each method implementing a certain [authentication mode](../../../security/authentication.md). +1. The methods that pass parameters explicitly, with each method implementing a certain [authentication mode](../../../concepts/auth.md). 2. The method that determines the authentication mode and relevant parameters based on environmental variables. Usually, you create a token generation object before you initialize the {{ ydb-short-name }} driver, and you pass the object to the driver constructor as a parameter. The C++ and Go SDKs additionally let you work with multiple databases and token generation objects through a single driver. diff --git a/ydb/docs/en/core/reference/ydb-sdk/topic.md b/ydb/docs/en/core/reference/ydb-sdk/topic.md index a7ce39648ae3..3d82e6e63e2d 100644 --- a/ydb/docs/en/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/en/core/reference/ydb-sdk/topic.md @@ -49,7 +49,7 @@ Before performing the examples, [create a topic](../ydb-cli/topic-create.md) and TDriver driver(driverConfig); ``` - This example uses authentication token from the `YDB_TOKEN` environment variable. For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../security/authentication.md) pages. + This example uses authentication token from the `YDB_TOKEN` environment variable. For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../concepts/auth.md) pages. App code snippet for creating a client: @@ -75,7 +75,7 @@ Before performing the examples, [create a topic](../ydb-cli/topic-create.md) and In this example `CloudAuthHelper.getAuthProviderFromEnviron()` helper method is used which retrieves auth token from environment variables. For example, `YDB_ACCESS_TOKEN_CREDENTIALS`. - For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../security/authentication.md) pages. + For details see [Connecting to a database](../../concepts/connect.md) and [Authentication](../../concepts/auth.md) pages. Topic client ([source code](https://github.com/ydb-platform/ydb-java-sdk/blob/master/topic/src/main/java/tech/ydb/topic/TopicClient.java#L34)) uses {{ ydb-short-name }} transport and handles all topics topic operations, manages read and write sessions. diff --git a/ydb/docs/en/core/security/encryption/data-in-transit.md b/ydb/docs/en/core/security/encryption/data-in-transit.md index b559216ebce2..c46d2f694330 100644 --- a/ydb/docs/en/core/security/encryption/data-in-transit.md +++ b/ydb/docs/en/core/security/encryption/data-in-transit.md @@ -12,10 +12,10 @@ As {{ ydb-short-name }} is a distributed system typically running on a cluster, * {{ ydb-short-name }} as a client: - * [LDAP](../authentication.md#ldap) for user authentication. + * [LDAP](../../concepts/auth.md#ldap) for user authentication. * [Federated queries](../../concepts/federated_query/index.md), a feature that allows {{ ydb-short-name }} to query various external data sources. Some sources are queried directly from the `ydbd` process, while others are proxied via a separate connector process. * [Tracing](../../reference/observability/tracing/setup.md) data sent to an external collector via gRPC. * In [asynchronous replication](../../concepts/async-replication.md) between two {{ ydb-short-name }} databases, one serves as a client to the other. -By default, data in transit encryption is disabled and must be enabled separately for each protocol. They can either share the same set of TLS certificates or use dedicated ones. For instructions on how to enable TLS, refer to the [{#T}](../../reference/configuration/tls.md) section. +By default, data in transit encryption is disabled and must be enabled separately for each protocol. They can either share the same set of TLS certificates or use dedicated ones. For instructions on how to enable TLS, refer to the [{#T}](../../reference/configuration/tls.md) section. \ No newline at end of file diff --git a/ydb/docs/en/core/security/index.md b/ydb/docs/en/core/security/index.md index 317ee156ecd6..59c2471f03e4 100644 --- a/ydb/docs/en/core/security/index.md +++ b/ydb/docs/en/core/security/index.md @@ -14,4 +14,5 @@ Main resources: - [{#T}](short-access-control-notation.md) - Concepts: - - [{#T}](../concepts/connect.md) + - [{#T}](../concepts/auth.md) + - [{#T}](../concepts/connect.md) \ No newline at end of file From de838756fa61a93bbb768e0acda42e30b6325421 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 20 Dec 2024 10:38:58 +0300 Subject: [PATCH 08/27] Undo EN move --- ydb/docs/en/core/{security/authentication.md => concepts/auth.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ydb/docs/en/core/{security/authentication.md => concepts/auth.md} (100%) diff --git a/ydb/docs/en/core/security/authentication.md b/ydb/docs/en/core/concepts/auth.md similarity index 100% rename from ydb/docs/en/core/security/authentication.md rename to ydb/docs/en/core/concepts/auth.md From 93a65f1e49a4022d53b032478b7a66d2cd68e3f5 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 20 Dec 2024 10:48:44 +0300 Subject: [PATCH 09/27] move do-not-create-users-in-ldap.md --- .../{security => }/_includes/do-not-create-users-in-ldap.md | 0 ydb/docs/ru/core/security/authorization.md | 2 +- ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename ydb/docs/ru/core/{security => }/_includes/do-not-create-users-in-ldap.md (100%) diff --git a/ydb/docs/ru/core/security/_includes/do-not-create-users-in-ldap.md b/ydb/docs/ru/core/_includes/do-not-create-users-in-ldap.md similarity index 100% rename from ydb/docs/ru/core/security/_includes/do-not-create-users-in-ldap.md rename to ydb/docs/ru/core/_includes/do-not-create-users-in-ldap.md diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index ab9c52931927..2d9ce9c8e8c5 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -37,7 +37,7 @@ SID является уникальным в рамках кластера. * [{#T}](../yql/reference/syntax/alter-user.md). * [{#T}](../yql/reference/syntax/drop-user.md). -{% include [!](_includes/do-not-create-users-in-ldap.md) %} +{% include [!](../_includes/do-not-create-users-in-ldap.md) %} ### Группа {#group} 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 1061c8172b20..dc19a5c92d46 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 @@ -14,4 +14,4 @@ CREATE USER user_name [option] * `PASSWORD NULL` — создает пользователя с пустым паролем. * Если опустить данную опцию — это эквивалентно `PASSWORD NULL`. -{% include [!](../../../../../security/_includes/do-not-create-users-in-ldap.md) %} +{% include [!](../../../../_includes/do-not-create-users-in-ldap.md) %} From 8680428b617ca1cceda706841f5e0594128aab14 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 20 Dec 2024 12:28:21 +0300 Subject: [PATCH 10/27] Fixes --- .../ru/core/_includes/do-not-create-users-in-ldap.md | 2 +- ydb/docs/ru/core/concepts/toc_i.yaml | 2 -- ydb/docs/ru/core/devops/manual/initial-deployment.md | 2 +- .../reference/ydb-cli/commands/scheme-permissions.md | 10 ++++++---- ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml | 2 ++ ydb/docs/ru/core/security/authorization.md | 6 +++--- ydb/docs/ru/core/security/group.md | 4 ++-- ydb/docs/ru/core/security/index.md | 2 +- ydb/docs/ru/core/security/right.md | 7 +++++-- ydb/docs/ru/core/security/toc_p.yaml | 4 ++++ .../core/yql/reference/yql-core/syntax/create-user.md | 2 +- 11 files changed, 26 insertions(+), 17 deletions(-) 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 index 00ff8ff7ff57..a798ac2d73ee 100644 --- 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 @@ -3,6 +3,6 @@ Область действия команд `CREATE USER`, `ALTER USER` , `DROP USER` не распространяется на внешние каталоги пользователей. Учитывайте это, если к {{ ydb-short-name }} подключаются пользователи со сторонней аутентификацией (например LDAP). Например, команда `CREATE USER` не создаст пользователя в LDAP-каталоге. -Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP каталогом](../authentication.md#ldap-auth-provider). +Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP каталогом](../security/authentication.md#ldap-auth-provider). {% endnote %} 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/devops/manual/initial-deployment.md b/ydb/docs/ru/core/devops/manual/initial-deployment.md index 9230caa6aca5..fb4591ddd2bd 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` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [{#T}](../../security/group.md). +При первоначальной установке кластера {{ ydb-short-name }} автоматически создается учетная запись `root` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [Группы пользователей](../../security/group.md). Для выполнения первоначальной настройки учетных записей в созданном кластере {{ ydb-short-name }} выполните следующие операции: 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 index e3e8fe19d139..decd984e4ebf 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -3,11 +3,12 @@ ## Общий перечень команд Получить список доступных команд можно через интерактивную справку: -``` + +```bash {{ ydb-cli }} scheme permissions --help ``` -``` +```bash Usage: ydb [global options...] scheme permissions [options...] Description: Modify permissions @@ -60,7 +61,7 @@ permissions Modify permissions Значения всех параметров полностью идентично командам [`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"`. +Например, ранее пользователю 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 @@ -110,7 +111,7 @@ user1:ydb.generic.read * `Owner` - показывает владельца объекта схемы. * `Permissions` – отображает список прав, выданных непосредственно на схемный объект. -* `Effective permissions` – отображает список прав, фактически действующих на данный схемный объект с учетом правил наследования прав. +* `Effective permissions` – отображает список прав, фактически действующих на данный схемный объект с учетом правил наследования прав. Данный список также включает все права, отображаемые в секции Permissions. ## clear @@ -173,4 +174,5 @@ DATABASE-ADMINS:ydb.generic.manage {% note info %} В текущей версии {{ ydb }} есть ограничение, что только непосредственно текущий владелец схемного объекта может сменить владельца + {% endnote %} 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/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index 2d9ce9c8e8c5..177e8d4d9ffd 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -53,10 +53,10 @@ SID является уникальным в рамках кластера. Для создания, изменения и удаления групп есть команды: * [{#T}](../yql/reference/syntax/create-group.md). -* [{#T}](../yql/reference/syntax/alter-grop.md). +* [{#T}](../yql/reference/syntax/alter-group.md). * [{#T}](../yql/reference/syntax/drop-group.md). -Подробнее о группах пользователей: [{#T}](../../security/group.md). +Подробнее о группах пользователей: [{#T}](group.md). ## Право {#right} @@ -75,7 +75,7 @@ SID является уникальным в рамках кластера. GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser ``` -Подробнее о правах и их полный перечень: [{#T}](../../security/right.md). +Подробнее о правах и их полный перечень: [{#T}](right.md). ## Владелец объекта {#owner} diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md index 9a1874cf7750..cabc40c128ec 100644 --- a/ydb/docs/ru/core/security/group.md +++ b/ydb/docs/ru/core/security/group.md @@ -5,7 +5,7 @@ Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. -Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. +Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права @@ -14,7 +14,7 @@ Для создания, изменения и удаления групп есть команды: * [{#T}](../yql/reference/syntax/create-group.md). -* [{#T}](../yql/reference/syntax/alter-grop.md). +* [{#T}](../yql/reference/syntax/alter-group.md). * [{#T}](../yql/reference/syntax/drop-group.md). ## Встроенные группы {#builtin} diff --git a/ydb/docs/ru/core/security/index.md b/ydb/docs/ru/core/security/index.md index f8b264281140..912f89467d5c 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -4,7 +4,7 @@ Основные материалы: -- [{#T}](authentification.md) +- [{#T}](authentication.md) - [{#T}](authorization.md) - [{#T}](group.md) - [{#T}](right.md) diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index 2659d60f5f15..47fdc5a89a8b 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -81,8 +81,11 @@ GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser Для управления правами служат следующие CLI-команды: -* [{#T}]((../reference/ydb-cli/commands/scheme-permissions.md#grant)). -* [{#T}]((../reference/ydb-cli/commands/scheme-permissions.md#revoke)). +* [GRANT](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke). +* [REVOKE](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke). +* [{#T}](../reference/ydb-cli/commands/scheme-permissions.md#set). +* [{#T}](../reference/ydb-cli/commands/scheme-permissions.md#clear). +* [{#T}](../reference/ydb-cli/commands/scheme-permissions.md#list). Через CLI используется только стиль из столбца "{{ ydb-short-name }} право". Например: diff --git a/ydb/docs/ru/core/security/toc_p.yaml b/ydb/docs/ru/core/security/toc_p.yaml index adc1a854600c..e585c95170cf 100644 --- a/ydb/docs/ru/core/security/toc_p.yaml +++ b/ydb/docs/ru/core/security/toc_p.yaml @@ -3,6 +3,10 @@ items: href: authentication.md - name: Авторизация href: authorization.md +- name: Группы + href: group.md +- name: Права + href: right.md - name: Аудитный лог href: audit-log.md - name: Шифрование 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 dc19a5c92d46..52879bc175b3 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 @@ -14,4 +14,4 @@ CREATE USER user_name [option] * `PASSWORD NULL` — создает пользователя с пустым паролем. * Если опустить данную опцию — это эквивалентно `PASSWORD NULL`. -{% include [!](../../../../_includes/do-not-create-users-in-ldap.md) %} +{% include [!](../../../_includes/do-not-create-users-in-ldap.md) %} From 99102a15859fabb97bce7556e5c9c5b77c477625 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 20 Dec 2024 12:51:38 +0300 Subject: [PATCH 11/27] fixes 2 --- .../ydb-cli/commands/scheme-permissions.md | 6 +++ .../ru/core/security/access-management.md | 38 ---------------- ydb/docs/ru/core/security/authorization.md | 44 +++++++++++-------- ydb/docs/ru/core/security/group.md | 6 +-- ydb/docs/ru/core/security/right.md | 17 +++---- 5 files changed, 43 insertions(+), 68 deletions(-) delete mode 100644 ydb/docs/ru/core/security/access-management.md 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 index decd984e4ebf..a6d9dfc3e8c6 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -171,6 +171,12 @@ DATABASE-ADMINS:ydb.generic.manage Дополнительные параметры `[options...]`: `--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. +Пример команды chown: + +```bash +{{ ydb-cli }} scheme permissions chown '/Root/db1' testuser +``` + {% note info %} В текущей версии {{ ydb }} есть ограничение, что только непосредственно текущий владелец схемного объекта может сменить владельца 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 80d61fd3fed1..000000000000 --- a/ydb/docs/ru/core/security/access-management.md +++ /dev/null @@ -1,38 +0,0 @@ -# Управление доступом - -{{ ydb-short-name }} поддерживает аутентификацию по логину паролю. Подробнее читайте в разделе [{#T}](authentication.md). - -## Встроенные группы {#builtin} - -## Управление группами {#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/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index 177e8d4d9ffd..a7a98ddf1c95 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -2,18 +2,19 @@ ## Основные понятия -Так, разграничение прав доступа пользователей основано на понятиях: +Авторизация в {{ ydb-short-name }} основана на понятиях: -* [Объект доступа](#object); -* [Субъект доступа](#subject); -* [Право](#right); -* [Владелец](#owner). +* [Объект доступа](#object) +* [Субъект доступа](#subject) +* [Право](#right) +* [Владелец](#owner) -Независимо от метода аутентификации, авторизация всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информацию об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. Авторизация выполняется на каждое действие пользователя: его права не кешируются, так как могут быть отозваны или предоставлены в любой момент времени. +Независимо от метода аутентификации, авторизация всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информацию об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. +Авторизация выполняется на каждое действие пользователя: его права не кешируются, так как могут быть отозваны или предоставлены в любой момент времени. ## Объект доступа {#object} -Объект доступа - узел дерева [директорий](../concepts/glossary.md#папка-folder), например: база данных, директории, таблицы, представления, топики. +Объект доступа - узел дерева [директорий](../concepts/glossary.md#папка-folder) (схемный объект, объект схемы), например: база данных, директории, таблицы, представления, топики. Директории организованы в иерархическую структуру объектов схемы в виде и вложенных объектов в них: баз данных, таблиц, представлений, топиков. Директории могут содержать поддиректории, и такая вложенность может быть произвольной глубины. @@ -21,7 +22,7 @@ ### SID -Субъект доступа является [пользователем](#user) или [группой]{#group}. +Субъект доступа является [пользователем](#user) или [группой](#group). Субъект доступа идентифицируется SID (Security Identifier) в формате `"login@subsystem"`. Суффикс `subsystem` — это пространство имён, внутри которого гарантируется уникальность всех login. Например, в случае интеграции с LDAP, имена пользователей будут `user1@ldap` и `user2@ldap`. @@ -33,9 +34,9 @@ SID является уникальным в рамках кластера. Для создания, изменения и удаления пользователей {{ ydb-short-name }} есть команды: -* [{#T}](../yql/reference/syntax/create-user.md). -* [{#T}](../yql/reference/syntax/alter-user.md). -* [{#T}](../yql/reference/syntax/drop-user.md). +* [{#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) %} @@ -44,17 +45,16 @@ SID является уникальным в рамках кластера. Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. -Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. +Ограничений по количеству пользователей в группе нет. Группа доступа может быть пустой, когда в неё не входит ни один пользователь. Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. -Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права -доступа на нужные объекты. +Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права доступа на нужные объекты. Для создания, изменения и удаления групп есть команды: -* [{#T}](../yql/reference/syntax/create-group.md). -* [{#T}](../yql/reference/syntax/alter-group.md). -* [{#T}](../yql/reference/syntax/drop-group.md). +* [{#T}](../yql/reference/syntax/create-group.md) +* [{#T}](../yql/reference/syntax/alter-group.md) +* [{#T}](../yql/reference/syntax/drop-group.md) Подробнее о группах пользователей: [{#T}](group.md). @@ -69,7 +69,7 @@ SID является уникальным в рамках кластера. * [{#T}](../yql/reference/syntax/grant.md). * [{#T}](../yql/reference/syntax/revoke.md). -Пример использования команды [{#T}](../yql/reference/syntax/grant.md): +Пример использования команды GRANT: ```yql GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser @@ -83,4 +83,10 @@ GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser Для владельца не проверяются ACL права на данный объект. Он имеет полный набор прав на объект. -Сменить владельца можно с помощью CLI команды [`{{ ydb-cli }} scheme permissions chown`](../reference/ydb-cli/commands/scheme-permissions.md#chown). +Сменить владельца можно с помощью CLI команды [CHOWN](../reference/ydb-cli/commands/scheme-permissions.md#chown). + +Пример команды chown: + +```bash +{{ ydb-cli }} scheme permissions chown '/Root/db1' testuser +``` diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md index cabc40c128ec..604ba96a7192 100644 --- a/ydb/docs/ru/core/security/group.md +++ b/ydb/docs/ru/core/security/group.md @@ -13,9 +13,9 @@ Для создания, изменения и удаления групп есть команды: -* [{#T}](../yql/reference/syntax/create-group.md). -* [{#T}](../yql/reference/syntax/alter-group.md). -* [{#T}](../yql/reference/syntax/drop-group.md). +* [{#T}](../yql/reference/syntax/create-group.md) +* [{#T}](../yql/reference/syntax/alter-group.md) +* [{#T}](../yql/reference/syntax/drop-group.md) ## Встроенные группы {#builtin} diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index 47fdc5a89a8b..eb94a6a5e115 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -81,15 +81,16 @@ GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser Для управления правами служат следующие CLI-команды: -* [GRANT](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke). -* [REVOKE](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke). -* [{#T}](../reference/ydb-cli/commands/scheme-permissions.md#set). -* [{#T}](../reference/ydb-cli/commands/scheme-permissions.md#clear). -* [{#T}](../reference/ydb-cli/commands/scheme-permissions.md#list). - -Через CLI используется только стиль из столбца "{{ ydb-short-name }} право". +* [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) +* [list](../reference/ydb-cli/commands/scheme-permissions.md#list) + +В CLI используется только стиль из столбца "{{ ydb-short-name }} право". Например: ```bash -ydb scheme permissions grant -p "ydb.granular.create_directory" `/Root/db1` testuser +{{ ydb-short-name }} scheme permissions grant -p "ydb.granular.create_directory" `/Root/db1` testuser ``` From ad8c179f3a072edf0026d341d9825fe7cf8654be Mon Sep 17 00:00:00 2001 From: azevaykin <145343289+azevaykin@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:20:18 +0300 Subject: [PATCH 12/27] Apply suggestions from code review Co-authored-by: anton-bobkov --- ydb/docs/en/core/concepts/auth.md | 2 +- ydb/docs/ru/core/dev/terraform.md | 4 ++-- .../ydb-cli/commands/scheme-permissions.md | 18 +++++++++--------- ydb/docs/ru/core/security/authentication.md | 2 +- ydb/docs/ru/core/security/authorization.md | 2 +- ydb/docs/ru/core/security/group.md | 16 ++++++++-------- ydb/docs/ru/core/security/right.md | 8 ++++---- .../reference/yql-core/syntax/create-user.md | 2 +- .../yql/reference/yql-core/syntax/drop-user.md | 3 +-- 9 files changed, 28 insertions(+), 29 deletions(-) diff --git a/ydb/docs/en/core/concepts/auth.md b/ydb/docs/en/core/concepts/auth.md index 3b8f3638d52c..08c3bb1dd265 100644 --- a/ydb/docs/en/core/concepts/auth.md +++ b/ydb/docs/en/core/concepts/auth.md @@ -10,7 +10,7 @@ The following authentication modes are supported: ## Anonymous authentication -Anonymous authentication allows you to connect to YDB without specifying a username and password. This type of access should be used only for informational purposes for internal local databases that do not have access over the network. +Anonymous authentication allows you to connect to YDB without specifying a username and password. This type of access should be used only for informational purposes for internal 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). diff --git a/ydb/docs/ru/core/dev/terraform.md b/ydb/docs/ru/core/dev/terraform.md index f4079176a781..d73259690bcc 100644 --- a/ydb/docs/ru/core/dev/terraform.md +++ b/ydb/docs/ru/core/dev/terraform.md @@ -62,8 +62,8 @@ Где: * `token` - указывается токен доступа к БД, если используется аутентификация, например, с использованием стороннего [IAM](../security/authentication.md#iam) провайдера. -* `user` - имя пользователя для доступа к базе данных в случае использования аутентификации по [логину и паролю](../security/authentication.md#static-credentials) -* `password` - пароль для доступа к базе данных в случае использования аутентификации по [логину и паролю](../security/authentication.md#static-credentials) +* `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/reference/ydb-cli/commands/scheme-permissions.md b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md index a6d9dfc3e8c6..e87ea24c7435 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -36,11 +36,11 @@ permissions Modify permissions ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать -`` - имя пользователя или группы, для которых изменяются права доступа +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать; +`` - имя пользователя или группы, для которых изменяются права доступа. Дополнительные параметры `[options...]`: -`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. +`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем; `{-p|--permission} NAME` – список прав, которые необходимо предоставить(grant) или отозвать(revoke) у пользователя. Каждое право нужно передавать отдельным параметром, например: @@ -59,7 +59,7 @@ permissions Modify permissions {{ ydb-cli }} [connection options] scheme permissions set [options...] ``` -Значения всех параметров полностью идентично командам [`grant`, `revoke`](#grant-revoke). Но ключевое отличие команды `set` от `grant` и `revoke` заключается в установке на указанный объект ровно тех прав доступа, что перечислены в параметрах `-p (--permission)`. Другие права для указанного пользователя или группы будут отозваны. +Значения всех параметров полностью идентичны командам [`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`: @@ -79,7 +79,7 @@ permissions Modify permissions ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. Дополнительные параметры `[options...]`: `--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. @@ -123,7 +123,7 @@ user1:ydb.generic.read ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. Дополнительные параметры `[options...]`: `--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. @@ -165,8 +165,8 @@ DATABASE-ADMINS:ydb.generic.manage ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать -`` - имя пользователя или группы – нового владельца указанного объекта +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать; +`` - имя пользователя или группы – нового владельца указанного объекта. Дополнительные параметры `[options...]`: `--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. @@ -179,6 +179,6 @@ DATABASE-ADMINS:ydb.generic.manage {% note info %} -В текущей версии {{ ydb }} есть ограничение, что только непосредственно текущий владелец схемного объекта может сменить владельца +В текущей версии {{ ydb }} есть ограничение, что только непосредственно текущий владелец схемного объекта может сменить владельца. {% endnote %} diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index 67e556a4c87f..e9e48b24a84d 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -10,7 +10,7 @@ Поддерживаются следующие режимы аутентификации: -* Анонимный аутентификация — включена по умолчанию и доступна сразу после [установки кластера](../devops/index.md). +* Анонимная аутентификация — включена по умолчанию и доступна сразу после [установки кластера](../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 %}. * Аутентификация по [логину и паролю](#static-credentials). * Аутентификация с использованием [LDAP каталога](#ldap-auth-provider). diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index a7a98ddf1c95..cf4f12e74a14 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -16,7 +16,7 @@ Объект доступа - узел дерева [директорий](../concepts/glossary.md#папка-folder) (схемный объект, объект схемы), например: база данных, директории, таблицы, представления, топики. -Директории организованы в иерархическую структуру объектов схемы в виде и вложенных объектов в них: баз данных, таблиц, представлений, топиков. Директории могут содержать поддиректории, и такая вложенность может быть произвольной глубины. +Директории организованы в иерархическую структуру объектов схемы и вложенных в них объектов: баз данных, таблиц, представлений, топиков. Директории могут содержать поддиректории, и такая вложенность может быть произвольной глубины. ## Субъект доступа {#subject} diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md index 604ba96a7192..085ff5600f26 100644 --- a/ydb/docs/ru/core/security/group.md +++ b/ydb/docs/ru/core/security/group.md @@ -23,14 +23,14 @@ Группа | Описание --- | --- -`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`). +`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`. diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index eb94a6a5e115..707e41b74179 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -27,8 +27,8 @@ `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_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) на объект доступа, просмотра описания объектов доступа (директории, таблицы, топики) @@ -65,13 +65,13 @@ Это команды принимают названия прав в обоих стилях: "{{ ydb-short-name }} право.2 и "Ключевое слово YQL". -Пример использования c "Ключевое слово YQL": +Пример использования c ключевым словом YQL: ```yql GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser ``` -Пример использования c "{{ ydb-short-name }} право": +Пример использования c именем {{ ydb-short-name }} права: ```yql GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser 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 52879bc175b3..a3c2f123ef12 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 @@ -12,6 +12,6 @@ CREATE USER user_name [option] * `option` — опция команды: * `PASSWORD 'password'` — создает пользователя с паролем `password`. * `PASSWORD NULL` — создает пользователя с пустым паролем. - * Если опустить данную опцию — это эквивалентно `PASSWORD NULL`. + Значение по умолчанию: `PASSWORD NULL`. {% 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 5b1315b079c7..1d167c0ec6ac 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,5 +9,4 @@ DROP USER [ IF EXISTS ] user_name [, ...] ``` * `IF EXISTS` — не выводить ошибку, если пользователь не существует. -* `user_name` — имя удаляемого пользователя. Поддерживается -возможность задать список пользователей через запятую: `DROP USER [IF EXISTS] user1,user2,user3`. +* `user_name` — имя удаляемого пользователя. Поддерживается возможность задать список пользователей через запятую: `DROP USER [IF EXISTS] user1,user2,user3`. From 02d342dc9b36e98e60570a372ec67dc0682c3c84 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Mon, 23 Dec 2024 15:25:29 +0300 Subject: [PATCH 13/27] fix --- ydb/docs/ru/core/security/right.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index 707e41b74179..123337681519 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -63,7 +63,7 @@ * [{#T}](../yql/reference/syntax/grant.md). * [{#T}](../yql/reference/syntax/revoke.md). -Это команды принимают названия прав в обоих стилях: "{{ ydb-short-name }} право.2 и "Ключевое слово YQL". +В качестве имен прав доступа в этих командах можно использовать специфичные для {{ ydb-short-name }} права или соответствующие им ключевые слова. Пример использования c ключевым словом YQL: From a7a233e2afb9181fa6eed2e9f5b0ac684d0453c4 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Tue, 24 Dec 2024 14:35:37 +0300 Subject: [PATCH 14/27] Review fixes --- ydb/docs/ru/core/security/authentication.md | 12 ++++++++++-- ydb/docs/ru/core/security/authorization.md | 6 ++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index e9e48b24a84d..6f43fa93c096 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -17,9 +17,17 @@ ## Анонимная аутентификация -Позволяет подключаться к YDB без указания имени пользователя и пароля. Использовать данный вид доступа следует только в ознакомительных целях для внутренних локальных баз данных, не имеющих доступа по сети. +В данном режиме допускается логин без указания пользователя или токена. В этом случае также не производится [авторизация](authorization.md) (проверка прав). -Чтобы включить данный вид доступа, необходимо указать значение `false` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. +Но если будет указан пользователь или токен, то будет работать соответствующий режим аутентификации с последующей авторизацией. + +{% note warn %} + +Использовать анонимную аутентификацию следует только в ознакомительных целях для внутренних локальных баз данных, не имеющих доступа по сети. + +{% endnote %} + +Чтобы включить анонимную аутентификацию, необходимо указать значение `false` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. ## Аутентификация с использованием стороннего IAM-провайдера {#iam} diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index cf4f12e74a14..ce10e908a70a 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -24,12 +24,12 @@ Субъект доступа является [пользователем](#user) или [группой](#group). +{{ ydb-short-name }} позволяет работать с пользователями из разных каталогов и систем, и они отличаются с использованием суффикса. + Субъект доступа идентифицируется SID (Security Identifier) в формате `"login@subsystem"`. Суффикс `subsystem` — это пространство имён, внутри которого гарантируется уникальность всех login. Например, в случае интеграции с LDAP, имена пользователей будут `user1@ldap` и `user2@ldap`. Если указан login без суффикса, то имеются ввиду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. -SID является уникальным в рамках кластера. - ### Пользователь {#user} Для создания, изменения и удаления пользователей {{ ydb-short-name }} есть команды: @@ -40,6 +40,8 @@ SID является уникальным в рамках кластера. {% include [!](../_includes/do-not-create-users-in-ldap.md) %} +Отдельно выделяется пользователь `root`. Он создается при [первоначальной установке кластера](../devops/manual/initial-deployment#initialize-cluster), в ходе которой ему нужно сразу [установить пароль](../devops/manual/initial-deployment#security-setup). + ### Группа {#group} Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. From bcae02b1fbfa3e21e62a285a01590cddab90c6d9 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Tue, 24 Dec 2024 15:28:55 +0300 Subject: [PATCH 15/27] review fixes --- .../reference/ydb-cli/_includes/commands.md | 2 + .../ydb-cli/commands/scheme-permissions.md | 44 +++++++++++++++++++ ydb/docs/ru/core/security/authentication.md | 2 +- ydb/docs/ru/core/security/authorization.md | 4 +- ydb/docs/ru/core/security/right.md | 2 +- 5 files changed, 50 insertions(+), 4 deletions(-) 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 9f9fee738e69..24d0147b30c2 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/_includes/commands.md +++ b/ydb/docs/ru/core/reference/ydb-cli/_includes/commands.md @@ -49,6 +49,8 @@ [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/commands/scheme-permissions.md b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md index e87ea24c7435..e2ce8f2fca25 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -182,3 +182,47 @@ DATABASE-ADMINS:ydb.generic.manage В текущей версии {{ ydb }} есть ограничение, что только непосредственно текущий владелец схемного объекта может сменить владельца. {% endnote %} + +## clear-inheritance + +Команда `clear-inheritance` запретить наследование разрешений для схемного объекта. + +Синтаксис команды: + +```bash +{{ ydb-cli }} [connection options] scheme permissions clear-inheritance [options...] +``` + +Параметры: +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. + +Дополнительные параметры `[options...]`: +`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. + +Пример команды 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...] +``` + +Параметры: +`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. + +Дополнительные параметры `[options...]`: +`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. + +Пример команды set-inheritance: + +```bash +{{ ydb-cli }} scheme permissions set-inheritance '/Root/db1' +``` diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index 6f43fa93c096..d4fe34065654 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -21,7 +21,7 @@ Но если будет указан пользователь или токен, то будет работать соответствующий режим аутентификации с последующей авторизацией. -{% note warn %} +{% note warning %} Использовать анонимную аутентификацию следует только в ознакомительных целях для внутренних локальных баз данных, не имеющих доступа по сети. diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index ce10e908a70a..db0a6951397e 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -26,8 +26,8 @@ {{ ydb-short-name }} позволяет работать с пользователями из разных каталогов и систем, и они отличаются с использованием суффикса. -Субъект доступа идентифицируется SID (Security Identifier) в формате `"login@subsystem"`. Суффикс `subsystem` — это пространство имён, внутри которого гарантируется уникальность всех login. -Например, в случае интеграции с LDAP, имена пользователей будут `user1@ldap` и `user2@ldap`. +Субъект доступа идентифицируется строкой вида `[@]`. Такая строка называется SID (Security Identifier). SID'ы записываются в правилах ACL на объектах схемы. +Суффикс `@` идентифицирует "источник пользователя" или "auth-домен", внутри которых гарантируется уникальность всех `login`. Например, в случае интеграции с LDAP, имена пользователей будут `user1@ldap` и `user2@ldap`. Если указан login без суффикса, то имеются ввиду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. ### Пользователь {#user} diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index 123337681519..df9cf6f8dffe 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -38,7 +38,7 @@ Права, основанные на других правах `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.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` From 2c888d443a1a187a746638b5c946d00fa368ca63 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Wed, 25 Dec 2024 13:41:44 +0300 Subject: [PATCH 16/27] group fix --- ydb/docs/ru/core/security/group.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md index 085ff5600f26..915bbc4b5cdd 100644 --- a/ydb/docs/ru/core/security/group.md +++ b/ydb/docs/ru/core/security/group.md @@ -2,10 +2,11 @@ ## Основные понятия -Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. +Группа пользователей - именованное множество пользователей или групп, предназначенное для упрощения контроля доступа. За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. +В группу можно включать не только пользователей, но и другие группы -Ограничений по количеству пользователей в группе нет. Группа доступа может быть «пустой», это когда в неё не входит ни один пользователь. +Ограничений на количество членов группы нет. Группа доступа может быть «пустой», это когда в неё никто входит. Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права From 1a6aa7e3dbb997f06dd59b0ed7547f5d296a5e48 Mon Sep 17 00:00:00 2001 From: azevaykin <145343289+azevaykin@users.noreply.github.com> Date: Fri, 27 Dec 2024 13:47:38 +0300 Subject: [PATCH 17/27] Apply suggestions from "blinkov" code review Co-authored-by: Ivan Blinkov --- ydb/docs/en/core/concepts/auth.md | 8 +-- .../_includes/do-not-create-users-in-ldap.md | 6 +- .../core/devops/manual/initial-deployment.md | 2 +- .../ydb-cli/commands/scheme-permissions.md | 68 +++++++++---------- ydb/docs/ru/core/security/authentication.md | 16 ++--- ydb/docs/ru/core/security/authorization.md | 38 ++++++----- ydb/docs/ru/core/security/group.md | 2 + .../reference/yql-core/syntax/drop-user.md | 2 +- 8 files changed, 73 insertions(+), 69 deletions(-) diff --git a/ydb/docs/en/core/concepts/auth.md b/ydb/docs/en/core/concepts/auth.md index 08c3bb1dd265..a1ec40634fc5 100644 --- a/ydb/docs/en/core/concepts/auth.md +++ b/ydb/docs/en/core/concepts/auth.md @@ -10,7 +10,7 @@ The following authentication modes are supported: ## Anonymous authentication -Anonymous authentication allows you to connect to YDB without specifying a username and password. This type of access should be used only for informational purposes for internal local databases that cannot be accessed over the network. +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). @@ -44,11 +44,11 @@ When using modes in which the {{ ydb-short-name }} client accesses the IAM syste ## Authenticating by username and password {#static-credentials} This type of access implies that each database user has a username and password. -You can only use lower case Latin letters and digits in usernames. No restrictions apply to passwords (empty passwords can be used). +Only digits and lowercase Latin letters can be used in usernames. Passwords are not restricted; even empty passwords can be used. -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. +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. -A token is returned in response to the username and password. Tokens have a default lifetime of 12 hours. To rotate tokens, the client, for example, the SDK, independently accesses the authentication service. Tokens accelerate authentication and strengthen security. +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: 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 index a798ac2d73ee..119b6a658d2a 100644 --- 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 @@ -1,8 +1,8 @@ {% note info %} -Область действия команд `CREATE USER`, `ALTER USER` , `DROP USER` не распространяется на внешние каталоги пользователей. -Учитывайте это, если к {{ ydb-short-name }} подключаются пользователи со сторонней аутентификацией (например LDAP). +Область действия команд `CREATE USER`, `ALTER USER`, `DROP USER` не распространяется на внешние каталоги пользователей. +Учитывайте это, если к {{ ydb-short-name }} подключаются пользователи со сторонней аутентификацией (например, LDAP). Например, команда `CREATE USER` не создаст пользователя в LDAP-каталоге. -Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP каталогом](../security/authentication.md#ldap-auth-provider). +Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP-каталогом](../security/authentication.md#ldap-auth-provider). {% endnote %} diff --git a/ydb/docs/ru/core/devops/manual/initial-deployment.md b/ydb/docs/ru/core/devops/manual/initial-deployment.md index fb4591ddd2bd..9230caa6aca5 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/group.md). +При первоначальной установке кластера {{ ydb-short-name }} автоматически создается учетная запись `root` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [{#T}](../../security/group.md). Для выполнения первоначальной настройки учетных записей в созданном кластере {{ ydb-short-name }} выполните следующие операции: 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 index e2ce8f2fca25..83ff401aacfd 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -25,10 +25,9 @@ permissions Modify permissions ## grant, revoke -Команды `grant` и `revoke` позволяют установить и отозвать, соответственно, права доступа к объектам схемы для пользователя или группы пользователей. -По сути это аналоги соответствующих YQL-команд [GRANT](../../../yql/reference/syntax/grant.md) и [REVOKE](../../../yql/reference/syntax/revoke.md). +Команды `grant` и `revoke` позволяют установить и отозвать, соответственно, права доступа к объектам схемы для пользователя или группы пользователей. По сути, это аналоги соответствующих YQL-команд [GRANT](../../../yql/reference/syntax/grant.md) и [REVOKE](../../../yql/reference/syntax/revoke.md). -Синтаксис команд YDB CLI выглядит следующим образом: +Синтаксис команд {{ ydb-short-name }} CLI выглядит следующим образом: ```bash {{ ydb-cli }} [connection options] scheme permissions grant [options...] @@ -36,12 +35,14 @@ permissions Modify permissions ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать; -`` - имя пользователя или группы, для которых изменяются права доступа. + +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать; +`` — имя пользователя или группы, для которых изменяются права доступа. Дополнительные параметры `[options...]`: -`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем; -`{-p|--permission} NAME` – список прав, которые необходимо предоставить(grant) или отозвать(revoke) у пользователя. + +`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для данных операций не критичен и здесь его можно не применять; +`{-p|--permission} NAME` — список прав, которые необходимо предоставить (grant) или отозвать (revoke) у пользователя. Каждое право нужно передавать отдельным параметром, например: @@ -61,8 +62,8 @@ permissions Modify permissions Значения всех параметров полностью идентичны командам [`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`: +Например, ранее пользователю `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 @@ -70,7 +71,7 @@ permissions Modify permissions ## list -Команда `list` позволяет вывести права доступа к объектам схемы. +Команда `list` позволяет получить текущий список прав доступа к объектам схемы. Синтаксис команды: @@ -79,12 +80,12 @@ permissions Modify permissions ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. +`` — полный путь от корня кластера до объекта, права на который необходимо получить. Дополнительные параметры `[options...]`: -`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. +`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для данной операции не критичен и можно его не использовать. -Пример результата выполнения list: +Пример результата выполнения `list`: ```bash {{ ydb-cli }} scheme permissions list '/Root/db1/MyApp' @@ -107,34 +108,33 @@ DATABASE-ADMINS:ydb.generic.manage user1:ydb.generic.read ``` -Структура результата состоит из трех блоков: +Структура результата состоит из трёх блоков: -* `Owner` - показывает владельца объекта схемы. -* `Permissions` – отображает список прав, выданных непосредственно на схемный объект. -* `Effective permissions` – отображает список прав, фактически действующих на данный схемный объект с учетом правил наследования прав. -Данный список также включает все права, отображаемые в секции Permissions. +- `Owner` — показывает владельца объекта схемы. +- `Permissions` — отображает список прав, выданных непосредственно на данный объект. +- `Effective permissions` — отображает список прав, фактически действующих на данный схемный объект с учётом правил наследования прав. Данный список также включает все права, отображаемые в секции `Permissions`. ## clear -Команда `clear` позволяет отозвать все ранее выданные права на схемный объект. +Команда `clear` позволяет отозвать все ранее выданные права на схемный объект. Права, действующие на него по правилам наследования, продолжат действовать. ```bash {{ ydb-cli }} [global options...] scheme permissions clear [options...] ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. +`` — полный путь от корня кластера до объекта, права на который необходимо отозвать. Дополнительные параметры `[options...]`: -`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. +`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для данной операции не критичен и можно его не использовать. -Например, если выполнить команду: +Например, если над состоянием базы данных из предыдущего примера [`list`](#list) выполнить команду: ```bash {{ ydb-cli }} scheme permissions clear '/Root/db1/MyApp' ``` -над состоянием БД из прошлого примера [`list`](#list) и заново выполнить команду `list` на объект `/Root/db1/MyApp`, то получим вот такой результат: +И затем заново выполнить команду `list` на объект `/Root/db1/MyApp`, то получим следующий результат: ```bash Owner: root @@ -152,7 +152,7 @@ ACCESS-ADMINS:ydb.access.grant DATABASE-ADMINS:ydb.generic.manage ``` -Обратите внимание, что секция `Permissions` теперь пуста. То есть все права на данный объект были отозваны. Также произошли изменения в содержании `Effective permissions`. Из секции также пропали права, выданные непосредственно на объект `/Root/db1/MyApp`. +Обратите внимание, что секция `Permissions` теперь пуста. То есть все права на данный объект были отозваны. Также произошли изменения в содержании секции`Effective permissions`: в ней более не указаны права, которые были выданы непосредственно на объект `/Root/db1/MyApp`. ## chown @@ -165,13 +165,13 @@ DATABASE-ADMINS:ydb.generic.manage ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать; -`` - имя пользователя или группы – нового владельца указанного объекта. +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать; +`` — имя нового владельца указанного объекта, может быть пользователем или группой. Дополнительные параметры `[options...]`: `--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. -Пример команды chown: +Пример команды `chown`: ```bash {{ ydb-cli }} scheme permissions chown '/Root/db1' testuser @@ -185,7 +185,7 @@ DATABASE-ADMINS:ydb.generic.manage ## clear-inheritance -Команда `clear-inheritance` запретить наследование разрешений для схемного объекта. +Команда `clear-inheritance` позволяет запретить наследование разрешений для схемного объекта. Синтаксис команды: @@ -194,12 +194,12 @@ DATABASE-ADMINS:ydb.generic.manage ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать. Дополнительные параметры `[options...]`: -`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. +`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. -Пример команды clear-inheritance: +Пример команды `clear-inheritance`: ```bash {{ ydb-cli }} scheme permissions clear-inheritance '/Root/db1' @@ -216,12 +216,12 @@ DATABASE-ADMINS:ydb.generic.manage ``` Параметры: -`` - полный путь от корня кластера до объекта, права на который необходимо модифицировать. +`` — полный путь от корня кластера до объекта, права на который необходимо модифицировать. Дополнительные параметры `[options...]`: -`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. +`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. -Пример команды set-inheritance: +Пример команды `set-inheritance`: ```bash {{ ydb-cli }} scheme permissions set-inheritance '/Root/db1' diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index d4fe34065654..9236d2783e31 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -4,7 +4,7 @@ {% note info %} -Под клиентом аутентификации понимается SDK или CLI. +Под клиентом аутентификации понимается [SDK](../reference/ydb-sdk/index.md) или [CLI](../reference/ydb-cli/index.md). {% endnote %} @@ -17,13 +17,13 @@ ## Анонимная аутентификация -В данном режиме допускается логин без указания пользователя или токена. В этом случае также не производится [авторизация](authorization.md) (проверка прав). +В данном режиме допускается логин без указания аутентификационных данных, таких как имя пользователя или токен. В этом случае также не производится [авторизация](authorization.md) (проверка прав доступа). Но если будет указан пользователь или токен, то будет работать соответствующий режим аутентификации с последующей авторизацией. {% note warning %} -Использовать анонимную аутентификацию следует только в ознакомительных целях для внутренних локальных баз данных, не имеющих доступа по сети. +Использовать анонимную аутентификацию следует только в ознакомительных целях для локальных баз данных, не имеющих доступа по сети. {% endnote %} @@ -61,15 +61,15 @@ Логин пользователя может содержать только строчные буквы латинского алфавита и цифры. Допускается использование пустого пароля. -Логин пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом [Argon2]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Argon2){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Argon2){% endif %}. В режиме аутентификации по логину и паролю доступ к таблице имеет только администратор системы. +Логин пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом [Argon2](https://ru.wikipedia.org/wiki/Argon2). Доступ к этой таблице имеет только администратор системы. -В ответ на логин и пароль возвращается токен. Время жизни токена по умолчанию 12 часов. Для ротации токенов клиент, например, SDK, самостоятельно обращается к сервису аутентификации. Использование токена ускоряет процесс аутентификации и повышает безопасность. +В ответ на логин и пароль возвращается токен. Время жизни токена по умолчанию составляет 12 часов. Для ротации токенов клиент, например, [SDK](../reference/ydb-sdk/index.md), самостоятельно обращается к сервису аутентификации. Использование токена ускоряет процесс аутентификации и повышает безопасность. Процесс аутентификации по логину и паролю включает следующие шаги: -1. Клиент обращается к БД и передает логин и пароль пользователя сервису аутентификации {{ ydb-short-name }}. -1. Сервис аутентификации передает аутентификационные данные в компонент аутентификации {{ ydb-short-name }}. -1. Компонент проверяет аутентификационные данные, при успешном сопоставлении создает токен и возвращает его сервису аутентификации. +1. Клиент обращается к базе данных и передаёт логин и пароль пользователя сервису аутентификации {{ ydb-short-name }}. +1. Сервис аутентификации передаёт аутентификационные данные в компонент аутентификации {{ ydb-short-name }}. +1. Компонент проверяет аутентификационные данные, при успешном сопоставлении создаёт токен и возвращает его сервису аутентификации. 1. Сервис аутентификации возвращает токен клиенту. 1. Клиент обращается к БД, передавая в качестве аутентификационной информации токен. diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index db0a6951397e..c77bc801985f 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -9,12 +9,12 @@ * [Право](#right) * [Владелец](#owner) -Независимо от метода аутентификации, авторизация всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информацию об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. +Независимо от метода аутентификации, авторизация всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информации об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. Авторизация выполняется на каждое действие пользователя: его права не кешируются, так как могут быть отозваны или предоставлены в любой момент времени. ## Объект доступа {#object} -Объект доступа - узел дерева [директорий](../concepts/glossary.md#папка-folder) (схемный объект, объект схемы), например: база данных, директории, таблицы, представления, топики. +Объект доступа — узел дерева [директорий](../concepts/glossary.md#folder) (схемный объект, объект схемы), например: базы данных, директории, таблицы, представления, топики. Директории организованы в иерархическую структуру объектов схемы и вложенных в них объектов: баз данных, таблиц, представлений, топиков. Директории могут содержать поддиректории, и такая вложенность может быть произвольной глубины. @@ -27,8 +27,10 @@ {{ ydb-short-name }} позволяет работать с пользователями из разных каталогов и систем, и они отличаются с использованием суффикса. Субъект доступа идентифицируется строкой вида `[@]`. Такая строка называется SID (Security Identifier). SID'ы записываются в правилах ACL на объектах схемы. -Суффикс `@` идентифицирует "источник пользователя" или "auth-домен", внутри которых гарантируется уникальность всех `login`. Например, в случае интеграции с LDAP, имена пользователей будут `user1@ldap` и `user2@ldap`. -Если указан login без суффикса, то имеются ввиду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. + +{{ ydb-short-name }} позволяет работать с пользователями из разных каталогов и систем, которые отличаются использованием суффикса. +Суффикс `@` идентифицирует «источник пользователя» или «auth-домен», внутри которых гарантируется уникальность всех `login`. Например, в случае интеграции с LDAP имена пользователей будут `user1@ldap` и `user2@ldap`. +Если указан `login` без суффикса, то имеются в виду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. ### Пользователь {#user} @@ -40,19 +42,19 @@ {% include [!](../_includes/do-not-create-users-in-ldap.md) %} -Отдельно выделяется пользователь `root`. Он создается при [первоначальной установке кластера](../devops/manual/initial-deployment#initialize-cluster), в ходе которой ему нужно сразу [установить пароль](../devops/manual/initial-deployment#security-setup). +Отдельно выделяется пользователь `root`. Он создаётся при [первоначальном развёртывании кластера](../devops/manual/initial-deployment.md#initialize-cluster), в ходе которой ему нужно сразу [установить пароль](../devops/manual/initial-deployment.md#security-setup). ### Группа {#group} -Группа пользователей - именованное множество пользователей, предназначенное для упрощения контроля доступа. -За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. +Группа пользователей — именованное множество пользователей, предназначенное для упрощения конфигурации контроля доступа. +За группой можно закрепить любые необходимые [права](#right) на произвольный набор [объектов доступа](#object). Ограничений по количеству пользователей в группе нет. Группа доступа может быть пустой, когда в неё не входит ни один пользователь. -Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. -Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права доступа на нужные объекты. +Любого пользователя можно включить в ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. +Так, с помощью групп доступа {{ ydb-short-name }} можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права доступа на нужные объекты. -Для создания, изменения и удаления групп есть команды: +Для создания, изменения и удаления групп есть следующие виды YQL запросов: * [{#T}](../yql/reference/syntax/create-group.md) * [{#T}](../yql/reference/syntax/alter-group.md) @@ -62,32 +64,32 @@ ## Право {#right} -Обладание правом в {{ ydb-short-name }} даёт возможность выполнять определённые операции в кластере или базе данных. -Права в {{ ydb-short-name }} выдаются на объекты доступа (узлы дерева директорий). +Право в {{ ydb-short-name }} — сущность, отражающая разрешение [субъекту](#subject) выполнять конкретный набор операций в кластере или базе данных над конкретным [объектом](#object). + У каждого такого объекта есть список разрешений — ACL (Access Control List) — он хранит все предоставленные пользователям и группам права на объект. -Для управления правами служат следующие YQL-команды: +Для управления правами служат следующие виды YQL запросов: * [{#T}](../yql/reference/syntax/grant.md). * [{#T}](../yql/reference/syntax/revoke.md). -Пример использования команды GRANT: +Пример использования `GRANT`: ```yql GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser ``` -Подробнее о правах и их полный перечень: [{#T}](right.md). +Подробнее о правах и полный перечень их типов: [{#T}](right.md). ## Владелец объекта {#owner} -У каждого объекта доступа есть владелец, в том числе у кластера в целом и каждой базы данных. Владельцем объекта по умолчанию становится субъект доступа, создавший объект. +У каждого объекта доступа есть владелец, в том числе у кластера в целом и каждой базы данных. Владельцем объекта по умолчанию становится субъект доступа, создавший объект. Для владельца не проверяются ACL права на данный объект. Он имеет полный набор прав на объект. -Сменить владельца можно с помощью CLI команды [CHOWN](../reference/ydb-cli/commands/scheme-permissions.md#chown). +Сменить владельца можно с помощью CLI команды [`chown`](../reference/ydb-cli/commands/scheme-permissions.md#chown). -Пример команды chown: +Пример команды `chown`: ```bash {{ ydb-cli }} scheme permissions chown '/Root/db1' testuser diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md index 915bbc4b5cdd..d3af94980bbb 100644 --- a/ydb/docs/ru/core/security/group.md +++ b/ydb/docs/ru/core/security/group.md @@ -38,3 +38,5 @@ Ниже показано, как группы наследуют разрешения друг друга. Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS`: ![groups](../_assets/groups.svg) + + Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS` 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 1d167c0ec6ac..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` — имя удаляемого пользователя. Поддерживается возможность задать список пользователей через запятую: `DROP USER [IF EXISTS] user1,user2,user3`. +* `user_name` — имя удаляемого пользователя. Поддерживается возможность задать список пользователей через запятую, например: `DROP USER user1, user2, user3;`. From ccc7191571cc077ab2315a2dd2ef8c94d43b8e2a Mon Sep 17 00:00:00 2001 From: azevaykin Date: Sat, 28 Dec 2024 12:08:10 +0300 Subject: [PATCH 18/27] fomichev review fixes --- ydb/docs/ru/core/security/authentication.md | 56 ++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index 9236d2783e31..8104dee92017 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -4,16 +4,16 @@ {% note info %} -Под клиентом аутентификации понимается [SDK](../reference/ydb-sdk/index.md) или [CLI](../reference/ydb-cli/index.md). +Под клиентом аутентификации понимается пользователь, проходящий процедуру проверки подлинности при доступе к {{ 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 %}. * Аутентификация по [логину и паролю](#static-credentials). * Аутентификация с использованием [LDAP каталога](#ldap-auth-provider). +* [Аутентификация с использованием стороннего 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 %}. ## Анонимная аутентификация @@ -29,32 +29,6 @@ Чтобы включить анонимную аутентификацию, необходимо указать значение `false` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. -## Аутентификация с использованием стороннего IAM-провайдера {#iam} - -* **Access Token** — параметром для клиента (SDK или CLI) задается фиксированный токен, который передается в запросы. -* **Refresh Token** — параметром для клиента (SDK или CLI) задается [OAuth токен](https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/) персональной учетной записи, на основании которого клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы. -* **Service Account Key** — параметром для клиента (SDK или CLI) задаются атрибуты сервисной учетной записи и ключ для подписи, на основании которых клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы. -* **Metadata** — клиент (SDK или CLI) периодически обращается к локальному сервису для ротации (получения следующего) токена, передаваемого в запросы. -* **OAuth 2.0 token exchange** - клиент (SDK или CLI) обменивает токен другого типа на access token по [протоколу обмена токенов OAuth 2.0](https://www.rfc-editor.org/rfc/rfc8693), который затем передаётся в запросы {{ ydb-short-name }} API. - -Любой обладатель валидного токена может получить доступ на выполнение операций, поэтому главная задача системы безопасности — обеспечение секретности токена и предотвращение его компрометации. - -Режимы аутентификации с ротацией токена **Refresh Token** и **Service Account Key** обеспечивают больший уровень безопасности по сравнению с режимом с фиксированным токеном **Access Token**, так как на сервер {{ ydb-short-name }} по сети передаются только короткоживущие секреты. - -Максимальная безопасность и производительность обеспечивается при использовании режима **Metadata**, так как он исключает необходимость работы с секретами при развертывании приложения, а также позволяет обратиться к IAM и закешировать токен заранее, до запуска приложения. - -При выборе режима аутентификации среди поддерживаемых сервером и окружением, следует руководствоваться следующими рекомендациями: - -* **Anonymous** обычно применяется на самостоятельно разворачиваемых локальных кластерах {{ ydb-short-name }}, недоступных по сети. -* **Access Token** применяется при отсутствии поддержки других режимов на стороне сервера или в настроечных/отладочных целях. Он не требует взаимодействий клиента с IAM. Однако, если IAM поддерживает API для ротации токенов, то обычно выдаваемые таким IAM фиксированные токены имеют короткий срок жизни, что вынуждает регулярно обновлять их в IAM вручную заново. -* **Refresh Token** может применяться при выполнении разовых ручных операций под персональной учетной записью, например, связанных с обслуживанием данных в БД, выполнением ad-hoc операций в CLI, или запусками приложений с рабочей станции. Такой токен можно получить вручную в IAM один раз на долгий срок и сохранить в переменной окружения на личной рабочей станции для автоматического применения при запуске CLI без дополнительных параметров аутентификации. -* **Service Account Key** применяется в первую очередь для приложений, рассчитанных на эксплуатацию в окружениях, где поддерживается режим **Metadata**, при их тестировании вне таких окружений (например, на рабочей станции). Также он может применяться для приложений вне таких окружений, работая как аналог **Refresh Token** для сервисных учетных записей. В отличие от персональной учетной записи, объекты доступа и роли сервисной учетной записи могут быть ограничены. -* **Metadata** применяется при разворачивании приложений в облаках. В настоящее время этот режим поддерживается на виртуальных машинах и в {{ sf-name }} {{ yandex-cloud }}. - -Токен для указания в параметрах может быть получен в системе IAM, с которой связана конкретная установка {{ ydb-short-name }}. В частности, для сервиса {{ ydb-short-name }} в {{ yandex-cloud }} применяется Yandex.Passport OAuth и сервисные аккаунты {{ yandex-cloud }}. При использовании {{ ydb-short-name }} в корпоративных контекстах могут применяться стандартные для данной организации системы централизованной аутентификации. - -При использовании режимов, предусматривающих обращение клиента {{ ydb-short-name }} к IAM, дополнительно может быть задан URL IAM, предоставляющий API выдачи токенов. По умолчанию в существующих SDK и CLI производится попытка обращения к API IAM {{ yandex-cloud }}, размещенному на `iam.api.cloud.yandex.net:443`. - ## Аутентификация по логину и паролю {#static-credentials} Данный вид доступа подразумевает наличие у каждого пользователя базы данных логина и пароля. @@ -83,6 +57,32 @@ Примеры поддерживаемых реализаций LDAP каталогов: [OpenLdap](https://openldap.org/), [Active Directory](https://azure.microsoft.com/en-us/products/active-directory/). +## Аутентификация с использованием стороннего IAM-провайдера {#iam} + +* **Access Token** — параметром для клиента (SDK или CLI) задается фиксированный токен, который передается в запросы. +* **Refresh Token** — параметром для клиента (SDK или CLI) задается [OAuth токен](https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/) персональной учетной записи, на основании которого клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы. +* **Service Account Key** — параметром для клиента (SDK или CLI) задаются атрибуты сервисной учетной записи и ключ для подписи, на основании которых клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы. +* **Metadata** — клиент (SDK или CLI) периодически обращается к локальному сервису для ротации (получения следующего) токена, передаваемого в запросы. +* **OAuth 2.0 token exchange** - клиент (SDK или CLI) обменивает токен другого типа на access token по [протоколу обмена токенов OAuth 2.0](https://www.rfc-editor.org/rfc/rfc8693), который затем передаётся в запросы {{ ydb-short-name }} API. + +Любой обладатель валидного токена может получить доступ на выполнение операций, поэтому главная задача системы безопасности — обеспечение секретности токена и предотвращение его компрометации. + +Режимы аутентификации с ротацией токена **Refresh Token** и **Service Account Key** обеспечивают больший уровень безопасности по сравнению с режимом с фиксированным токеном **Access Token**, так как на сервер {{ ydb-short-name }} по сети передаются только короткоживущие секреты. + +Максимальная безопасность и производительность обеспечивается при использовании режима **Metadata**, так как он исключает необходимость работы с секретами при развертывании приложения, а также позволяет обратиться к IAM и закешировать токен заранее, до запуска приложения. + +При выборе режима аутентификации среди поддерживаемых сервером и окружением, следует руководствоваться следующими рекомендациями: + +* **Anonymous** обычно применяется на самостоятельно разворачиваемых локальных кластерах {{ ydb-short-name }}, недоступных по сети. +* **Access Token** применяется при отсутствии поддержки других режимов на стороне сервера или в настроечных/отладочных целях. Он не требует взаимодействий клиента с IAM. Однако, если IAM поддерживает API для ротации токенов, то обычно выдаваемые таким IAM фиксированные токены имеют короткий срок жизни, что вынуждает регулярно обновлять их в IAM вручную заново. +* **Refresh Token** может применяться при выполнении разовых ручных операций под персональной учетной записью, например, связанных с обслуживанием данных в БД, выполнением ad-hoc операций в CLI, или запусками приложений с рабочей станции. Такой токен можно получить вручную в IAM один раз на долгий срок и сохранить в переменной окружения на личной рабочей станции для автоматического применения при запуске CLI без дополнительных параметров аутентификации. +* **Service Account Key** применяется в первую очередь для приложений, рассчитанных на эксплуатацию в окружениях, где поддерживается режим **Metadata**, при их тестировании вне таких окружений (например, на рабочей станции). Также он может применяться для приложений вне таких окружений, работая как аналог **Refresh Token** для сервисных учетных записей. В отличие от персональной учетной записи, объекты доступа и роли сервисной учетной записи могут быть ограничены. +* **Metadata** применяется при разворачивании приложений в облаках. В настоящее время этот режим поддерживается на виртуальных машинах и в {{ sf-name }} {{ yandex-cloud }}. + +Токен для указания в параметрах может быть получен в системе IAM, с которой связана конкретная установка {{ ydb-short-name }}. В частности, для сервиса {{ ydb-short-name }} в {{ yandex-cloud }} применяется Yandex.Passport OAuth и сервисные аккаунты {{ yandex-cloud }}. При использовании {{ ydb-short-name }} в корпоративных контекстах могут применяться стандартные для данной организации системы централизованной аутентификации. + +При использовании режимов, предусматривающих обращение клиента {{ ydb-short-name }} к IAM, дополнительно может быть задан URL IAM, предоставляющий API выдачи токенов. По умолчанию в существующих SDK и CLI производится попытка обращения к API IAM {{ yandex-cloud }}, размещенному на `iam.api.cloud.yandex.net:443`. + ### Аутентификация Аутентификация с помощью LDAP протокола похожа на процесс аутентификации по логину и паролю. Отличие заключается лишь в том, что роль компонента аутентификации играет LDAP каталог. LDAP каталог используется только для проверки пары логин/пароль. From 62b86735143f8bd0c378cdb336fe33a4715ec0d3 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Sat, 28 Dec 2024 15:50:59 +0300 Subject: [PATCH 19/27] Right deduplication --- ydb/docs/ru/core/security/right.md | 42 +----------- .../_includes/permissions/permissions_list.md | 67 +++++++++++-------- 2 files changed, 39 insertions(+), 70 deletions(-) diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index df9cf6f8dffe..d1d7195ecd5b 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -12,47 +12,7 @@ {% endnote %} -## Перечень прав - -В качестве имён прав доступа можно использовать имена {{ 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` - -{% note info %} - -Права `ydb.database.connect`, `ydb.granular.describe_schema`, `ydb.granular.select_row`, `ydb.granular.update_row` необходимо рассматривать как слои прав. -Например, для изменения строк необходимо не только право `ydb.granular.update_row`, но и все предыдущие права. - -{% endnote %} +{% include [x](../yql/reference/yql-core/syntax/_includes/permissions/permissions_list.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 index 84a96f4677e9..3e768f8c9425 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,43 @@ ## Права доступа {#permissions-list} -В качестве имен прав доступа можно использовать специфичные для {{ ydb-short-name }} права или соответствующие им ключевые слова. В таблице ниже перечислены возможные имена прав и соответствующие им ключевые слова. -Нужно заметить, что специфичные для {{ ydb-short-name }} права задаются как строки и должны заключаться в одинарные или двойные кавычки. +В качестве имён прав доступа можно использовать имена {{ ydb-short-name }} прав или соответствующие им ключевые слова YQL. +В таблице ниже перечислены возможные имена прав. -{{ 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.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` необходимо рассматривать как слои прав. +Например, для изменения строк необходимо не только право `ydb.granular.update_row`, но и все предыдущие права. + +{% endnote %} From a548cf960c590d3d576981146533e5d8007379dd Mon Sep 17 00:00:00 2001 From: azevaykin Date: Sat, 28 Dec 2024 15:58:12 +0300 Subject: [PATCH 20/27] timeout deduplication --- .../ydb-cli/commands/scheme-permissions.md | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) 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 index 83ff401aacfd..93d6ffcfaeb4 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -20,9 +20,14 @@ permissions Modify permissions ├─ grant Grant permission (aliases: add) ├─ list List permissions ├─ revoke Revoke permission (aliases: remove) -└─ set Set permissions +├─ 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). @@ -41,7 +46,6 @@ permissions Modify permissions Дополнительные параметры `[options...]`: -`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для данных операций не критичен и здесь его можно не применять; `{-p|--permission} NAME` — список прав, которые необходимо предоставить (grant) или отозвать (revoke) у пользователя. Каждое право нужно передавать отдельным параметром, например: @@ -82,9 +86,6 @@ permissions Modify permissions Параметры: `` — полный путь от корня кластера до объекта, права на который необходимо получить. -Дополнительные параметры `[options...]`: -`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для данной операции не критичен и можно его не использовать. - Пример результата выполнения `list`: ```bash @@ -125,9 +126,6 @@ user1:ydb.generic.read Параметры: `` — полный путь от корня кластера до объекта, права на который необходимо отозвать. -Дополнительные параметры `[options...]`: -`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для данной операции не критичен и можно его не использовать. - Например, если над состоянием базы данных из предыдущего примера [`list`](#list) выполнить команду: ```bash @@ -168,9 +166,6 @@ DATABASE-ADMINS:ydb.generic.manage `` — полный путь от корня кластера до объекта, права на который необходимо модифицировать; `` — имя нового владельца указанного объекта, может быть пользователем или группой. -Дополнительные параметры `[options...]`: -`--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. - Пример команды `chown`: ```bash @@ -196,9 +191,6 @@ DATABASE-ADMINS:ydb.generic.manage Параметры: `` — полный путь от корня кластера до объекта, права на который необходимо модифицировать. -Дополнительные параметры `[options...]`: -`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. - Пример команды `clear-inheritance`: ```bash @@ -218,9 +210,6 @@ DATABASE-ADMINS:ydb.generic.manage Параметры: `` — полный путь от корня кластера до объекта, права на который необходимо модифицировать. -Дополнительные параметры `[options...]`: -`--timeout ms` — технологический параметр, задающий таймаут на отклик сервера. Для наших операций не критичен и здесь мы его не применяем. - Пример команды `set-inheritance`: ```bash From 6a0d05b4c65d96f1e00e159bea030647a30e6f25 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Mon, 30 Dec 2024 14:57:22 +0300 Subject: [PATCH 21/27] blinkov review small fixes --- .../ydb-cli/commands/scheme-permissions.md | 2 +- ydb/docs/ru/core/security/authentication.md | 11 ++++----- ydb/docs/ru/core/security/authorization.md | 23 +++++++++++++------ ydb/docs/ru/core/security/group.md | 2 +- ydb/docs/ru/core/security/right.md | 5 +++- 5 files changed, 27 insertions(+), 16 deletions(-) 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 index 93d6ffcfaeb4..047013ce0e6e 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -199,7 +199,7 @@ DATABASE-ADMINS:ydb.generic.manage ## set-inheritance -Команда `set-inheritance` позволяет установить наследование разрешений для схемного объекта. +Команда `set-inheritance` позволяет включить наследование разрешений для схемного объекта. Синтаксис команды: diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index 8104dee92017..32df3d2c1857 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -10,12 +10,12 @@ Поддерживаются следующие режимы аутентификации: -* Анонимная аутентификация — включена по умолчанию и доступна сразу после [установки кластера](../devops/index.md). +* [Анонимная](#anonymous) аутентификация. * Аутентификация по [логину и паролю](#static-credentials). * Аутентификация с использованием [LDAP каталога](#ldap-auth-provider). * [Аутентификация с использованием стороннего 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} В данном режиме допускается логин без указания аутентификационных данных, таких как имя пользователя или токен. В этом случае также не производится [авторизация](authorization.md) (проверка прав доступа). @@ -24,10 +24,11 @@ {% note warning %} Использовать анонимную аутентификацию следует только в ознакомительных целях для локальных баз данных, не имеющих доступа по сети. +Анонимная аутентификация включена по умолчанию и доступна сразу после [установки кластера](../devops/index.md) {% endnote %} -Чтобы включить анонимную аутентификацию, необходимо указать значение `false` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. +За включение анонимной аутентификации отвечает ключ `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. ## Аутентификация по логину и паролю {#static-credentials} @@ -42,9 +43,7 @@ Процесс аутентификации по логину и паролю включает следующие шаги: 1. Клиент обращается к базе данных и передаёт логин и пароль пользователя сервису аутентификации {{ ydb-short-name }}. -1. Сервис аутентификации передаёт аутентификационные данные в компонент аутентификации {{ ydb-short-name }}. -1. Компонент проверяет аутентификационные данные, при успешном сопоставлении создаёт токен и возвращает его сервису аутентификации. -1. Сервис аутентификации возвращает токен клиенту. +1. Сервис проверяет аутентификационные данные, при успешном сопоставлении создаёт токен и возвращает его клиенту. 1. Клиент обращается к БД, передавая в качестве аутентификационной информации токен. Для включения аутентификации по логину и паролю укажите значение `true` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../reference/configuration/index.md#auth) кластера. diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index c77bc801985f..2b4c883ba938 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -20,15 +20,15 @@ ## Субъект доступа {#subject} -### SID - -Субъект доступа является [пользователем](#user) или [группой](#group). +Субъект доступа — сущность, которая может запрашивать доступ к объектам доступа или выполнять определенные действия в системе. +Субъектом доступа может быть [пользователь](#user) или [группа](#group). {{ ydb-short-name }} позволяет работать с пользователями из разных каталогов и систем, и они отличаются с использованием суффикса. +### SID + Субъект доступа идентифицируется строкой вида `[@]`. Такая строка называется SID (Security Identifier). SID'ы записываются в правилах ACL на объектах схемы. -{{ ydb-short-name }} позволяет работать с пользователями из разных каталогов и систем, которые отличаются использованием суффикса. Суффикс `@` идентифицирует «источник пользователя» или «auth-домен», внутри которых гарантируется уникальность всех `login`. Например, в случае интеграции с LDAP имена пользователей будут `user1@ldap` и `user2@ldap`. Если указан `login` без суффикса, то имеются в виду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. @@ -49,7 +49,7 @@ Группа пользователей — именованное множество пользователей, предназначенное для упрощения конфигурации контроля доступа. За группой можно закрепить любые необходимые [права](#right) на произвольный набор [объектов доступа](#object). -Ограничений по количеству пользователей в группе нет. Группа доступа может быть пустой, когда в неё не входит ни один пользователь. +Группа пользователей может быть пустой, когда в неё не входит ни один пользователь. Любого пользователя можно включить в ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. Так, с помощью групп доступа {{ ydb-short-name }} можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права доступа на нужные объекты. @@ -66,8 +66,6 @@ Право в {{ ydb-short-name }} — сущность, отражающая разрешение [субъекту](#subject) выполнять конкретный набор операций в кластере или базе данных над конкретным [объектом](#object). -У каждого такого объекта есть список разрешений — ACL (Access Control List) — он хранит все предоставленные пользователям и группам права на объект. - Для управления правами служат следующие виды YQL запросов: * [{#T}](../yql/reference/syntax/grant.md). @@ -94,3 +92,14 @@ GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser ```bash {{ ydb-cli }} scheme permissions chown '/Root/db1' testuser ``` + +## Список разрешений + +У каждого такого [объекта доступа](#object) есть список разрешений — ACL (Access Control List) — он хранит все предоставленные [субъектам доступа](#subject) (пользователям и группам) права на объект. + +Изменять ACL (управления правами) служат следующие виды YQL запросов: + +* [{#T}](../yql/reference/syntax/grant.md). +* [{#T}](../yql/reference/syntax/revoke.md). + +Просматривать ACL объекта доступа можно с помощью CLI команды [`describe`](../reference/ydb-cli/commands/scheme-describe.md). diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md index d3af94980bbb..47c0919382b0 100644 --- a/ydb/docs/ru/core/security/group.md +++ b/ydb/docs/ru/core/security/group.md @@ -39,4 +39,4 @@ ![groups](../_assets/groups.svg) - Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS` +Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS` diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md index d1d7195ecd5b..832aaadf9c38 100644 --- a/ydb/docs/ru/core/security/right.md +++ b/ydb/docs/ru/core/security/right.md @@ -2,7 +2,6 @@ ## Основные понятия -Обладание правом в {{ ydb-short-name }} даёт возможность выполнять определённые операции в кластере или базе данных. Права в {{ ydb-short-name }} выдаются на объекты доступа. У каждого такого объекта есть список разрешений — ACL (Access Control List) — он хранит все предоставленные пользователям и группам права на объект. Объектом может быть директория, содержащая другие поддиректории или непосредственно объекты, не имеющие других вложенных объектов, — таблицы, топики, представления и не только. В дальнейшем, если внутри директории появляются другие объекты, они по умолчанию наследуют все права, выданные на родительскую директорию. @@ -54,3 +53,7 @@ GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser ```bash {{ ydb-short-name }} scheme permissions grant -p "ydb.granular.create_directory" `/Root/db1` testuser ``` + +### Просмотр прав с помощью CLI + +Просматривать ACL объекта доступа можно с помощью CLI команды [`describe`](../reference/ydb-cli/commands/scheme-describe.md). From b0d169545e888b9fcdee4708d9f2c171b8e968c6 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 10 Jan 2025 14:04:55 +0300 Subject: [PATCH 22/27] LOGIN/NOLOGIN --- ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md | 2 ++ .../ru/core/yql/reference/yql-core/syntax/create-user.md | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) 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 596803078577..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 @@ -13,3 +13,5 @@ ALTER USER user_name [ WITH ] option [ ... ] * `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 a3c2f123ef12..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 @@ -11,7 +11,8 @@ CREATE USER user_name [option] * `user_name` — имя пользователя. Может содержать строчные буквы латинского алфавита и цифры. * `option` — опция команды: * `PASSWORD 'password'` — создает пользователя с паролем `password`. - * `PASSWORD NULL` — создает пользователя с пустым паролем. - Значение по умолчанию: `PASSWORD NULL`. + * `PASSWORD NULL` — создает пользователя с пустым паролем (по умолчанию). + * `NOLOGIN` - запрет на логин пользователя (блокировка пользователя). + * `LOGIN` - разрешение на логин пользователя (по умолчанию). {% include [!](../../../_includes/do-not-create-users-in-ldap.md) %} From 2b182e016c82d7da355a3a42996dc4604c1b71b3 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 10 Jan 2025 18:00:48 +0300 Subject: [PATCH 23/27] Remove group.md & right.md --- .../core/devops/manual/initial-deployment.md | 2 +- .../integrations/visualization/grafana.md | 2 +- ydb/docs/ru/core/security/authorization.md | 50 +++++++++++++--- ydb/docs/ru/core/security/group.md | 42 ------------- ydb/docs/ru/core/security/index.md | 2 - ydb/docs/ru/core/security/right.md | 59 ------------------- ydb/docs/ru/core/security/toc_p.yaml | 4 -- .../syntax/_assets/builtin_groups.svg} | 0 .../syntax/_includes/builtin_groups.md | 20 +++++++ .../reference/yql-core/syntax/alter-group.md | 2 + .../yql/reference/yql-core/syntax/grant.md | 2 +- 11 files changed, 68 insertions(+), 117 deletions(-) delete mode 100644 ydb/docs/ru/core/security/group.md delete mode 100644 ydb/docs/ru/core/security/right.md rename ydb/docs/ru/core/{_assets/groups.svg => yql/reference/yql-core/syntax/_assets/builtin_groups.svg} (100%) create mode 100644 ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/builtin_groups.md diff --git a/ydb/docs/ru/core/devops/manual/initial-deployment.md b/ydb/docs/ru/core/devops/manual/initial-deployment.md index 9230caa6aca5..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` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [{#T}](../../security/group.md). +При первоначальной установке кластера {{ ydb-short-name }} автоматически создается учетная запись `root` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [{#T}](../../yql/reference/syntax/alter-group.md#builtin). Для выполнения первоначальной настройки учетных записей в созданном кластере {{ ydb-short-name }} выполните следующие операции: diff --git a/ydb/docs/ru/core/integrations/visualization/grafana.md b/ydb/docs/ru/core/integrations/visualization/grafana.md index 55ab09b45d85..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/right.md) и доступом до баз данных и таблиц, к которым потребуется делать запросы. +Настройте аккаунт пользователя {{ ydb-short-name }} с правами **только на чтение** [(подробнее об правах доступа)](../../security/authorization.md#right) и доступом до баз данных и таблиц, к которым потребуется делать запросы. {% note warning %} diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index 2b4c883ba938..9f253713230a 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -60,24 +60,60 @@ * [{#T}](../yql/reference/syntax/alter-group.md) * [{#T}](../yql/reference/syntax/drop-group.md) -Подробнее о группах пользователей: [{#T}](group.md). - ## Право {#right} +### Понятие права + Право в {{ ydb-short-name }} — сущность, отражающая разрешение [субъекту](#subject) выполнять конкретный набор операций в кластере или базе данных над конкретным [объектом](#object). -Для управления правами служат следующие виды YQL запросов: +{% note info %} + +Права привязаны не пользователю, а к объекту доступа. + +{% endnote %} + +### Управление правами с помощью YQL + +Для управления правами служат следующие YQL-команды: * [{#T}](../yql/reference/syntax/grant.md). * [{#T}](../yql/reference/syntax/revoke.md). -Пример использования `GRANT`: +В качестве имен прав доступа в этих командах можно использовать специфичные для {{ ydb-short-name }} права или соответствующие им ключевые слова. + +Пример использования c ключевым словом YQL: ```yql GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser ``` -Подробнее о правах и полный перечень их типов: [{#T}](right.md). +Пример использования c именем {{ ydb-short-name }} права: + +```yql +GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser +``` + +### Управление правами с помощью CLI + +Для управления правами служат следующие 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) +* [list](../reference/ydb-cli/commands/scheme-permissions.md#list) + +В CLI используется только стиль из столбца "{{ ydb-short-name }} право". +Например: + +```bash +{{ ydb-short-name }} scheme permissions grant -p "ydb.granular.create_directory" `/Root/db1` testuser +``` + +### Просмотр прав с помощью CLI + +Просматривать ACL объекта доступа можно с помощью CLI команды [`describe`](../reference/ydb-cli/commands/scheme-describe.md). ## Владелец объекта {#owner} @@ -93,9 +129,9 @@ GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser {{ ydb-cli }} scheme permissions chown '/Root/db1' testuser ``` -## Список разрешений +## Список разрешений {#acl} -У каждого такого [объекта доступа](#object) есть список разрешений — ACL (Access Control List) — он хранит все предоставленные [субъектам доступа](#subject) (пользователям и группам) права на объект. +У каждого такого [объекта доступа](#object) есть список разрешений — ACL (Access Control List) — он хранит все предоставленные [субъектам доступа](#subject) (пользователям и группам) [права](#right) на объект. Изменять ACL (управления правами) служат следующие виды YQL запросов: diff --git a/ydb/docs/ru/core/security/group.md b/ydb/docs/ru/core/security/group.md deleted file mode 100644 index 47c0919382b0..000000000000 --- a/ydb/docs/ru/core/security/group.md +++ /dev/null @@ -1,42 +0,0 @@ -# Группа пользователей - -## Основные понятия - -Группа пользователей - именованное множество пользователей или групп, предназначенное для упрощения контроля доступа. -За группой можно закрепить любые необходимые права на произвольный набор объектов доступа. -В группу можно включать не только пользователей, но и другие группы - -Ограничений на количество членов группы нет. Группа доступа может быть «пустой», это когда в неё никто входит. - -Любого пользователя можно включить ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. -Так с помощью групп доступа YDB можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права -доступа на нужные объекты. - -Для создания, изменения и удаления групп есть команды: - -* [{#T}](../yql/reference/syntax/create-group.md) -* [{#T}](../yql/reference/syntax/alter-group.md) -* [{#T}](../yql/reference/syntax/drop-group.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) - -Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS` diff --git a/ydb/docs/ru/core/security/index.md b/ydb/docs/ru/core/security/index.md index 912f89467d5c..1026268e9b7b 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -6,8 +6,6 @@ - [{#T}](authentication.md) - [{#T}](authorization.md) -- [{#T}](group.md) -- [{#T}](right.md) - [{#T}](audit-log.md) - Шифрование: diff --git a/ydb/docs/ru/core/security/right.md b/ydb/docs/ru/core/security/right.md deleted file mode 100644 index 832aaadf9c38..000000000000 --- a/ydb/docs/ru/core/security/right.md +++ /dev/null @@ -1,59 +0,0 @@ -# Права - -## Основные понятия - -Права в {{ ydb-short-name }} выдаются на объекты доступа. У каждого такого объекта есть список разрешений — ACL (Access Control List) — он хранит все предоставленные пользователям и группам права на объект. Объектом может быть директория, содержащая другие поддиректории или непосредственно объекты, не имеющие других вложенных объектов, — таблицы, топики, представления и не только. -В дальнейшем, если внутри директории появляются другие объекты, они по умолчанию наследуют все права, выданные на родительскую директорию. - -{% note info %} - -Права привязаны не пользователю, а к объекту доступа. - -{% endnote %} - -{% include [x](../yql/reference/yql-core/syntax/_includes/permissions/permissions_list.md) %} - -## Управление правами - -### Управление правами с помощью YQL - -Для управления правами служат следующие YQL-команды: - -* [{#T}](../yql/reference/syntax/grant.md). -* [{#T}](../yql/reference/syntax/revoke.md). - -В качестве имен прав доступа в этих командах можно использовать специфичные для {{ ydb-short-name }} права или соответствующие им ключевые слова. - -Пример использования c ключевым словом YQL: - -```yql -GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser -``` - -Пример использования c именем {{ ydb-short-name }} права: - -```yql -GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser -``` - -### Управление правами с помощью CLI - -Для управления правами служат следующие 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) -* [list](../reference/ydb-cli/commands/scheme-permissions.md#list) - -В CLI используется только стиль из столбца "{{ ydb-short-name }} право". -Например: - -```bash -{{ ydb-short-name }} scheme permissions grant -p "ydb.granular.create_directory" `/Root/db1` testuser -``` - -### Просмотр прав с помощью CLI - -Просматривать ACL объекта доступа можно с помощью CLI команды [`describe`](../reference/ydb-cli/commands/scheme-describe.md). diff --git a/ydb/docs/ru/core/security/toc_p.yaml b/ydb/docs/ru/core/security/toc_p.yaml index e585c95170cf..adc1a854600c 100644 --- a/ydb/docs/ru/core/security/toc_p.yaml +++ b/ydb/docs/ru/core/security/toc_p.yaml @@ -3,10 +3,6 @@ items: href: authentication.md - name: Авторизация href: authorization.md -- name: Группы - href: group.md -- name: Права - href: right.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/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/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) %} From 2139b3d0e0037afd683a751e6e13a7c0e6508e4a Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 10 Jan 2025 18:32:42 +0300 Subject: [PATCH 24/27] glossary --- ydb/docs/ru/core/concepts/glossary.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ydb/docs/ru/core/concepts/glossary.md b/ydb/docs/ru/core/concepts/glossary.md index 8aea2522e105..895a3226ce6c 100644 --- a/ydb/docs/ru/core/concepts/glossary.md +++ b/ydb/docs/ru/core/concepts/glossary.md @@ -273,6 +273,22 @@ Как и в файловых системах, **папка**, **каталог**, **folder** или **directory** является контейнером для других сущностей. В случае {{ ydb-short-name }}, эти сущности могут быть [таблицами](#table) (включая [внешние таблицы](#external-table)), [топиками](#topic), другими папками и т.д. +### Объект доступа {#object} + +Папки являются [объектом доступа](../security/authentication.md#object) в [авторизации](../security/authentication.md). У каждого объекта доступа есть список разрешений — ACL (Access Control List) — он хранит все предоставленные [субъектам доступа](#subject) (пользователям и группам) [права](#right) на объект. У каждого [объекта доступа](../security/authentication.md#object) есть [владелец объекта](../security/authentication.md#owner). +Более подробно об [авторизации](../security/authentication.md). + +### Субъект доступа {#subject} + +Субъект доступа — сущность, которая может запрашивать доступ к объектам доступа или выполнять определенные действия в системе. +Субъектом доступа может быть [пользователь](../security/authentication.md#user) или [группа](../security/authentication.md#group). +Более подробно об [субъектах доступа](../security/authentication.md#subject). + +### Право {#right} + +Право — сущность, отражающая разрешение [субъекту](#subject) выполнять конкретный набор операций в кластере или базе данных над конкретным [объектом](#folder). +Более подробно об [правах](../security/authentication.md#right). + ### Оптимизатор запросов {#optimizer} [**Оптимизатор запросов**](https://ru.wikipedia.org/wiki/Оптимизация_запросов_СУБД) — набор компонентов {{ ydb-short-name }}, отвечающих за преобразование логического представления запроса в конкретный физически исполнимый план получения запрошенного результата. Основная цель оптимизатора — выбрать среди всех возможных планов выполнения запроса достаточно эффективный с точки зрения прогнозируемого времени исполнения и потребления ресурсов кластера. Он описан более подробно в отдельной статье [{#T}](optimizer.md). From 60682c59a69a1e2c9f8575c56ccccbf79f5b4333 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 10 Jan 2025 18:49:24 +0300 Subject: [PATCH 25/27] fixes --- ydb/docs/ru/core/security/authorization.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index 9f253713230a..81eeb1199b6b 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -70,11 +70,13 @@ Права привязаны не пользователю, а к объекту доступа. +По умолчанию, права наследуются от родителей потомкам по дереву объектов доступа. + {% endnote %} ### Управление правами с помощью YQL -Для управления правами служат следующие YQL-команды: +Для управления правами служат следующие виды YQL запросов: * [{#T}](../yql/reference/syntax/grant.md). * [{#T}](../yql/reference/syntax/revoke.md). @@ -117,7 +119,9 @@ GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser ## Владелец объекта {#owner} -У каждого объекта доступа есть владелец, в том числе у кластера в целом и каждой базы данных. Владельцем объекта по умолчанию становится субъект доступа, создавший объект. +У каждого объекта доступа есть владелец. Владельцем объекта по умолчанию становится субъект доступа, создавший объект. + +Владелец объекта есть в том числе у кластера в целом и каждой базы данных. Для владельца не проверяются ACL права на данный объект. Он имеет полный набор прав на объект. From 00f810555956ca8f11bb4aa293e4921240fbae15 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 10 Jan 2025 19:01:38 +0300 Subject: [PATCH 26/27] fixes --- ydb/docs/ru/core/security/authentication.md | 2 +- ydb/docs/ru/core/security/authorization.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ydb/docs/ru/core/security/authentication.md b/ydb/docs/ru/core/security/authentication.md index 32df3d2c1857..cd49c2883ba2 100644 --- a/ydb/docs/ru/core/security/authentication.md +++ b/ydb/docs/ru/core/security/authentication.md @@ -33,7 +33,7 @@ ## Аутентификация по логину и паролю {#static-credentials} Данный вид доступа подразумевает наличие у каждого пользователя базы данных логина и пароля. -Логин пользователя может содержать только строчные буквы латинского алфавита и цифры. +Логин пользователя может содержать только строчные буквы латинского алфавита, цифры и символ `@`. Допускается использование пустого пароля. Логин пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом [Argon2](https://ru.wikipedia.org/wiki/Argon2). Доступ к этой таблице имеет только администратор системы. diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index 81eeb1199b6b..3598bbe0bde1 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -9,14 +9,14 @@ * [Право](#right) * [Владелец](#owner) -Независимо от метода аутентификации, авторизация всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информации об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. +Независимо от метода [аутентификации](https://ru.wikipedia.org/wiki/Аутентификация), [авторизация](https://ru.wikipedia.org/wiki/Авторизация) всегда выполняется на стороне {{ ydb-short-name }} на основе хранящейся в ней информации об объектах и правах доступа. Права доступа определяют набор доступных для выполнения операций. Авторизация выполняется на каждое действие пользователя: его права не кешируются, так как могут быть отозваны или предоставлены в любой момент времени. ## Объект доступа {#object} Объект доступа — узел дерева [директорий](../concepts/glossary.md#folder) (схемный объект, объект схемы), например: базы данных, директории, таблицы, представления, топики. -Директории организованы в иерархическую структуру объектов схемы и вложенных в них объектов: баз данных, таблиц, представлений, топиков. Директории могут содержать поддиректории, и такая вложенность может быть произвольной глубины. +Директории организованы в иерархическую структуру объектов схемы, то есть могут содержать поддиректории, и такая вложенность может быть произвольной глубины. ## Субъект доступа {#subject} @@ -29,7 +29,7 @@ Субъект доступа идентифицируется строкой вида `[@]`. Такая строка называется SID (Security Identifier). SID'ы записываются в правилах ACL на объектах схемы. -Суффикс `@` идентифицирует «источник пользователя» или «auth-домен», внутри которых гарантируется уникальность всех `login`. Например, в случае интеграции с LDAP имена пользователей будут `user1@ldap` и `user2@ldap`. +Суффикс `@` идентифицирует «источник пользователя» или «auth-домен», внутри которых гарантируется уникальность всех `login`. Например, в случае [аутентификации LDAP](authentication.md#ldap-auth-provider) имена пользователей будут `user1@ldap` и `user2@ldap`. Если указан `login` без суффикса, то имеются в виду пользователи, непосредственно созданные в кластере {{ ydb-short-name }}. ### Пользователь {#user} From 57abee9d190375b72ef1768df6a4bd40fd850614 Mon Sep 17 00:00:00 2001 From: azevaykin Date: Fri, 10 Jan 2025 20:11:04 +0300 Subject: [PATCH 27/27] fixes --- .../ydb-cli/commands/scheme-permissions.md | 2 +- ydb/docs/ru/core/security/authorization.md | 49 +++++++------------ 2 files changed, 20 insertions(+), 31 deletions(-) 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 index 047013ce0e6e..92ceed82cc77 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/ru/core/reference/ydb-cli/commands/scheme-permissions.md @@ -174,7 +174,7 @@ DATABASE-ADMINS:ydb.generic.manage {% note info %} -В текущей версии {{ ydb }} есть ограничение, что только непосредственно текущий владелец схемного объекта может сменить владельца. +В текущей версии {{ ydb }} есть ограничение, что только непосредственно пользователь - текущий владелец схемного объекта может сменить владельца. {% endnote %} diff --git a/ydb/docs/ru/core/security/authorization.md b/ydb/docs/ru/core/security/authorization.md index 3598bbe0bde1..481257d0da29 100644 --- a/ydb/docs/ru/core/security/authorization.md +++ b/ydb/docs/ru/core/security/authorization.md @@ -42,18 +42,34 @@ {% include [!](../_includes/do-not-create-users-in-ldap.md) %} -Отдельно выделяется пользователь `root`. Он создаётся при [первоначальном развёртывании кластера](../devops/manual/initial-deployment.md#initialize-cluster), в ходе которой ему нужно сразу [установить пароль](../devops/manual/initial-deployment.md#security-setup). +{% note info %} + +Отдельно выделяется пользователь `root` с максимальными правами. Он создаётся при первоначальном развёртывании кластера, в ходе которой ему нужно сразу установить пароль. В дальнейшем использование данной учетной записи не рекомендуется и следует завести пользователей с ограниченными правами. + +Подробнее про первоначальное развертывание: + +* [Ansible](../devops/ansible/initial-deployment.md) +* [Kubernetes](../devops/kubernetes/initial-deployment.md) +* [Вручную](../devops/manual/initial-deployment.md) + +{% endnote %} ### Группа {#group} Группа пользователей — именованное множество пользователей, предназначенное для упрощения конфигурации контроля доступа. За группой можно закрепить любые необходимые [права](#right) на произвольный набор [объектов доступа](#object). -Группа пользователей может быть пустой, когда в неё не входит ни один пользователь. - Любого пользователя можно включить в ту или иную группу доступа или исключить из неё. Как только пользователь включается в группу доступа, он получает все права на объекты базы данных, которые предоставлялись группе доступа. Так, с помощью групп доступа {{ ydb-short-name }} можно реализовать бизнес-роли пользовательских приложений, заранее настроив требуемые права доступа на нужные объекты. +{% note info %} + +Группа пользователей может быть пустой, когда в неё не входит ни один пользователь. + +Группы пользователей могут быть вложенными. + +{% endnote %} + Для создания, изменения и удаления групп есть следующие виды YQL запросов: * [{#T}](../yql/reference/syntax/create-group.md) @@ -81,20 +97,6 @@ * [{#T}](../yql/reference/syntax/grant.md). * [{#T}](../yql/reference/syntax/revoke.md). -В качестве имен прав доступа в этих командах можно использовать специфичные для {{ ydb-short-name }} права или соответствующие им ключевые слова. - -Пример использования c ключевым словом YQL: - -```yql -GRANT CREATE DIRECTORY ON `/Root/db1` TO testuser -``` - -Пример использования c именем {{ ydb-short-name }} права: - -```yql -GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser -``` - ### Управление правами с помощью CLI Для управления правами служат следующие CLI-команды: @@ -106,13 +108,6 @@ GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser * [clear](../reference/ydb-cli/commands/scheme-permissions.md#clear) * [list](../reference/ydb-cli/commands/scheme-permissions.md#list) -В CLI используется только стиль из столбца "{{ ydb-short-name }} право". -Например: - -```bash -{{ ydb-short-name }} scheme permissions grant -p "ydb.granular.create_directory" `/Root/db1` testuser -``` - ### Просмотр прав с помощью CLI Просматривать ACL объекта доступа можно с помощью CLI команды [`describe`](../reference/ydb-cli/commands/scheme-describe.md). @@ -127,12 +122,6 @@ GRANT "ydb.granular.create_directory" ON `/Root/db1` TO testuser Сменить владельца можно с помощью CLI команды [`chown`](../reference/ydb-cli/commands/scheme-permissions.md#chown). -Пример команды `chown`: - -```bash -{{ ydb-cli }} scheme permissions chown '/Root/db1' testuser -``` - ## Список разрешений {#acl} У каждого такого [объекта доступа](#object) есть список разрешений — ACL (Access Control List) — он хранит все предоставленные [субъектам доступа](#subject) (пользователям и группам) [права](#right) на объект.