Управление правами пользователей
Вы можете управлять правами пользователей на уровне отдельной базы данных, изменяя привилегии пользователей.
Важно
Чтобы изменить права пользователей на уровне всего кластера или отдельной базы данных, используйте интерфейсы Yandex Cloud. Изменения, внесенные командами SQL, не сохраняются.
Подробнее см. в разделе Права пользователей.
Изменить привилегии пользователя
-
Перейдите на страницу каталога
и выберите сервис Managed Service for MySQL. -
Нажмите на имя нужного кластера и выберите вкладку
Пользователи. -
Нажмите значок
и выберите пункт Настроить. -
При необходимости добавьте пользователю нужные базы данных:
- Нажмите кнопку Добавить базу данных.
- Выберите базу данных из выпадающего списка.
- Повторите два предыдущих шага, пока не будут выбраны все требуемые базы данных.
- Чтобы отозвать доступ к определенной базе, удалите ее из перечня, нажав значок
справа от имени базы данных.
-
Задайте нужные привилегии пользователя для каждой из баз данных пользователя:
- Нажмите значок
в столбце Роли. - Выберите привилегию, которую вы хотите добавить пользователю из выпадающего списка.
- Повторите два предыдущих шага, пока не будут добавлены все требуемые привилегии.
- Нажмите значок
-
Чтобы отозвать привилегию, нажмите значок
справа от ее имени. -
При необходимости задайте административные привилегии для пользователя.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Добавить привилегии пользователю:
yc managed-mysql user grant-permission <имя_пользователя> \ --cluster-name <имя_кластера> \ --database <имя_БД> \ --permissions <набор_привилегий_через_запятую>
Имя кластера можно запросить со списком кластеров в каталоге, имя базы данных — со списком баз данных в кластере, имя пользователя — со списком пользователей в кластере.
-
Отозвать привилегии у пользователя:
yc managed-mysql user revoke-permission <имя_пользователя> \ --cluster-name <имя_кластера> \ --database <имя_БД> \ --permissions <набор_привилегий_через_запятую>
Чтобы добавить или отозвать привилегию
ALL_PRIVILEGES
, передайте в качестве названия синонимALL
.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Найдите ресурс
yandex_mdb_mysql_user
нужного пользователя и измените список его привилегий для требуемой БД в параметреroles
:resource "yandex_mdb_mysql_user" "<имя_пользователя>" { cluster_id = "<идентификатор_кластера>" name = "<имя_пользователя>" permission { database_name = "<имя_БД>" roles = [<список_привилегий>] } ... }
Где:
database_name
— имя БД, к которой пользователь должен иметь доступ.roles
— список привилегий пользователя по отношению к БД.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
-
Получите 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-mysql/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "permissions", "permissions": [ { "databaseName": "<имя_БД>", "roles": [ "<привилегия_1>", "<привилегия_2>", ..., "<привилегия_N>" ] } ] }'
Где:
-
updateMask
— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
permissions
— настройки разрешений пользователя:databaseName
— имя базы данных, к которой пользователь получает доступ.roles
— массив привилегий пользователя. Каждая привилегия представлена в виде отдельной строки в массиве. Список доступных значений см. в разделе Привилегии пользователей в кластере.
Для каждой базы данных добавьте отдельный элемент с настройками разрешений в массив
permissions
.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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/mysql/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "update_mask": { "paths": [ "permissions" ] }, "permissions": [ { "database_name": "<имя_БД>", "roles": [ "<привилегия_1>", "<привилегия_2>", ..., "<привилегия_N>" ] } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mysql.v1.UserService.Update
Где:
-
update_mask
— перечень изменяемых параметров в виде массива строкpaths[]
.В данном случае передается только один параметр.
-
permissions
— настройки разрешений пользователя:database_name
— имя базы данных, к которой пользователь получает доступ.roles
— массив привилегий пользователя. Каждая привилегия представлена в виде отдельной строки в массиве. Список доступных значений см. в разделе Привилегии пользователей в кластере.
Для каждой базы данных добавьте отдельный элемент с настройками разрешений в массив
permissions
.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примеры
Создать пользователя с правами только на чтение
Чтобы в существующем кластере cluster1
создать нового пользователя user2
с паролем SecretPassword
и доступом к базе данных db1
только для чтения:
Создайте пользователя с именем user2
. При создании пользователя:
- Добавьте базу
db1
в список баз данных. - Добавьте роль
SELECT
для базыdb1
.
-
Создайте пользователя
user2
:yc managed-mysql user create "user2" \ --cluster-name "cluster1" \ --password "SecretPassword"
-
Добавьте роль
SELECT
для базыdb1
:yc managed-mysql users grant-permission "user2" \ --cluster-name "cluster1" \ --database "db1" \ --permissions "SELECT"
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера MySQL®.
-
Добавьте ресурс
yandex_mdb_mysql_user
:resource "yandex_mdb_mysql_user" "user2" { cluster_id = yandex_mdb_mysql_cluster.cluster1.id name = "user2" password = "SecretPassword" permission { database_name = "db1" roles = ["SELECT"] ... } }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform