Управление пользователями PostgreSQL
Вы можете добавлять и удалять пользователей, а также управлять их индивидуальными настройками.
Важно
С помощью команд SQL вы можете назначать пользователям привилегии, но не можете добавлять и изменять пользователей. Подробнее см. в разделе Назначение привилегий и ролей пользователям.
Получить список пользователей
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера, затем выберите вкладку Пользователи.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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.yandexcloud.kz/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.yandexcloud.kz:443 \ yandex.cloud.mdb.postgresql.v1.UserService.List
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Создать пользователя
Важно
Для новых пользователей привилегия на создание таблиц в схеме public
зависит от версии PostgreSQL:
- 14 и ниже — привилегия выдается автоматически и отозвать ее нельзя.
- 15 и выше — привилегию необходимо предоставить пользователю вручную.
-
Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
-
Нажмите на имя нужного кластера и выберите вкладку Пользователи.
-
Нажмите кнопку Создать пользователя.
-
Введите имя пользователя базы данных и пароль.
Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_
), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin
,repl
,monitor
,postgres
,mdb_superuser
,mdb_admin
,mdb_monitor
,mdb_replication
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.Длина пароля от 8 до 128 символов.
-
Выберите тип защиты от удаления.
Возможные значения:
- Как у кластера.
- Включена.
- Выключена.
-
Выберите одну или несколько баз данных, к которым должен иметь доступ пользователь:
- В поле База данных нажмите значок
справа от выпадающего списка. - Выберите базу данных из выпадающего списка.
- Повторите два предыдущих шага, пока не будут выбраны все требуемые базы данных.
- Чтобы удалить базу, добавленную по ошибке, нажмите значок
справа от имени базы.
- В поле База данных нажмите значок
-
Задайте настройки СУБД для пользователя.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать пользователя в кластере, выполните команду:
yc managed-postgresql user create <имя_пользователя> \
--cluster-name <имя_кластера> \
--password=<пароль> \
--permissions=<список_баз> \
--conn-limit=<максимальное_количество_соединений>
Где:
cluster-name
— имя кластера.password
— пароль для пользователя.permissions
— список баз, к которым пользователь должен иметь доступ.conn-limit
— максимальное количество соединений для пользователя.
В этой команде указаны только основные настройки пользователя.
Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания pg_
), цифры или подчеркивания. Максимальная длина имени 63 символа.
Имена admin
, repl
, monitor
, postgres
, mdb_superuser
, mdb_admin
, mdb_monitor
, mdb_replication
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.
Длина пароля от 8 до 128 символов.
Чтобы задать настройки СУБД для пользователя, воспользуйтесь параметрами, описанными в разделе Пользовательские настройки.
Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл 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_superuser
,mdb_admin
,mdb_monitor
,mdb_replication
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.Длина пароля от 8 до 128 символов.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы 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.yandexcloud.kz/managed-postgresql/v1/clusters/<идентификатор_кластера>/users' \ --data '{ "userSpec": { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "databaseName": "<имя_БД>" } ], "connLimit": "<максимальное_количество_подключений_к_БД>", "deletionProtection": <защита_от_удаления:_true_или_false> } }'
Где
userSpec
— настройки нового пользователя БД:-
name
— имя пользователя. -
password
— пароль пользователя.Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_
), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin
,repl
,monitor
,postgres
,mdb_superuser
,mdb_admin
,mdb_monitor
,mdb_replication
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.Длина пароля от 8 до 128 символов.
-
permissions.databaseName
— массив баз данных, к которым должен иметь доступ пользователь. Каждый элемент массива соответствует отдельной БД. -
connLimit
— максимальное количество подключений к БД для пользователя. -
deletionProtection
— защита от удаления БД.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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": <защита_от_удаления:_true_или_false> } }' \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.postgresql.v1.UserService.Create
Где
user_spec
— настройки нового пользователя БД:-
name
— имя пользователя. -
password
— пароль пользователя.Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_
), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin
,repl
,monitor
,postgres
,mdb_superuser
,mdb_admin
,mdb_monitor
,mdb_replication
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.Длина пароля от 8 до 128 символов.
-
permissions.database_name
— массив баз данных, к которым должен иметь доступ пользователь. Каждый элемент массива соответствует отдельной БД. -
conn_limit
— максимальное количество подключений к БД для пользователя. -
deletion_protection
— защита от удаления БД.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примечание
Сразу после создания пользователь получает только привилегию CONNECT
для выбранных баз данных, и не может выполнять никакие операции с базами данных. Чтобы дать пользователю доступ к базам, назначьте ему нужные привилегии или роли.
Изменить пароль
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите вкладку Пользователи.
- Нажмите значок
и выберите пункт Изменить пароль. - Задайте новый пароль и нажмите кнопку Изменить.
Примечание
Длина пароля от 8 до 128 символов.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы изменить пароль пользователя, выполните команду:
yc managed-postgresql user update <имя_пользователя> \
--cluster-name=<имя_кластера> \
--password=<новый_пароль>
Примечание
Длина пароля от 8 до 128 символов.
Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации пользователей кластера Managed Service for PostgreSQL см. в документации провайдера Terraform
. -
Найдите ресурс
yandex_mdb_postgresql_user
нужного пользователя. -
Измените значение поля
password
:resource "yandex_mdb_postgresql_user" "<имя_пользователя>" { ... name = "<имя_пользователя>" password = "<новый_пароль>" ... }
Примечание
Длина пароля от 8 до 128 символов.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы 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.yandexcloud.kz/managed-postgresql/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "password", "password": "<новый_пароль>" }'
Где:
-
updateMask
— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
password
— новый пароль.Примечание
Длина пароля от 8 до 128 символов.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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.yandexcloud.kz:443 \ yandex.cloud.mdb.postgresql.v1.UserService.Update
Где:
-
update_mask
— перечень изменяемых параметров в виде массива строкpaths[]
.В данном случае передается только один параметр.
-
password
— новый пароль.Примечание
Длина пароля от 8 до 128 символов.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Изменить настройки пользователя
Примечание
Привилегии и роли PostgreSQL не затрагиваются этими настройками и настраиваются отдельно.
О том, как задать привилегии и роли для пользователя, читайте в разделе Назначение привилегий и ролей пользователям.
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите вкладку Пользователи.
- Нажмите значок
и выберите пункт Настроить. - Настройте права пользователя на доступ к определенным базам данных:
- Чтобы предоставить доступ к требуемым базам данных:
- В поле База данных нажмите значок
справа от выпадающего списка. - Выберите базу данных из выпадающего списка.
- Повторите два предыдущих шага, пока не будут выбраны все требуемые базы данных.
- В поле База данных нажмите значок
- Чтобы отозвать доступ к определенной базе, нажмите значок
справа от имени базы.
- Чтобы предоставить доступ к требуемым базам данных:
- Нажмите Настройки СУБД, чтобы изменить максимальное допустимое количество соединений пользователя (Conn limit), возможность подключения к кластеру (Login) или другие настройки PostgreSQL.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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.yandexcloud.kz/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.yandexcloud.kz: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.yandexcloud.kz/managed-postgresql/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "deletionProtection", "deletionProtection": <защита_от_удаления:_true_или_false> } }'
Где:
Где:
-
updateMask
— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
deletionProtection
— защита от удаления БД.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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": <защита_от_удаления:_true_или_false> }' \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.postgresql.v1.UserService.Update
Где:
-
update_mask
— перечень изменяемых параметров в виде массива строкpaths[]
.В данном случае передается только один параметр.
-
deletion_protection
— защита от удаления БД.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Важно
Защита от удаления действует только на уровне конкретного пользователя. При удалении кластера будут удалены все пользователи, в том числе защищенные от удаления.
Удалить пользователя
Пользователь может быть защищен от удаления. Чтобы удалить такого пользователя, сперва снимите защиту.
Чтобы удалить пользователя:
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите вкладку Пользователи.
- Нажмите значок
и выберите пункт Удалить. - Подтвердите удаление.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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.yandexcloud.kz/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.yandexcloud.kz:443 \ yandex.cloud.mdb.postgresql.v1.UserService.Delete
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примеры
Добавить пользователя с правами только на чтение
Внимание
Не используйте этот пример, если пользователь создан с помощью Terraform: последующие изменения, сделанные через Terraform, могут отменить привилегии пользователя, сделанные через SQL.
Чтобы добавить в существующий кластер нового пользователя 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, SELECT ON ALL SEQUENCES IN SCHEMA myschema to user2;
-
(Опционально) Чтобы изменить привилегии по умолчанию, выполните команду:
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;
Для отзыва выданных привилегий выполните команды:
REVOKE SELECT ON public.Products FROM user2;
REVOKE SELECT ON ALL TABLES IN SCHEMA myschema FROM user2;
REVOKE USAGE ON SCHEMA myschema FROM user2;
Выдать привилегию пользователю через 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
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Чтобы отозвать выданную привилегию, удалите ее из списка privileges
и подтвердите изменение ресурсов.