Назначение прав и ролей пользователям

Пользователь, который создается вместе с кластером Managed Service for PostgreSQL, автоматически получает роль владельца (OWNER) первой базы данных в кластере. После этого вы можете создавать других пользователей и настраивать их права по своему усмотрению.

Атомарные полномочия в PostgreSQL называются привилегиями, группы полномочий — ролями. Подробнее об организации прав доступа читайте в документации PostgreSQL.

Чтобы назначить привилегию определенному пользователю, создайте его с помощью консоли управления, CLI или API Яндекс.Облака, затем выполните команду GRANT от имени владельца базы, например:

GRANT SELECT ON DATABASE db1 TO user2;

Чтобы назначить роль пользователю, используйте CLI или API Яндекс.Облака: назначение роли запросом GRANT отменяется при следующей операции с базой.

Изменить список ролей пользователя

Таким образом, чтобы добавить роль, запросите список имеющихся ролей с информацией о пользователе, добавьте нужную роль к списку и отправьте новый список в запросе. Аналогично, чтобы отозвать роль — отправьте запрос со списком ролей, в котором ненужной роли нет.

Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

Чтобы назначить роли пользователю кластера, передайте список нужных ролей в параметре --grants. Имеющиеся роли будут полностью перезаписаны: если вы хотите дополнить или уменьшить имеющийся список, сначала запросите текущие роли с информацией о пользователе командой yc managed-postgresql user get.

Чтобы назначить роли, выполните команду:

$ yc managed-postgresql user update <имя пользователя>
     --name <имя кластера>
     --grants="<роль1,роль2>"

Имя кластера можно запросить со списком кластеров в каталоге, имя пользователя — в списке пользователей.

Передать список необходимых ролей для пользователя можно с помощью метода update.

Имеющиеся роли будут полностью перезаписаны: если вы хотите дополнить или уменьшить имеющийся список, сначала запросите текущие роли с информацией о пользователе методом get.

Пример

Создание пользователя с правом только на чтение

Чтобы создать пользователя, который не может изменять данные в базе, но имеет доступ к данным:

  1. Создайте пользователя в кластере.

  2. От лица владельца БД выдайте новому пользователю привилегии SELECT и, при необходимости, USAGE на нужную базу данных или таблицу, например:

    GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO user2;
    GRANT USAGE ON SCHEMA myschema TO user2;