Настройка аутентификации Microsoft Entra для База данных Azure для MySQL - Flexible Server

В этом руководстве показано, как настроить проверку подлинности Microsoft Entra для гибкого сервера Базы данных Azure для MySQL.

В этом руководстве вы узнаете, как:

  • Настройте администратора Microsoft Entra.
  • Подключитесь к гибкому серверу Базы данных Azure для MySQL с помощью идентификатора Microsoft Entra.

Предпосылки

Настройка администратора Microsoft Entra

Чтобы создать пользователя администратора Microsoft Entra, выполните следующие действия.

  • На портале Azure выберите экземпляр гибкого сервера Базы данных Azure для MySQL, который требуется включить для идентификатора Microsoft Entra.

  • В области "Безопасность" выберите "Проверка подлинности: схема настройки проверки подлинности Microsoft Entra

  • Существует три типа проверки подлинности:

    • Только проверка подлинности MySQL . По умолчанию MySQL использует встроенный подключаемый модуль проверки подлинности mysql_native_password, который выполняет проверку подлинности с помощью собственного метода хэширования паролей.
    • Только проверка подлинности Microsoft Entra — проверка подлинности разрешена только с учетной записью Microsoft Entra. Отключает аутентификацию mysql_native_password и включает серверный параметр aad_auth_only в состояние ВКЛ.
    • Проверка подлинности MySQL и Microsoft Entra— разрешает проверку подлинности с помощью собственного пароля MySQL или учетной записи Microsoft Entra. Выключает параметр сервера aad_auth_only
  • Выберите удостоверенность — выберите или добавьте пользовательскую управляемую удостоверенность. Для того чтобы UAMI могло читать из Microsoft Graph как удостоверение сервера, необходимы следующие разрешения. Кроме того, предоставьте управляемому удостоверению, назначенному пользователем, роль читателя каталогов .

    • User.Read.All: разрешает доступ к сведениям пользователя Microsoft Entra.
    • GroupMember.Read.All: разрешает доступ к данным группы Microsoft Entra.
    • Application.Read.ALL: предоставляет доступ к сведениям о субъекте-службе (приложении) Microsoft Entra.

Это важно

Только пользователь с по крайней мере ролью администратора привилегированных ролей может предоставить эти разрешения.

  • Выберите допустимого пользователя Microsoft Entra или группу Microsoft Entra в клиенте, чтобы быть администратором Microsoft Entra для сервера базы данных.

    Замечание

    Для каждого сервера MySQL можно создать только одного администратора Microsoft Entra, и выбор другого приведет к перезаписи уже настроенного администратора Microsoft Entra для сервера.

Предоставление разрешений управляемому удостоверению, назначенному пользователем

В следующем примере скрипта PowerShell предоставляются необходимые разрешения для UMI. В этом примере назначаются доступы для UMI umiservertest.

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

Скрипт предоставляет разрешения User.Read.All, GroupMember.Read.All и Application.Read.ALL для UMI, чтобы получить доступ к Microsoft Graph.

# Script to assign permissions to the UMI "umiservertest"

import-module Az.Resources
import-module Microsoft.Entra
$tenantId = '<tenantId>' # Your Azure AD tenant ID

Connect-Entra -TenantID $tenantId
# Log in as a user with a "Global Administrator" or "Privileged Role Administrator" role
# Script to assign permissions to an existing UMI
# The following Microsoft Graph permissions are required:
#   User.Read.All
#   GroupMember.Read.All
#   Application.Read.ALL

# Search for Microsoft Graph
$AAD_SP = Get-AzADServicePrincipal -DisplayNameStartsWith "Microsoft Graph"
$AAD_SP
# Use Microsoft Graph; in this example, this is the first element $AAD_SP[0]

#Output

#ObjectId                             AppId                                DisplayName
#--------                             -----                                -----------
#47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44e2d3f6-97c3-4bc7-9ccd-e26746638b6d 0bf30f3b-4a52-48df-9a82-234910c4a086 Microsoft Graph #Change

$MSIName = "<managedIdentity>";  # Name of your user-assigned
$MSI = Get-AzADServicePrincipal -DisplayNameStartsWith $MSIName
if($MSI.Count -gt 1)
{
Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"

# Choose the right UMI

Exit
}

# If you have more UMIs with similar names, you have to use the proper $MSI[ ]array number

# Assign the app roles

