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

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

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

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

Необходимые условия

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

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

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

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

  • Выберите один из трех типов проверки подлинности:

    • Только аутентификация MySQL — По умолчанию MySQL использует встроенный mysql_native_password плагин аутентификации, который выполняет аутентификацию с помощью собственного метода хэширования паролей MySQL.
    • Только аутентификация 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.

Important

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

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

    Note

    На сервере 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 "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
#--------                             -----                                -----------
#44444444-4444-4444-4444-444444444444 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44444444-4444-4444-4444-444444444444 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 ID с помощью средства 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)
  • Если имя содержит пробелы, используйте \ перед каждым пробелом, чтобы экранировать его

Note

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-000000000000администратора и удостоверенияtest-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. Убедитесь, что пользователь Microsoft Entra <user>@yourtenant.onmicrosoft.com является действительным пользователем в клиенте 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';

Note

  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++: поддерживается
  • Java

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

    • Соединитель или 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: поддерживается

База данных Azure для MySQL гибкий сервер переходит из устаревшей реализации проверки подлинности Microsoft Entra на Microsoft Identity Security Essentials (MISE). Гибкий сервер MySQL проверяет маркеры доступа Microsoft Entra во время проверки подлинности. Чтобы повысить безопасность и обеспечить согласованное поведение проверки подлинности в службе, будущие обновления платформы применяют более строгую проверку аудиторий токенов. Приложения должны запрашивать маркеры доступа с помощью следующей рекомендуемой аудитории:

https://ossrdbms-aad.database.windows.net

Если приложение использует проверку подлинности Microsoft Entra для подключения к гибкому серверу База данных Azure для MySQL, просмотрите конфигурацию приобретения маркеров и убедитесь, что вы запрашиваете маркеры доступа для правильной аудитории. Эта рекомендация применяется ко всем потокам проверки подлинности, включая приложения, автоматизацию, управляемые удостоверения, субъекты-службы и сценарии проверки подлинности на основе пользователей. Использование рекомендуемой аудитории помогает обеспечить совместимость с будущими улучшениями служб и улучшениями безопасности. Это помогает избежать будущих сбоев подключения и гарантирует, что приложения остаются совместимыми с текущими улучшениями безопасности и проверки подлинности.

Почему это важно

Приложения, которые получают маркеры для аудиторий, отличных от того, https://ossrdbms-aad.database.windows.net которые не будут поддерживаться в будущих обновлениях службы. После включения более строгой проверки аудитории подключения, которые представляют маркеры с неподдерживаемой аудиторией, завершаются ошибкой проверки подлинности. Они не могут подключаться к гибкому серверу База данных Azure для MySQL, пока они не будут обновлены для использования поддерживаемой аудитории.

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