[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for PostgreSQL](../index.md) > [Концепции](index.md) > Назначение ролей

# Назначение ролей PostgreSQL

Сервис Managed Service for PostgreSQL не дает доступа к [предопределенным ролям](https://www.postgresql.org/docs/current/predefined-roles.html). Вместо этого он предоставляет специальные роли:

* [mdb_read_all_data](#mdb_read_all_data) — роль для чтения (`SELECT`) всех данных в базе данных.
* [mdb_write_all_data](#mdb_write_all_data) — роль для изменения (`INSERT`, `UPDATE`, `DELETE`) всех данных в базе данных, **но без прав на выполнение операций `SELECT`**.
* [mdb_superuser](#mdb_superuser) — для пользователей, которые не являются владельцами базы данных, но должны управлять привилегиями так же, как владельцы.
* [mdb_admin](#mdb-admin) — для пользователей, которые не являются владельцами базы данных, но должны получать административные привилегии.
* [mdb_monitor](#mdb-monitor) — для пользователей, которые должны читать различные параметры конфигурации, статистику и другую системную информацию.
* [mdb_replication](#mdb-replication) — для пользователей, которые должны иметь возможность выполнять логическую репликацию.

{% note info %}

В PostgreSQL роли могут включать в себя другие роли. Пользователь (то есть роль, которая может авторизоваться в базе данных) может быть членом одной или нескольких других ролей и получать их права. [Подробнее о членстве в ролях](https://www.postgresql.org/docs/current/sql-grant.html).

{% endnote %}

Чтобы назначить роль пользователю, используйте [интерфейсы Yandex Cloud](../operations/grant.md): назначение роли запросом `GRANT` отменяется при следующей операции с базой.

{% note info %}

В Managed Service for PostgreSQL не предусмотрено создание пользовательских ролей. Права пользователя определяются совокупностью назначенных ему привилегий.

{% endnote %}

## Роль mdb_read_all_data {#mdb_read_all_data}

Роль `mdb_read_all_data` предоставляет права **только** на чтение всех пользовательских данных (DQL: `SELECT`) в базе данных во всех схемах (кроме системных каталогов).

{% note info %}

Роль `mdb_read_all_data` является более безопасной альтернативой стандартной роли PostgreSQL [pg_read_all_data](https://www.postgresql.org/docs/current/predefined-roles.html), поскольку не предоставляет доступ к системным каталогам (`pg_catalog`). Это исключает возможность чтения конфиденциальной системной информации.

{% endnote %}

## Роль mdb_write_all_data {#mdb_write_all_data}

Роль `mdb_write_all_data` предоставляет права **только** на изменение всех пользовательских данных (DML: `INSERT`, `UPDATE`, `DELETE`) в базе данных во всех схемах (кроме системных каталогов).

{% note info %}

Роль `mdb_write_all_data` является более безопасной альтернативой стандартной роли PostgreSQL [pg_write_all_data](https://www.postgresql.org/docs/current/predefined-roles.html), поскольку не предоставляет доступ к системным каталогам (`pg_catalog`). Это исключает возможность изменения системной конфигурации и метаданных.

{% endnote %}

{% note warning %}

Роль `mdb_write_all_data` предоставляет права только на изменение данных, **но не включает**:

* права на чтение данных (DQL: `SELECT`)
* управление структурой и объектами базы данных (DDL: `CREATE`, `DROP` и др.).

Для полного доступа к данным (**без DDL**, но с `SELECT`) необходимо также иметь роль `mdb_read_all_data` (автоматически запрашивается как дочерняя IDM-роль вместе с `mdb_write_all_data`).

{% endnote %}

## Роль mdb_superuser {#mdb_superuser}

Роль `mdb_superuser` позволяет управлять привилегиями на объекты в базе данных.

## Роль mdb_admin {#mdb-admin}

Роль `mdb_admin` включает в себя следующие привилегии:

* Использование привилегий предопределенных ролей:
  * `pg_monitor`
  * `pg_signal_backend`
    Подробнее о предопределенных ролях в [документации](https://www.postgresql.org/docs/current/predefined-roles.html) PostgreSQL.
* Использование подписки для логической репликации (`CREATE | DROP | ALTER SUBSCRIPTION`).
* Использование расширений:
  * `dblink`
  * `pg_repack`
  * `postgres_fdw`
  * `pg_cron`
* Использование специфических функций расширений:
  * `pg_stat_kcache_reset()` из расширения `pg_stat_kcache`;
  * `pg_stat_reset()`, `pg_stat_statements_reset()` из расширения `pg_stat_statements`.

## Роль mdb_monitor {#mdb-monitor}

Роль `mdb_monitor` включает в себя следующие привилегии:

* Чтение и выполнение различных представлений и функций для мониторинга.
* Использование расширений:
  * `pg_stat_statements`
* Использование функций для работы с обычными файлами:
  * `pg_ls_logdir()`
  * `pg_ls_waldir()`
  * `pg_ls_archive_statusdir()`
  * `pg_ls_tmpdir ()`

## Роль mdb_replication {#mdb-replication}

Роль `mdb_replication` включает в себя следующие привилегии:

* Подключение к кластеру с использованием протокола логической репликации (`replication=database`).
* Использование функций репликации:
  * `pg_create_logical_replication_slot()`
  * `pg_drop_replication_slot()`