Использование идентификатора Microsoft Entra для проверки подлинности с помощью MySQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер

Важно!

База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье "Что происходит с одним сервером База данных Azure для MySQL?"

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

Важно!

Проверка подлинности Microsoft Entra доступна только для MySQL 5.7 и более поздней версии.

Настройка пользователя Microsoft Entra Администратор

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

  1. В портал Azure выберите экземпляр База данных Azure для MySQL, который требуется включить для идентификатора Microsoft Entra.
  2. В разделе "Параметры" выберите "Администратор Active Directory",

set Microsoft Entra administrator

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

Важно!

При настройке администратора в Базу данных Azure для сервера MySQL добавляется новый пользователь со всеми разрешениями администратора.

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

После настройки администратора вы можете войти в систему:

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

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

authentication flow

Мы разработали интеграцию Microsoft Entra для работы с общими инструментами MySQL, такими как интерфейс командной строки mysql, которые не поддерживают Microsoft Entra и поддерживают только указание имени пользователя и пароля при подключении к MySQL. Мы передаем маркер Microsoft Entra в качестве пароля, как показано на рисунке выше.

В настоящее время мы протестировали следующие клиенты:

  • MySQLWorkbench
  • MySQL CLI

Мы также протестировали наиболее распространенные драйверы приложений. Подробные сведения можно просмотреть в конце этой страницы.

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

Необходимые компоненты

Вы можете выполнить этот процесс в Azure Cloud Shell, на виртуальной машине Azure или на локальном компьютере. Убедитесь, что у вас установлен Azure CLI.

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

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

az login

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

Шаг 2. Получение маркера доступа Microsoft Entra

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

Пример (для общедоступного облака)

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

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

az cloud show

Для Azure CLI 2.0.71 и более поздних версий команду можно указать в следующей более удобной версии для всех облаков.

az account get-access-token --resource-type oss-rdbms

В среде 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. Следующая команда PowerShell позволяет проверить действительность маркера.

$accessToken.ExpiresOn.DateTime

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

При подключении в качестве пароля пользователя MySQL необходимо использовать маркер доступа. При использовании клиентов GUI (например, MySQLWorkbench) для получения маркера можно применять описанный выше метод.

Использование MySQL CLI

При использовании CLI для подключения вы можете использовать это сокращение:

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

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

Использование MySQL Workbench

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

При подключении важно учесть следующее.

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

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

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

Создание пользователей 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.

Пример:

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

Для имен пользователей длиннее 32 символов рекомендуется использовать псевдоним, который будет применяться при подключении:

Пример:

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

Примечание.

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

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

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

Пример:

CREATE AADUSER 'Prod_DB_Readonly';

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

проверка маркера

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

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

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

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

  • C/C++
    • libmysqlclient: поддерживается
    • mysql-connector-c++: поддерживается
  • Java
    • Подключение or/J (mysql-connector-java): поддерживается, необходимо использовать useSSL параметр
  • Python
    • Подключение or/Python: поддерживается
  • Ruby
    • mysql2: поддерживается
  • .ЧИСТАЯ
    • mysql-connector-net: поддерживается, необходимо добавить подключаемый модуль для mysql_clear_password
    • mysql-net/MySql Подключение or: поддерживается
  • Node.js
    • mysqljs: не поддерживается (не отправляет маркер в cleartext без исправления)
    • node-mysql2: поддерживается
  • Perl
    • DBD::mysql: поддерживается
    • Net::MySQL: не поддерживается
  • Go
    • go-sql-driver: поддерживается, добавьте ?tls=true&allowCleartextPasswords=true в строка подключения

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