$AAD_AppRole = $AAD_SP.AppRole | Where-Object {$_.Value -eq "User.Read.All"}
New-AzADServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -ResourceId $AAD_SP.Id -AppRoleId $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRole | Where-Object {$_.Value -eq "GroupMember.Read.All"}
New-AzADServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -ResourceId $AAD_SP.Id -AppRoleId $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRole | Where-Object {$_.Value -eq "Application.Read.All"}
New-AzADServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -ResourceId $AAD_SP.Id -AppRoleId $AAD_AppRole.Id

В последних шагах скрипта, если у вас есть больше UMIs с похожими именами, необходимо использовать соответствующее $MSI[ ]array число. Примером является $AAD_SP.ObjectId[0].

Проверка разрешений на управляемое удостоверение, назначаемое пользователем

Чтобы проверить разрешения для UMI, перейдите на портал Azure. В ресурсе Microsoft Entra ID перейдите в раздел Корпоративные приложения. Выберите все приложения для типа приложения и найдите созданный UMI.

Выберите UMI и перейдите к параметрам Разрешения в разделе Безопасность.

После предоставления разрешений UMI они становятся активными для всех серверов, созданных с UMI, назначенным в качестве удостоверения сервера.

Подключение к гибкому серверу Базы данных Azure для MySQL с помощью идентификатора Microsoft Entra

1. Проверка подлинности с помощью идентификатора Microsoft Entra

Начните с проверки подлинности с помощью идентификатора Microsoft Entra с помощью средства Azure CLI. (Этот шаг не требуется в Azure Cloud Shell.)

  • Войдите в учетную запись Azure с помощью команды az login . Обратите внимание на свойство ID, которое ссылается на идентификатор подписки для учетной записи Azure:

    az login
    

Команда запускает окно браузера на странице проверки подлинности Microsoft Entra. Для этого необходимо предоставить идентификатор пользователя и пароль Microsoft Entra.

  • Если у вас несколько подписок, выберите соответствующую подписку с помощью команды az account set:

    az account set --subscription \<subscription id\>
    

2. Получить токен доступа Microsoft Entra

Вызовите средство Azure CLI, чтобы получить токен доступа для аутентифицированного Microsoft Entra пользователя из шага 1 для доступа к гибкому серверу базы данных Azure для MySQL.

  • Пример Azure CLI для получения токена доступа:

    az account get-access-token --resource https://ossrdbms-aad.database.windows.net
    
  • Пример Azure PowerShell для получения токена доступа:

    $accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
    $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
    

Microsoft Entra возвращает маркер доступа:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Токен — это строка Base 64, которая кодирует все сведения о пользователе, прошедшем проверку подлинности, и предназначена для службы базы данных Azure для MySQL.

Срок действия маркера доступа составляет от 5 минут до 60 минут. Перед началом входа в База данных Azure для MySQL Flexible Server рекомендуется получить токен доступа.

  • Для просмотра действительности маркера можно использовать следующую команду PowerShell.
    $accessToken.ExpiresOn.DateTime

3. Использование токена в качестве пароля для входа в MySQL

При подключении необходимо использовать маркер доступа в качестве пароля пользователя MySQL.

Подключение к гибкому серверу Базы данных Azure для MySQL с помощью Интерфейса командной строки MySQL

При использовании интерфейса командной строки для подключения можно использовать следующее:

Пример (Linux или macOS):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

Пример (PowerShell):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$((Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net).Token)

Подключение к гибкому серверу Базы данных Azure для MySQL с помощью MySQL Workbench

  • Запустите MySQL Workbench и выберите параметр "База данных", а затем выберите "Подключиться к базе данных".
  • В поле имени узла введите полное доменное имя MySQL, например, mysql.database.azure.com.
  • В поле имени пользователя введите имя администратора Microsoft Entra MySQL. Например: user@tenant.onmicrosoft.com.
  • В поле пароля выберите Сохранить в хранилище и вставьте маркер доступа из файла, например, C:\temp\MySQLAccessToken.txt.
  • Выберите вкладку "Дополнительно" и убедитесь, что установлен флажок Включить подключаемый модуль проверки подлинности Cleartext.
  • Нажмите кнопку "ОК", чтобы подключиться к базе данных.

Важные рекомендации при подключении

  • user@tenant.onmicrosoft.com — имя пользователя или группы Microsoft Entra, к которому вы пытаетесь подключиться
  • Обязательно используйте точный способ написания имени пользователя или группы Microsoft Entra
  • Имена пользователей и групп Microsoft Entra чувствительны к регистру
  • При подключении в качестве группы используйте только имя группы (например, GroupName)
  • Если имя содержит пробелы, используйте \ перед каждым пробелом, чтобы экранировать его

