Назначение привилегий и ролей пользователям
Атомарные полномочия в PostgreSQL называются привилегиями, группы полномочий — ролями. Подробнее об организации прав доступа читайте в документации PostgreSQL.
Пользователь, создаваемый вместе с кластером Managed Service for PostgreSQL, является владельцем первой базы данных в кластере. Вы можете создавать других пользователей и настраивать их права по своему усмотрению:
- Изменить список ролей пользователя.
- Выдать привилегию пользователю.
- Отозвать привилегию у пользователя.
Изменить список ролей пользователя
Для назначения роли пользователю используйте CLI или API Yandex Cloud: назначение роли запросом GRANT
отменится при следующей операции с базой.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы назначить роли пользователю кластера, передайте список нужных ролей в параметре --grants
. Имеющиеся роли будут полностью перезаписаны: если вы хотите дополнить или уменьшить имеющийся список, сначала запросите текущие роли с информацией о пользователе командой yc managed-postgresql user get
.
Чтобы назначить роли, выполните команду:
$ yc managed-postgresql user update <имя пользователя> \
--grants=<роль1,роль2> \
--cluster-id <идентификатор кластера>
Имя кластера можно запросить со списком кластеров в каталоге, имя пользователя — со списком пользователей.
Чтобы назначить роли пользователю кластера:
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание PostgreSQL-кластера.
Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Найдите в описании кластера Managed Service for PostgreSQL блок
user
для нужного пользователя. -
Добавьте атрибут
grants
со списком нужных ролей:resource "yandex_mdb_postgresql_cluster" "<имя кластера>" { ... user { name = "<имя пользователя>" ... grants = [ "<роль1>","<роль2>" ] } }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- обновление — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?Добавьте к описанию кластера блок
timeouts
, например:resource "yandex_mdb_postgresql_cluster" "<имя кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } }
-
Выдать привилегию пользователю
- Подключитесь к базе данных с помощью учетной записи владельца базы данных.
- Выполните команду
GRANT
. Подробное описание синтаксиса команды смотрите в документации PostgreSQL.
Отозвать привилегию у пользователя
- Подключитесь к базе данных с помощью учетной записи владельца базы данных.
- Выполните команду
REVOKE
. Подробное описание синтаксиса команды смотрите в документации PostgreSQL.
Примеры
Добавить пользователя с правами только на чтение
Чтобы добавить в существующий кластер нового пользователя user2
с доступом только на чтение к базе данных db1
:
-
Создайте пользователя с именем
user2
. При этом выберите базы данных, к которым должен иметь доступ пользователь. -
Подключитесь к базе данных
db1
с помощью учетной записи владельца БД. -
Чтобы выдать права доступа только к таблице
Products
в схеме по умолчаниюpublic
, выполните команду:GRANT SELECT ON public.Products TO user2;
-
Чтобы выдать доступ ко всем таблицам схемы
myschema
, выполните команду:GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO user2; GRANT USAGE ON SCHEMA myschema TO user2;
Для отзыва выданных привилегий выполните команды:
REVOKE SELECT ON public.Products FROM user2;
REVOKE SELECT ON ALL TABLES IN SCHEMA myschema FROM user2;
REVOKE USAGE ON SCHEMA myschema FROM user2;