Управление пользователями PostgreSQL
Вы можете добавлять и удалять пользователей, а также управлять их индивидуальными настройками.
Важно
С помощью команд SQL вы можете назначать пользователям привилегии, но не можете добавлять и изменять пользователей. Подробнее см. в разделе Назначение привилегий и ролей пользователям.
Получить список пользователей
- Перейдите в сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера, затем выберите вкладку Пользователи.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы получить список пользователей кластера, выполните команду:
yc managed-postgresql user list \
--cluster-name <имя_кластера>
Имя кластера можно запросить со списком кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.List и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/users'Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService.List и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.UserService.ListИдентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Создать пользователя
Важно
Для новых пользователей привилегия на создание таблиц в схеме public зависит от версии PostgreSQL:
- 14 и ниже — привилегия выдается автоматически и отозвать ее нельзя.
- 15 и выше — привилегию необходимо предоставить пользователю вручную.
-
Перейдите в сервис Managed Service for PostgreSQL.
-
Нажмите на имя нужного кластера и выберите вкладку Пользователи.
-
Нажмите кнопку Создать пользователя.
-
Введите имя пользователя базы данных.
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin,repl,monitor,postgres,mdb_admin,mdb_monitor,mdb_replicationзарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя. -
Выберите, как задать пароль:
-
Ввести вручную — ввести свой пароль. Длина пароля — от 8 до 128 символов.
-
Сгенерировать — сгенерировать пароль с помощью сервиса Connection Manager.
Чтобы увидеть пароль, на странице кластера выберите вкладку Пользователи и нажмите Посмотреть пароль в строке нового пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется роль
lockbox.payloadViewer. -
-
Выберите тип защиты от удаления.
Возможные значения:
- Как у кластера.
- Включена.
- Выключена.
-
Выберите одну или несколько баз данных, к которым должен иметь доступ пользователь:
- В поле База данных нажмите значок
справа от выпадающего списка. - Выберите базу данных из выпадающего списка.
- Повторите два предыдущих шага, пока не будут выбраны все требуемые базы данных.
- Чтобы удалить базу, добавленную по ошибке, нажмите значок
справа от имени базы.
- В поле База данных нажмите значок
-
Задайте настройки СУБД для пользователя.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы создать пользователя в кластере, выполните команду:
yc managed-postgresql user create <имя_пользователя> \
--cluster-name <имя_кластера> \
--password=<пароль> \
--permissions=<список_баз> \
--conn-limit=<максимальное_количество_соединений>
Где:
-
cluster-name— имя кластера. -
password— пароль для пользователя. Длина пароля — от 8 до 128 символов.Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо
--password=<пароль>укажите--generate-password.Чтобы увидеть пароль, в консоли управления
выберите нужный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нового пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется рольlockbox.payloadViewer. -
permissions— список баз, к которым пользователь должен иметь доступ. -
conn-limit— максимальное количество соединений для пользователя.
В этой команде указаны только основные настройки пользователя.
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания pg_), цифры или подчеркивания. Максимальная длина имени 63 символа.
Имена admin, repl, monitor, postgres, mdb_admin, mdb_monitor, mdb_replication зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.
Чтобы задать настройки СУБД для пользователя, воспользуйтесь параметрами, описанными в разделе Пользовательские настройки.
Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации пользователей кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Добавьте ресурс
yandex_mdb_postgresql_user:resource "yandex_mdb_postgresql_user" "<имя_пользователя>" { cluster_id = "<идентификатор_кластера>" name = "<имя_пользователя>" password = "<пароль>" grants = [ "<роль1>","<роль2>" ] login = <разрешение_на_вход_в_БД> conn_limit = <максимальное_количество_соединений> deletion_protection = <защита_от_удаления> settings = { <настройки_БД> } permission { database_name = "<имя_БД>" } }Где:
login— разрешение на вход в БД:trueилиfalse.deletion_protection— защита пользователя от удаления:true,falseилиunspecified(наследует значение от кластера). Значение по умолчанию —unspecified.
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin,repl,monitor,postgres,mdb_admin,mdb_monitor,mdb_replicationзарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.Длина пароля — от 8 до 128 символов.
Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо
password = "<пароль>"укажитеgenerate_password = true.Чтобы увидеть пароль, в консоли управления
выберите нужный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нового пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется рольlockbox.payloadViewer. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.Create и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/users' \ --data '{ "userSpec": { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "databaseName": "<имя_БД>" } ], "connLimit": "<максимальное_количество_подключений_к_БД>", "deletionProtection": <защита_от_удаления> } }'Где
userSpec— настройки нового пользователя БД:-
name— имя пользователя.Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin,repl,monitor,postgres,mdb_admin,mdb_monitor,mdb_replicationзарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя. -
password— пароль пользователя. Длина пароля — от 8 до 128 символов.Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо
"password": "<пароль_пользователя>"укажите"generatePassword": true.Чтобы увидеть пароль, в консоли управления
выберите нужный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нового пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется рольlockbox.payloadViewer. -
permissions.databaseName— массив баз данных, к которым должен иметь доступ пользователь. Каждый элемент массива соответствует отдельной БД. -
connLimit— максимальное количество подключений к БД для пользователя. -
deletionProtection— защита пользователя от удаления:true,falseилиunspecified(наследует значение от кластера). Значение по умолчанию —unspecified.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService.Create и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_spec": { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "database_name": "<имя_БД>" } ], "conn_limit": "<максимальное_количество_подключений_к_БД>", "deletion_protection": <защита_от_удаления> } }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.UserService.CreateГде
user_spec— настройки нового пользователя БД:-
name— имя пользователя.Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin,repl,monitor,postgres,mdb_admin,mdb_monitor,mdb_replicationзарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя. -
password— пароль пользователя. Длина пароля — от 8 до 128 символов.Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо
"password": "<пароль_пользователя>"укажите"generate_password": true.Чтобы увидеть пароль, в консоли управления
выберите созданный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нового пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется рольlockbox.payloadViewer. -
permissions.database_name— массив баз данных, к которым должен иметь доступ пользователь. Каждый элемент массива соответствует отдельной БД. -
conn_limit— максимальное количество подключений к БД для пользователя. -
deletion_protection— защита пользователя от удаления:true,falseилиunspecified(наследует значение от кластера). Значение по умолчанию —unspecified.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примечание
Сразу после создания пользователь получает только привилегию CONNECT для выбранных баз данных, и не может выполнять никакие операции с базами данных. Чтобы дать пользователю доступ к базам, назначьте ему нужные привилегии или роли.
Изменить пароль
-
Перейдите в сервис Managed Service for PostgreSQL.
-
Нажмите на имя нужного кластера и выберите вкладку Пользователи.
-
Нажмите значок
и выберите пункт Изменить пароль. -
Выберите, как задать новый пароль:
-
Ввести вручную — ввести свой пароль. Длина пароля — от 8 до 128 символов.
-
Сгенерировать — сгенерировать пароль с помощью сервиса Connection Manager.
-
-
Нажмите кнопку Изменить.
Чтобы увидеть новый пароль, на странице кластера выберите вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Новая версия пароля отмечается как Текущая.
Для просмотра паролей требуется роль
lockbox.payloadViewer.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы изменить пароль пользователя, выполните команду:
yc managed-postgresql user update <имя_пользователя> \
--cluster-name=<имя_кластера> \
--password=<новый_пароль>
Длина пароля — от 8 до 128 символов.
Новый пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо --password=<новый_пароль> укажите --generate-password.
Чтобы увидеть новый пароль, в консоли управления
Для просмотра паролей требуется роль lockbox.payloadViewer.
Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации пользователей кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Найдите ресурс
yandex_mdb_postgresql_userнужного пользователя. -
Измените значение поля
password:resource "yandex_mdb_postgresql_user" "<имя_пользователя>" { ... name = "<имя_пользователя>" password = "<новый_пароль>" ... }Длина пароля — от 8 до 128 символов.
Новый пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо
password = "<новый_пароль>"укажитеgenerate_password = true.Чтобы увидеть новый пароль, в консоли управления
выберите кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Новая версия пароля отмечается как Текущая.Примечание
Если старый пароль был сгенерирован, его нельзя перегенерировать с помощью Terraform из-за ограничений провайдера.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.Update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "password", "password": "<новый_пароль>" }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
password— новый пароль. Длина пароля — от 8 до 128 символов.Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого измените содержимое поля
data:{ "updateMask": "generatePassword", "generatePassword": true }Чтобы увидеть новый пароль, в консоли управления
выберите кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Новая версия пароля отмечается как Текущая.Для просмотра паролей требуется роль
lockbox.payloadViewer.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService.Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "update_mask": { "paths": [ "password" ] }, "password": "<новый_пароль>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.UserService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае передается только один параметр.
-
password— новый пароль. Длина пароля — от 8 до 128 символов.Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого измените содержимое параметра
d:{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "update_mask": { "paths": [ "generate_password" ] }, "generate_password": true }Чтобы увидеть новый пароль, в консоли управления
выберите кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Новая версия пароля отмечается как Текущая.Для просмотра паролей требуется роль
lockbox.payloadViewer.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Изменить настройки пользователя
Примечание
Привилегии и роли PostgreSQL не затрагиваются этими настройками и настраиваются отдельно.
О том, как задать привилегии и роли для пользователя, читайте в разделе Назначение привилегий и ролей пользователям.
- Перейдите в сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите вкладку Пользователи.
- Нажмите значок
и выберите пункт Настроить. - Настройте права пользователя на доступ к определенным базам данных:
- Чтобы предоставить доступ к требуемым базам данных:
- В поле База данных нажмите значок
справа от выпадающего списка. - Выберите базу данных из выпадающего списка.
- Повторите два предыдущих шага, пока не будут выбраны все требуемые базы данных.
- В поле База данных нажмите значок
- Чтобы отозвать доступ к определенной базе, нажмите значок
справа от имени базы.
- Чтобы предоставить доступ к требуемым базам данных:
- Нажмите Настройки СУБД, чтобы изменить максимальное допустимое количество соединений пользователя (Conn limit), возможность подключения к кластеру (Login) или другие настройки PostgreSQL.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Из интерфейса командной строки можно изменить настройки пользователя:
-
Чтобы настроить права пользователя на доступ к определенным базам данных, выполните команду, перечислив список имен баз данных с помощью параметра
--permissions:yc managed-postgresql user update <имя_пользователя> \ --cluster-name=<имя_кластера> \ --permissions=<список_баз>Где:
cluster-name— имя кластера.permissions— список баз, к которым пользователь должен иметь доступ.
Имя кластера можно запросить со списком кластеров в каталоге.
Эта команда предоставляет пользователю доступ к базам данных, указанным в списке.
Чтобы отозвать доступ к определенной базе, исключите ее имя из списка и передайте команде обновленный список.
-
Чтобы изменить настройки PostgreSQL для пользователя, передайте параметры, отвечающие за требуемые настройки, в команде:
yc managed-postgresql user update <имя_пользователя> \ --cluster-name=<имя_кластера> \ --<настройка_1>=<значение_1> \ --<настройка_2>=<значение_2> \ --<настройка_3>=<список_значений> \ ...Чтобы изменить лимит подключений пользователя, используйте параметр
--conn-limit.Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации пользователей кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Чтобы выдать пользователю права на доступ к определенным базам данных:
-
Найдите ресурс
yandex_mdb_postgresql_userнужного пользователя. -
Добавьте блоки
permissionс именами нужных баз данных:resource "yandex_mdb_postgresql_user" "<имя_пользователя>" { ... name = "<имя_пользователя>" permission { database_name = "<имя_БД>" } permission { database_name = "<имя_БД>" } ... }
-
-
Чтобы отозвать у пользователя права на доступ к определенной базе, удалите блок
permissionс ее именем из конфигурационного файла. -
Чтобы изменить настройки PostgreSQL для пользователя, передайте параметры, отвечающие за требуемые настройки, в блоке
settings:resource "yandex_mdb_postgresql_user" "<имя_пользователя>" { ... name = "<имя_пользователя>" settings = { <настройки_БД> } ... } -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.Update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "settings", "settings": { <набор_настроек> } }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
settings— новые настройки. Доступный набор настроек см. в описании метода и в разделе Настройки на уровне пользователя.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService.Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "update_mask": { "paths": [ "settings" ] }, "settings": { <набор_настроек> } }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.UserService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае передается только один параметр.
-
settings— новые настройки. Доступный набор настроек см. в описании метода и в разделе Настройки на уровне пользователя.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Настроить защиту от удаления
- Перейдите в сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите вкладку Пользователи.
- Нажмите значок
и выберите пункт Настроить. - Настройте защиту пользователя от удаления. Для этого выберите нужное значение в поле Защита от удаления.
- Нажмите кнопку Сохранить.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
-
Найдите ресурс
yandex_mdb_postgresql_userнужного пользователя. -
Добавьте параметр
deletion_protection. Возможные значения:true,falseилиunspecified(наследует значение от кластера). Значение по умолчанию —unspecified.resource "yandex_mdb_postgresql_user" "<имя_пользователя>" { ... deletion_protection = <защита_от_удаления> ... } -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.Update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "deletionProtection", "deletionProtection": <защита_от_удаления> } }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
deletionProtection— защита пользователя от удаления:true,falseилиunspecified(наследует значение от кластера). Значение по умолчанию —unspecified.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService.Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "update_mask": { "paths": [ "deletion_protection" ] }, "deletion_protection": <защита_от_удаления> }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.UserService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае передается только один параметр.
-
deletion_protection— защита пользователя от удаления:true,falseилиunspecified(наследует значение от кластера). Значение по умолчанию —unspecified.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Важно
Защита от удаления действует только на уровне конкретного пользователя. При удалении кластера будут удалены все пользователи, в том числе защищенные от удаления.
Удалить пользователя
Пользователь может быть защищен от удаления. Чтобы удалить такого пользователя, сперва снимите защиту.
Чтобы удалить пользователя:
- Перейдите в сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите вкладку Пользователи.
- Нажмите значок
и выберите пункт Удалить. - Подтвердите удаление.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы удалить пользователя, выполните команду:
yc managed-postgresql user delete <имя_пользователя> \
--cluster-name <имя_кластера>
Имя кластера можно запросить со списком кластеров в каталоге.
Чтобы удалить пользователя:
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Удалите ресурс
yandex_mdb_postgresql_userс описанием нужного пользователя. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.Delete и выполните запрос, например, с помощью cURL
:curl \ --request DELETE \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>'Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService.Delete и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.UserService.DeleteИдентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примеры
Добавить пользователя с правами только на чтение
Внимание
Не используйте этот пример, если пользователь создан с помощью Terraform: последующие изменения, сделанные через Terraform, могут отменить привилегии пользователя, сделанные через SQL.
Чтобы добавить в существующий кластер нового пользователя user2 с доступом только на чтение к базе данных db1:
-
Создайте пользователя с именем
user2. При этом выберите базы данных, к которым должен иметь доступ пользователь. -
Подключитесь к базе данных
db1с помощью учетной записи владельца БД. -
Выдайте пользователю
user2нужные права доступа.Примеры:
-
Разрешить доступ только к таблице
Productsв схеме по умолчаниюpublic:GRANT SELECT ON public.Products TO user2; -
Разрешить доступ к объектам схемы
myschema:GRANT USAGE ON SCHEMA myschema TO user2; -
Разрешить доступ ко всем таблицам и последовательностям схемы
myschema:GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO user2; GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA myschema to user2; -
Разрешить вызов функции
my_functionв схемеmyschema:GRANT EXECUTE ON FUNCTION myschema.my_function TO user2; -
Изменить привилегии по умолчанию для таблиц и последовательностей схемы
myschema:ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO user2; ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT USAGE, SELECT ON SEQUENCES TO user2;Команды
ALTER DEFAULT PRIVILEGESпозволяют изменить права доступа к объектам (в данном случае — к таблицам и последовательностям схемыmyschema), которые будут созданы в будущем, но не затрагивают права, назначенные уже существующим объектам.Чтобы изменить привилегии существующих объектов, используйте команды
GRANTиREVOKE.
-
Выдать привилегию пользователю через Terraform можно только в кластере с хостами в публичном доступе.
Для выдачи привилегий пользователям через Terraform используется сторонний провайдер — Terraform Provider for PostgreSQL
Примечание
Terraform Provider for PostgreSQL не является частью сервиса Managed Service for PostgreSQL и не сопровождается командой разработки и службой поддержки Yandex Cloud, а его использование не входит в условия использования Yandex Managed Service for PostgreSQL
Подробнее о выдаче привилегий см. в разделе Выдать привилегию пользователю.
Допустим, существует кластер mypg с пользователем user1 в роли владельца. Чтобы добавить в него нового пользователя user2 с доступом только на чтение из таблиц в схеме public базы данных db1:
-
Добавьте провайдер
postgresqlв блокrequired_providersв файле с настройками провайдера:terraform { required_providers { ... postgresql = { source = "cyrilgdn/postgresql" } ... } } -
Откройте конфигурационный файл Terraform с планом инфраструктуры.
-
Добавьте ресурс
yandex_mdb_postgresql_user:resource "yandex_mdb_postgresql_user" "user2" { cluster_id = yandex_mdb_postgresql_cluster.mypg.id name = "user2" password = "user2user2" permission { database_name = yandex_mdb_postgresql_database.db1.name } } -
Добавьте провайдер
postgresqlи настройте для него доступ к базе данныхdb1:provider "postgresql" { host = yandex_mdb_postgresql_cluster.mypg.host[0].fqdn port = 6432 database = yandex_mdb_postgresql_database.db1.name username = yandex_mdb_postgresql_user.user1.name password = yandex_mdb_postgresql_user.user1.password } -
Добавьте ресурс
postgresql_grantсо следующими атрибутами:resource "postgresql_grant" "readonly_tables" { database = yandex_mdb_postgresql_database.db1.name role = yandex_mdb_postgresql_user.user2.name object_type = "table" privileges = ["SELECT"] schema = "public" } -
Повторно инициализируйте Terraform:
terraform init -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Отозвать права доступа
-
Подключитесь к базе данных
db1с помощью учетной записи владельца БД. -
Отзовите у пользователя
user2нужные права доступа.Примеры:
-
Отозвать все привилегии для таблиц схемы
myschema:REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschema FROM user2; -
Отозвать доступ к таблице
Productsв схеме по умолчаниюpublic:REVOKE SELECT ON public.Products FROM user2; -
Отозвать доступ ко всем таблицам схемы
myschema:REVOKE SELECT ON ALL TABLES IN SCHEMA myschema FROM user2; -
Отозвать доступ к объектам схемы
myschema:REVOKE USAGE ON SCHEMA myschema FROM user2;
-
-
Откройте конфигурационный файл Terraform, с помощью которого назначались привилегии.
-
В блоке
postgresql_grantудалите привилегию, которую хотите отозвать, из параметраprivileges.Чтобы отозвать все привилегии, оставьте массив
privilegesпустым или удалите ресурсpostgresql_grantцеликом.resource "postgresql_grant" "readonly_tables" { database = yandex_mdb_postgresql_database.db1.name role = yandex_mdb_postgresql_user.user2.name object_type = "table" privileges = [] schema = "public" } -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-