Замечание

Параметр enable-cleartext-plugin — необходимо использовать аналогичную конфигурацию с другими клиентами, чтобы убедиться, что маркер отправляется на сервер без хэширования.

Теперь вы прошли проверку подлинности на гибком сервере MySQL с помощью проверки подлинности Microsoft Entra.

Другие команды администратора Microsoft Entra

  • Управление администратором Active Directory сервера

    az mysql flexible-server ad-admin
    
  • Создание администратора Active Directory

    az mysql flexible-server ad-admin create
    

    Пример. Создание администратора Active Directory с пользователемjohn@contoso.com, идентификатором администратора и удостоверением 00000000-0000-0000-0000-000000000000test-identity

    az mysql flexible-server ad-admin create -g testgroup -s testsvr -u john@contoso.com -i 00000000-0000-0000-0000-000000000000 --identity test-identity
    
  • Удаление администратора Active Directory

    az mysql flexible-server ad-admin delete
    

    Пример. Удаление администратора Active Directory

    az mysql flexible-server ad-admin delete -g testgroup -s testsvr
    
  • Перечислить всех администраторов Active Directory

    az mysql flexible-server ad-admin list
    

    Пример. Перечисление администраторов Active Directory

    az mysql flexible-server ad-admin list -g testgroup -s testsvr
    
  • Получите администратора Active Directory

    az mysql flexible-server ad-admin show
    

    Пример. Получение администратора Active Directory

    az mysql flexible-server ad-admin show -g testgroup -s testsvr
    
  • Дождитесь выполнения определенных условий администратором Active Directory

    az mysql flexible-server ad-admin wait
    

    Примеры:

    • Подождите, пока не появится администратор Active Directory

      az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
      
    • Дождитесь удаления администратора Active Directory

      az mysql flexible-server ad-admin wait -g testgroup -s testsvr -deleted
      

Создание пользователей Microsoft Entra в Базе данных Azure для MySQL

Чтобы добавить пользователя Microsoft Entra в базу данных Azure для MySQL, выполните следующие действия после подключения:

  1. Сначала убедитесь, что пользователь <user>@yourtenant.onmicrosoft.com Microsoft Entra является допустимым пользователем в клиенте Microsoft Entra.
  2. Войдите в экземпляр базы данных Azure для MySQL как администратор Microsoft Entra.
  3. Создание пользователя <user>@yourtenant.onmicrosoft.com в Базе данных Azure для MySQL.

Example:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

Для имен пользователей, превышающих 32 символов, используйте псевдоним вместо полного имени пользователя.

Example:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';

Замечание

  1. MySQL игнорирует начальные и конечные пробелы, поэтому имя пользователя не должно иметь начальных или конечных пробелов.
  2. Проверка подлинности пользователя с помощью идентификатора Microsoft Entra не дает пользователю никаких разрешений на доступ к объектам в базе данных Azure для MySQL. Необходимо предоставить пользователю необходимые разрешения вручную.

Создание групп Microsoft Entra в Базе данных Azure для MySQL

Чтобы включить группу Microsoft Entra для доступа к базе данных, используйте точный механизм для пользователей, но вместо этого укажите имя группы:

Example:

CREATE AADUSER 'Prod_DB_Readonly';

При входе участники группы используют свои личные маркеры доступа, но войдите с именем группы, указанным в качестве имени пользователя.

Совместимость с драйверами приложений

Большинство драйверов поддерживаются; Однако не забудьте использовать параметры для отправки пароля в виде ясного текста, поэтому маркер отправляется без изменения.

  • C/C++

    • libmysqlclient: поддерживается
    • mysql-connector-c++: поддерживается
  • Ява

    • Connector/J (mysql-connector-java): поддерживается, необходимо использовать useSSL параметр
  • Питон

    • Соединитель или Python: поддерживается
  • Руби

    • mysql2: поддерживается
  • .NET

    • mysql-connector-net: поддерживается, необходимо добавить плагин для mysql_clear_password
    • mysql-net/MySqlConnector: поддерживается
  • Node.js

    • mysqljs: не поддерживается (не отправляет токен в открытом виде без патча)
    • node-mysql2: поддерживается
  • Perl

    • DBD::mysql: поддерживается
    • Net::MySQL: не поддерживается
  • Вперёд!

    • go-sql-driver: поддерживается, добавьте ?tls=true&allowCleartextPasswords=true в строку подключения
  • PHP

    • mysqli расширение: поддерживается

    • драйвер PDO_MYSQL: поддерживается

Следующий шаг