diff --git a/ydb/docs/en/core/reference/ydb-cli/commands/scheme-permissions.md b/ydb/docs/en/core/reference/ydb-cli/commands/scheme-permissions.md index 848bd86f4b0f..1e48f286bfc9 100644 --- a/ydb/docs/en/core/reference/ydb-cli/commands/scheme-permissions.md +++ b/ydb/docs/en/core/reference/ydb-cli/commands/scheme-permissions.md @@ -28,7 +28,7 @@ permissions Modify permissions All commands have an additional parameter, which is not critical for them: `--timeout ms` - a technical parameter that sets the server response timeout. -## grant, revoke +## grant, revoke {#grant-revoke} The `grant` and `revoke` commands allow you to establish and revoke, respectively, access rights to schema objects for a user or group of users. Essentially, they are analogues of the corresponding YQL [GRANT](../../../yql/reference/syntax/grant.md) and [REVOKE](../../../yql/reference/syntax/revoke.md) commands. @@ -51,7 +51,7 @@ Additional parameters `[options...]`: Each right must be passed as a separate parameter, for example: ```bash -{{ ydb-cli }} scheme permissions grant -p "ydb.access.grant" -p "ydb.generic.read" '/Root/db1/MyApp/Orders' testuser +{{ ydb-cli }} scheme permissions grant -p "ydb.access.grant" -p "ydb.generic.read" '/Root/db1/MyApp/Orders' testuser ``` ## set @@ -129,7 +129,7 @@ Parameters: For example, if you execute the command over the database state from the previous example [`list`](#list): ```bash -{{ ydb-cli }} scheme permissions clear '/Root/db1/MyApp' +{{ ydb-cli }} scheme permissions clear '/Root/db1/MyApp' ``` And then execute the `list` command again on the object `/Root/db1/MyApp`, you will get the following result: diff --git a/ydb/docs/ru/core/concepts/glossary.md b/ydb/docs/ru/core/concepts/glossary.md index fa60455417d0..67ff0ad53b21 100644 --- a/ydb/docs/ru/core/concepts/glossary.md +++ b/ydb/docs/ru/core/concepts/glossary.md @@ -323,7 +323,7 @@ ### Владелец {#access-owner} -**[Владелец](../security/authorization.md#owner)** - [субъект доступа](#access-subject) ([пользователь](#access-user) или [группа](#access-group)) имеющий полный объем прав на конкретный [объект доступа](#access-object). +**[Владелец](../security/authorization.md#owner)** - [субъект доступа](#access-subject) ([пользователь](#access-user) или [группа](#access-group)), являющийся владельцем конкретного [объект доступа](#access-object) и потому имеющий полный объем прав на него. ### Пользователь {#access-user} diff --git a/ydb/docs/ru/core/reference/configuration/index.md b/ydb/docs/ru/core/reference/configuration/index.md index fa4b410d6a12..f4942fbe7ea5 100644 --- a/ydb/docs/ru/core/reference/configuration/index.md +++ b/ydb/docs/ru/core/reference/configuration/index.md @@ -384,10 +384,11 @@ default_access: - +(ConnDB):USERS ``` +Ошибки в строках прав доступа фиксируются в логе, но не влияют на запуск кластера. Право доступа с ошибкой не будет добавлено. + || |# -Ошибки в строках прав доступа фиксируются в логе, но не влияют на запуск кластера. Право доступа с ошибкой не будет добавлено. [//]: # (TODO: требуется доработка, сейчас ошибка в формате приводит к падению процесса) @@ -430,7 +431,7 @@ default_access: Все три пустых списка дают возможности администратора любому пользователю системы. -Для защищённого развёртывания {{ ydb-short-name }} важно заранее определить модель прав и прописать в списках соответствующие группы. +Для защищённого развёртывания {{ ydb-short-name }} важно заранее определить модель управления доступом и прописать в списках соответствующие группы. {% endnote %} 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 0d11c72baa32..84611d40fcf7 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 @@ -28,7 +28,7 @@ permissions Modify permissions Все команды имеют дополнительный параметр, который для них не критичен: `--timeout ms` - технологический параметр, задающий таймаут на отклик сервера. -## grant, revoke +## grant, revoke {#grant-revoke} Команды `grant` и `revoke` позволяют установить и отозвать, соответственно, права доступа к объектам схемы для пользователя или группы пользователей. По сути, это аналоги соответствующих YQL-команд [GRANT](../../../yql/reference/syntax/grant.md) и [REVOKE](../../../yql/reference/syntax/revoke.md). @@ -51,7 +51,7 @@ permissions Modify permissions Каждое право нужно передавать отдельным параметром, например: ```bash -{{ ydb-cli }} scheme permissions grant -p "ydb.access.grant" -p "ydb.generic.read" '/Root/db1/MyApp/Orders' testuser +{{ ydb-cli }} scheme permissions grant -p "ydb.access.grant" -p "ydb.generic.read" '/Root/db1/MyApp/Orders' testuser ``` ## set @@ -111,8 +111,8 @@ user1:ydb.generic.read Структура результата состоит из трёх блоков: -- `Owner` — показывает владельца объекта схемы. -- `Permissions` — отображает список прав, выданных непосредственно на данный объект. +- `Owner` — показывает владельца объекта схемы. +- `Permissions` — отображает список прав, выданных непосредственно на данный объект. - `Effective permissions` — отображает список прав, фактически действующих на данный схемный объект с учётом правил наследования прав. Данный список также включает все права, отображаемые в секции `Permissions`. ## clear @@ -129,7 +129,7 @@ user1:ydb.generic.read Например, если над состоянием базы данных из предыдущего примера [`list`](#list) выполнить команду: ```bash -{{ ydb-cli }} scheme permissions clear '/Root/db1/MyApp' +{{ ydb-cli }} scheme permissions clear '/Root/db1/MyApp' ``` И затем заново выполнить команду `list` на объект `/Root/db1/MyApp`, то получим следующий результат: diff --git a/ydb/docs/ru/core/security/access-rights.md b/ydb/docs/ru/core/security/access-rights.md new file mode 100644 index 000000000000..0c4d9a0321c9 --- /dev/null +++ b/ydb/docs/ru/core/security/access-rights.md @@ -0,0 +1 @@ +{% include [{#T}](../yql/reference/_includes/permissions_list.md) %} diff --git a/ydb/docs/ru/core/security/configure-cluster-admins.md b/ydb/docs/ru/core/security/configure-cluster-admins.md new file mode 100644 index 000000000000..295bb993ddb8 --- /dev/null +++ b/ydb/docs/ru/core/security/configure-cluster-admins.md @@ -0,0 +1,199 @@ +# Администратор кластера + +Администратор кластера (администратор СУБД) -- это пользователь, обладающий максимальными административными возможностями как в рамках всего кластера, так и на уровне пользовательских баз данных. + +Администратор кластера может: + +- управлять пользователями и группами как уровня кластера, так и уровня отдельных баз (создание, удаление, изменение, блокировка) +- наделять пользователей возможностями администратора кластера +- наделять пользователей возможностями администратора отдельной базы +- управлять конфигурациями кластера и отдельных баз +- запускать и оставливать кластер +- управлять базами данных (создание, удаление, изменение, остановка, блокировка TODO: подробнее) +- а также выполнять любые другие административные действия с кластером и базами данных + +## Понятие администратора кластера в {{ ydb-short-name }} + +Администратором кластера является пользователь, который имеет административный [уровень доступа](../concepts/glossary.md#access-level) на кластере и полные [права доступа](../concepts/glossary.md#access-control-list) на корне кластера. + +[Уровни доступа](../concepts/glossary.md#access-level) настраиваются в конфигурации кластера, [секция `security_config`](../reference/configuration/index.md#security-access-levels). + +Права доступа назначаются на корень кластера средствами {{ ydb-short-name }}: YQL [командой `GRANT`](../yql/reference/syntax/grant.md) или CLI [командой `scheme permissions grant`](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke)). Список схемных прав доступа приведён в статье [{#T}](./access-rights.md). + +## Требуемая конфигурация {#cluster-admin-setup} + +1. На уровне кластера существует группа администраторов кластера. +2. Группа администраторов кластера включена в списки уровней доступа [ `viewer_allowed_sids`, `monitoring_allowed_sids`, `administration_allowed_sids`](../reference/configuration/index.md#security-access-levels). +3. Группе администраторов кластера на корне кластера выданы [права доступа `ydb.generic.full`](./access-rights.md). + +{% note info %} + +Рассматривается управление кластером группой администраторов. Оставить управление кластера единственному [пользователю](../concepts/glossary.md#access-user)-администратору (или суперпользователю) может быть ненадёжно и небезопасно. + +{% endnote %} + +## Инструкция общая {#setup-general} + +По умолчанию при первом запуске {{ ydb-short-name }} [автоматически создаёт](../security/builtin-security.md) суперпользователя `root`, определённый набор групп и необходимые им права на корне кластера. Такая автоматическая настройка называется [{#T}](../security/builtin-security.md). Если конкретная инсталляция требует реализации иной модели управления доступом на схеме, то следует отключить встроенную настройку безопасности ([флаг `disable_builtin_security`](../reference/configuration/index.md#domains-config)) и самостоятельно определить и собрать нужный набор групп и прав. + +Настоящая инструкция фокусируется на конфигурации группы администраторов кластера, и создание произвольной модели управления доступом здесь не рассматривается. + +Инструкция предполагает [обязательную аутентификацию](../reference/configuration/index.md#security-auth) пользователей. + +Для простоты, в инструкции используются те же имена пользователей и групп, что и в [инструкции со встроенной настройкой безопасности](#setup-over-builtin-security): + +- корень кластера `/Root` +- суперпользователь `root` +- группа администраторов кластера `ADMINS` +- администраторы кластера `cluster-admin-1`, `cluster-admin-2`, `cluster-admin-3` + +При настоящей настройке имена кластера, пользователей и групп могут быть другими. + +Создание и настройка администраторов кластера по шагам: + +1. Создать суперпользователя, группу администраторов кластера и наделить их административными правами. + + {% note warning %} + + Этот шаг выполняется до первого старта кластера, на [этапе подготовки конфигурационного файла](../devops/manual/initial-deployment.md#config). + + {% endnote %} + + [Конфигурационный файл](../reference/configuration/index.md) кластера, [секция `security_config`](../reference/configuration/index.md#security-config): + + ```yaml + domains_config: + ... + disable_builtin_security: true + security_config: + # режим обязательной аутентификации + enforce_user_token_requirement: true + + # пользователи, группы, права доступа + default_users: + - name: root + - password: "<пароль-суперпользователя>" + default_groups: + - name: ADMINS + - members: + - root + default_access: + - "+F:root" + - "+F:ADMINS" + + # уровни доступа + viewer_allowed_sids: + - root + - ADMINS + monitoring_allowed_sids: + - root + - ADMINS + administration_allowed_sids: + - root + - ADMINS + auth_config: + use_builtin_auth: false + ``` + + {% note info %} + + В режиме обязательной аутентификации важно описать суперпользователя и его права до первого старта кластера. Иначе кластер запустится в состоянии, когда его будет невозможно использовать. + + Прочие действия можно было бы выполнить от имени суперпользователя на уже работающем кластере, но тогда для распространения изменений могли бы потребоваться дополнительные рестарты кластера. + + {% endnote %} + +2. Запустить кластер + + Система безопасности кластера инициализируется в момент первого старта. + + TODO: сослаться на запуск кластера разными описанными в документации способами. Но непосредственно с данной инструкцией совместим только devops/manual/initial-deployment.md: ansible поддерживает, судя по описанию, только донастройку после, развёртывание в k8s вообще затрагивает вопросы безопасности. + +3. Передать владение корнем кластера группе администраторов кластера: + + ```bash + {{ ydb-cli }} --user root --no-password -d '/Root' scheme permissions chown /Root ADMINS + ``` + +4. Создать пользователей-будущих администраторов кластера + + Пусть, для примера, администраторами кластера должны быть пользователи `cluster-admin-1`, `cluster-admin-2`, `cluster-admin-3`. + + Тогда от имени пользователя `root` необходимо выполнить: + + [//]: # (TODO: сначала залогиниться, а потом с токеном уже делать остальные команды -- когда ydb login будет описана) + + [//]: # (TODO: а какой корень кластера по-умолчанию?) + + ```bash + {{ ydb-cli }} --user root --no-password -d '/Root' yql -s ' + CREATE USER `cluster-admin-1` PASSWORD `<пароль-1>`; + CREATE USER `cluster-admin-2` PASSWORD `<пароль-2>`; + CREATE USER `cluster-admin-3` PASSWORD `<пароль-3>` + ' + ``` + + (`<пароль-1>`, `<пароль-2>`, `<пароль-3>` -- места для подстановки строк настоящих паролей) + +5. Добавить пользователей в группу администраторов кластера: + + ```bash + {{ ydb-cli }} --user root --no-password -d '/Root' yql -s ' + ALTER GROUP `ADMINS` ADD + `cluster-admin-1`, + `cluster-admin-2`, + `cluster-admin-3` + ' + ``` + +После выполнения данной инструкции новые администраторы кластера способны выполнять любые административные операции с {{ ydb-short-name }}. + +Суперпользователь `root` был нужен для выполнения данной инструкции и при дальнейшем администрировании кластера его можно больше не использовать. + +[//]: # (TODO: возможно предложить блокировку root'а, когда блокировка локальных пользователей будет описана) + +## Инструкция со встроенной настройкой безопасности {#setup-over-builtin-security} + +По умолчанию при первом старте кластера {{ ydb-short-name }} [автоматически создаёт](../security/builtin-security.md) суперпользователя `root`, определённый набор групп и необходимые им права на корне кластера. Среди всех создаваемых по умолчанию групп, группы `ADMINS` и `DATABASE-ADMINS` предназначены для администраторов кластера. + +[//]: # (TODO: привести или сослаться на конфигурацию security_config, эквивалентную встроенной настройке) + +Чтобы `root` и группы `ADMINS` и `DATABASE-ADMINS` выполняли своё предназначение, их необходимо наделить административным [уровнем доступа](../concepts/glossary.md#access-level). + +Инструкция предполагает [обязательную аутентификацию](../reference/configuration/index.md#security-auth) пользователей. + +Настройка администраторов кластера по шагам: + +1. Наделить административными правами суперпользователя `root` и группы `ADMINS`, `DATABASE-ADMINS`. + + {% note warning %} + + До первого старта кластера, на [этапе подготовки конфигурационного файла](../devops/manual/initial-deployment.md#config). + + {% endnote %} + + [Конфигурационный файл](../reference/configuration/index.md) кластера, [секция `security_config`](../reference/configuration/index.md#security-config): + + ```yaml + domains_config: + ... + security_config: + # режим обязательной аутентификации + enforce_user_token_requirement: true + + # уровни доступа + viewer_allowed_sids: + - root + - ADMINS + - DATABASE-ADMINS + monitoring_allowed_sids: + - root + - ADMINS + - DATABASE-ADMINS + administration_allowed_sids: + - root + - ADMINS + - DATABASE-ADMINS + ``` + +Далее продолжать по шагам 2-5 [общей инструкции](#setup-general). diff --git a/ydb/docs/ru/core/security/configure-database-admins.md b/ydb/docs/ru/core/security/configure-database-admins.md new file mode 100644 index 000000000000..b947a6d0e75d --- /dev/null +++ b/ydb/docs/ru/core/security/configure-database-admins.md @@ -0,0 +1,90 @@ +# Администратор базы данных + +Администратор базы данных (БД) -- это пользователь, обладающий административными возможностями в рамках некоторой базы данных: + +Администратор базы может: + +- управлять пользователями и группами базы (создание, удаление, изменение, блокировка) +- управлять правами доступа пользователей к объектам базы данных +- управлять конфигурацией базы +- выполнять бекап и восстановление базы +- выполнять прочие административными действия в пределах базы + +Администратор базы не может: + +- управлять учетными записями администраторов кластера или пользователей других баз +- создавать других администраторов базы (TODO: как это?) +- управлять конфигурацией кластера или других баз +- управлять правами на объектах выше уровня базы или в других базах + +## Понятие администратора базы данных в {{ ydb-short-name }} + +Администратором базы данных является пользователь, который является [владельцем](../concepts/glossary.md#access-owner) базы данных. + +База данных определяется своим путём в схеме кластера, владелец этого пути (пользователь или группа) является владельцем базы. + +## Требуемая конфигурация {#database-admin-setup} + +1. На уровне базы существует группа администраторов базы данных. +2. Группа администраторов базы данных является владельцем корня базы данных. + +{% note info %} + +Рассматривается управление базой группой администраторов. Оставить управление базой единственному [пользователю](../concepts/glossary.md#access-user)-администратору (или администраторам кластера) может быть ненадёжно или неудобно. + +{% endnote %} + +## Инструкция + +Пусть для примера: + +- путь базы данных -- `/Root/example-db`; +- группа администраторов базы данных -- `DB-ADMINS`; +- администраторы базы данных -- пользователи `db-admin-1`, `db-admin-2`, `db-admin-3`. + +На настоящем кластере имена могут быть другими. + +Создаёт и запускает базу данных [администратор кластера](./configure-cluster-admins.md), он же настраивает администраторов базы данных. + +Создание и настройка администраторов базы данных по шагам: + +1. Создать базу данных + + TODO: См. devops/manual/initial-deployment.md или ansible-install-steps.md. + + После создания владельцем базы данных `/Root/db` будет создавший её администратор кластера. + +2. Запустить базу данных + + TODO: Сослаться на запуск нод базы разными описанными в документации способами. + +3. Создать в базе группу администраторов базы + + ```bash + {{ ydb-cli }} --user cluster-admin-1 --password `<пароль>` -d '/Root/example-db' yql -s ' + CREATE USER `db-admin-1` PASSWORD `<пароль-1>`; + CREATE USER `db-admin-2` PASSWORD `<пароль-2>`; + CREATE USER `db-admin-3` PASSWORD `<пароль-3>`; + ' + ``` + + (`<пароль-1>`, `<пароль-2>`, `<пароль-3>` -- места для подстановки строк настоящих паролей) + +4. Добавить пользователей в группу администраторов базы + + ```bash + {{ ydb-cli }} --user cluster-admin-1 --password `<пароль>` -d '/Root/example-db' yql -s ' + ALTER GROUP `DB-ADMINS` ADD + `db-admin-1`, + `db-admin-2`, + `db-admin-3` + ' + ``` + +5. Передать владение базой группе администраторов базы: + + ```bash + {{ ydb-cli }} --user cluster-admin-1 --password `<пароль>` -d '/Root/example-db' scheme permissions chown `/Root/example-db` DB-ADMINS + ``` + +После выполнения данной инструкции новые администраторы базы данных способны выполнять административные операции со своей базой. diff --git a/ydb/docs/ru/core/security/index.md b/ydb/docs/ru/core/security/index.md index 9d3851d0601b..039faa470b8c 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -1,19 +1,22 @@ # {{ ydb-short-name }} для инженеров по безопасности -В этом разделе документации {{ ydb-short-name }} рассматриваются аспекты работы с {{ ydb-short-name }}, связанные с безопасностью. Также он будет полезнен для целей обеспечения compliance. +В этом разделе документации {{ ydb-short-name }} рассматриваются аспекты работы с {{ ydb-short-name }}, связанные с безопасностью. Также он будет полезен для целей обеспечения compliance. Основные материалы: - [{#T}](authentication.md) - [{#T}](authorization.md) - [{#T}](builtin-security.md) +- [{#T}](configure-cluster-admins.md) +- [{#T}](configure-database-admins.md) - [{#T}](audit-log.md) +- [{#T}](access-rights.md) +- [{#T}](short-access-control-notation.md) - Шифрование: - [{#T}](encryption/data-at-rest.md) - [{#T}](encryption/data-in-transit.md) -- [{#T}](short-access-control-notation.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 de2af6df02d6..b14e2e062b78 100644 --- a/ydb/docs/ru/core/security/toc_p.yaml +++ b/ydb/docs/ru/core/security/toc_p.yaml @@ -5,6 +5,20 @@ items: href: authorization.md - name: Встроенная настройка безопасности href: builtin-security.md +- name: Привилегированные пользователи + expanded: true + items: + - name: Администратор кластера + href: configure-cluster-admins.md + - name: Администратор баз данных + href: configure-database-admins.md +- name: Права доступа + expanded: true + items: + - name: Список имён + href: access-rights.md + - name: Краткая запись + href: short-access-control-notation.md - name: Аудитный лог href: audit-log.md - name: Шифрование @@ -12,5 +26,3 @@ items: include: mode: link path: encryption/toc_p.yaml -- name: Краткая запись управления доступом - href: short-access-control-notation.md diff --git a/ydb/docs/ru/core/yql/reference/_includes/permissions_list.md b/ydb/docs/ru/core/yql/reference/_includes/permissions_list.md index 08ceae13ba4c..575b767a2d55 100644 --- a/ydb/docs/ru/core/yql/reference/_includes/permissions_list.md +++ b/ydb/docs/ru/core/yql/reference/_includes/permissions_list.md @@ -1,15 +1,17 @@ ## Права доступа {#permissions-list} В качестве имён прав доступа можно использовать имена {{ ydb-short-name }} прав или соответствующие им ключевые слова YQL. -В таблице ниже перечислены возможные имена прав. + +[//]: # (TODO: не получается поставить ссылку на concepts/glossary.md#access-right) {{ ydb-short-name }} право | Ключевое слово YQL | Описание --- | --- | --- -Права уровня баз данных -`ydb.database.connect` | `CONNECT` | Право подключаться к базе данных +*Права уровня кластера* `ydb.database.create` | `CREATE` | Право создавать новые базы данных в кластере `ydb.database.drop` | `DROP` | Право удалять базы данных в кластере -Элементарные права на объекты базы данных +*Права уровня базы данных* +`ydb.database.connect` | `CONNECT` | Право подключаться к базе данных +*Элементарные права уровня объектов схемы* `ydb.granular.select_row` | `SELECT ROW` | Право читать строки из таблицы (select), читать сообщения сообщения из топиков `ydb.granular.update_row` | `UPDATE ROW` | Право обновлять строки в таблице (insert, update, insert, erase), писать сообщения в топики `ydb.granular.erase_row` | `ERASE ROW` | Право удалять строки из таблицы @@ -19,9 +21,9 @@ `ydb.granular.remove_schema` | `REMOVE SCHEMA` | Право удалять объекты (директории, таблицы, топики), которые были созданы посредством использования прав `ydb.granular.describe_schema` | `DESCRIBE SCHEMA` | Право просмотра имеющихся прав доступа (ACL) на объект доступа, просмотра описания объектов доступа (директории, таблицы, топики) `ydb.granular.alter_schema` | `ALTER SCHEMA` | Право изменять объекты доступа (директории, таблицы, топики), в том числе права пользователей на объекты доступа -Дополнительные флаги -`ydb.access.grant` | `GRANT` | Право предоставлять или отзывать права у других пользователей в объёме, не превышающем текущий объём прав пользователя на объекте доступа -Права, основанные на других правах +*Право передачи прав* +`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` @@ -37,15 +39,45 @@ {% note info %} -Права `ydb.database.connect`, `ydb.granular.describe_schema`, `ydb.granular.select_row`, `ydb.granular.update_row` необходимо рассматривать как слои прав. +Права доступа следует рассматривать как слои дополнительных разрешений: для изменения объекта помимо права на изменение требуются права на доступ к базе и на чтение. + +{% endnote %} ```mermaid -graph TD; - ydb.database.connect --> ydb.granular.describe_schema; - ydb.granular.describe_schema --> ydb.granular.select_row; - ydb.granular.select_row --> ydb.granular.update_row; +--- +config: + flowchart: + # guard long node labels from wrapping or clipping + - wrappingWidth: 500 # default is 200 +--- +graph BT + ydb.database.connect --> ydb.granular.describe_schema + + ydb.granular.describe_schema --> ydb.granular.select_row & create_schema & ydb.granular.remove_schema & ydb.granular.alter_schema + + ydb.granular.select_row --> ydb.granular.update_row & ydb.granular.erase_row + + ydb.database.connect["`ydb.database.connect`"] + ydb.granular.describe_schema["`ydb.granular.describe_schema`"] + create_schema["`ydb.granular.create_{directory,table,queue}`"] + ydb.granular.remove_schema["`ydb.granular.remove_schema`"] + ydb.granular.alter_schema["`ydb.granular.alter_schema`"] + ydb.granular.select_row["`ydb.granular.select_row`"] + ydb.granular.update_row["`ydb.granular.update_row`"] + ydb.granular.erase_row["`ydb.granular.erase_row`"] ``` -Например, для изменения строк необходимо не только право `ydb.granular.update_row`, но и все вышележащие права. +Например: -{% endnote %} +1. для изменения данных в таблицах нужны права: + + + `ydb.granular.update_row` + + `ydb.granular.select_row` + + `ydb.granular.describe_schema` + + `ydb.database.connect` + +2. для изменения объекта схемы нужны права: + + + `ydb.granular.alter_schema` + + `ydb.granular.describe_schema` + + `ydb.database.connect`