Поддержка Azure MySQL Spring Cloud
Эта статья относится к:✅ версии 4.19.0 ✅ версии 5.19.0
База данных Azure для MySQL — это служба реляционной базы данных, на базе выпуска сообщества MySQL. Для размещения базы данных MySQL в Azure можно использовать один или гибкий сервер. Это полностью управляемое предложение базы данных как услуга, которое может обрабатывать критически важные рабочие нагрузки с прогнозируемой производительностью и динамической масштабируемостью.
В 4.5.0
версии Spring Cloud Azure поддерживает различные типы учетных данных для проверки подлинности на гибком сервере Базы данных Azure для MySQL.
Поддерживаемая версия MySQL
Текущая версия начального сервера должна использовать версию гибкого сервера Базы данных Azure для MySQL 5.7
или 8.0
.
Основные функции
Подключение без пароля
Подключение без пароля использует проверку подлинности Microsoft Entra для подключения к службам Azure без хранения учетных данных в приложении, его файлах конфигурации или переменных среды. Проверка подлинности Microsoft Entra — это механизм подключения к базе данных Azure для MySQL с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службами Майкрософт в центральном расположении, что упрощает управление разрешениями.
Принцип работы
Spring Cloud Azure сначала создаст один из следующих типов учетных данных в зависимости от конфигурации проверки подлинности приложения:
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
DefaultAzureCredential
Если ни один из этих типов учетных данных не найден, DefaultAzureCredential
учетные данные будут получены из свойств приложения, переменных среды, управляемых удостоверений или интегрированной среды разработки. Дополнительные сведения см. в аутентификации Spring Cloud Azure.
На следующей высокоуровневой схеме показано, как работает проверка подлинности с помощью проверки подлинности учетных данных OAuth с базой данных Azure для MySQL. Стрелки указывают пути связи.
схема
Конфигурация
Azure Spring Cloud для MySQL поддерживает следующие два уровня параметров конфигурации:
Параметры глобальной конфигурации проверки подлинности
credential
иprofile
с префиксамиspring.cloud.azure
.Распространенные параметры конфигурации Spring Cloud для MySQL.
В следующей таблице показаны распространенные параметры конфигурации Azure Spring Cloud для MySQL:
Имя | Описание |
---|---|
spring.datasource.azure.passwordless-enabled | Следует ли включить подключения без пароля к базам данных Azure с помощью учетных данных токена Microsoft Entra OAuth2. |
spring.datasource.azure.credential.client-certificate-password | Пароль файла сертификата. |
spring.datasource.azure.credential.client-certificate-path | Путь к файлу сертификата PEM для использования при выполнении проверки подлинности субъекта-службы с помощью Azure. |
spring.datasource.azure.credential.client-id | Идентификатор клиента, используемый при выполнении проверки подлинности субъекта-службы с помощью Azure. Это устаревшее свойство. |
spring.datasource.azure.credential.client-secret | Секрет клиента, используемый при выполнении проверки подлинности субъекта-службы с помощью Azure. Это устаревшее свойство. |
spring.datasource.azure.credential.managed-identity-enabled | Следует ли включить управляемое удостоверение для проверки подлинности в Azure. Если заданы true и client-id , используйте идентификатор клиента в качестве идентификатора клиента, назначаемого пользователем. Значение по умолчанию — false . |
spring.datasource.azure.credential.password | Пароль, используемый при выполнении проверки подлинности имени пользователя или пароля в Azure. |
spring.datasource.azure.credential.username | Имя пользователя, используемое при выполнении проверки подлинности имени пользователя или пароля в Azure. |
spring.datasource.azure.profile.cloud-type | Имя облака Azure для подключения. |
spring.datasource.azure.profile.environment.active-directory-endpoint | Конечная точка Microsoft Entra для подключения. |
spring.datasource.azure.profile.tenant-id | Идентификатор клиента для ресурсов Azure. Значения, допустимые для tenant-id : common , organizations , consumers или идентификатор клиента. |
Настройка зависимостей
Добавьте в проект следующую зависимость. Это автоматически включает spring-boot-starter
зависимость в проекте транзитивно.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
Заметка
С версии 4.5.0
поддерживаются бессерверные подключения.
Не забудьте добавить spring-cloud-azure-dependencies
BOM вместе с приведенной выше зависимостью. Дополнительные сведения см. в разделе
Базовое использование
В следующих разделах показаны классические сценарии использования приложений Spring Boot.
Важный
Подключение без пароля использует проверку подлинности Microsoft Entra. Чтобы использовать проверку подлинности Microsoft Entra, сначала необходимо задать пользователя администратора Microsoft Entra. Только пользователь администратора Microsoft Entra может создавать и включать пользователей для проверки подлинности на основе идентификаторов Майкрософт. Дополнительные сведения см. в статье Use Spring Data JDBC with Azure Database for MySQL.
Подключение к Azure MySQL локально без пароля
Сведения о создании пользователей и предоставлении разрешений см. в разделе Создание пользователя, не отличного от администратора MySQL, и предоставление разрешений раздела Use Spring Data JDBC with Azure Database for MySQL.
Настройте следующие свойства в файле application.yml:
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_NON_ADMIN_USERNAME} azure: passwordless-enabled: true
Подключение к Azure MySQL с помощью субъекта-службы
Создайте пользователя Microsoft Entra для субъекта-службы и предоставьте разрешение.
Сначала используйте следующие команды, чтобы настроить некоторые переменные среды.
export AZURE_MYSQL_AZURE_AD_SP_USERID=$(az ad sp list \ --display-name <service_principal-name> \ --query '[0].appId' --output tsv) export AZURE_MYSQL_AZURE_AD_SP_USERNAME=<YOUR_MYSQL_AZURE_AD_USERNAME> export AZURE_MYSQL_SERVER_NAME=<YOUR_MYSQL_SERVER_NAME> export AZURE_MYSQL_DATABASE_NAME=<YOUR_MYSQL_DATABASE_NAME> export CURRENT_USERNAME=$(az ad signed-in-user show \ --query userPrincipalName \ --output tsv)
Затем создайте скрипт SQL с именем create_ad_user_sp.sql для создания пользователя, отличного от администратора. Добавьте следующее содержимое и сохраните его локально:
cat << EOF > create_ad_user_sp.sql SET aad_auth_validate_oids_in_tenant = OFF; CREATE AADUSER '$AZURE_MYSQL_AZURE_AD_SP_USERNAME' IDENTIFIED BY '$AZURE_MYSQL_AZURE_AD_SP_USERID'; GRANT ALL PRIVILEGES ON $AZURE_MYSQL_DATABASE_NAME.* TO '$AZURE_MYSQL_AZURE_AD_SP_USERNAME'@'%'; FLUSH privileges; EOF
Используйте следующую команду, чтобы запустить скрипт SQL для создания пользователя, отличного от администратора Microsoft Entra:
mysql -h $AZURE_MYSQL_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user_sp.sql
Теперь используйте следующую команду, чтобы удалить временный файл скрипта SQL:
rm create_ad_user_sp.sql
Настройте следующие свойства в файле application.yml:
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_SP_USERNAME} azure: passwordless-enabled: true
Заметка
Значения, допустимые для tenant-id
: common
, organizations
, consumers
или идентификатор клиента. Дополнительные сведения об этих значениях см. в разделе Используется неправильная конечная точка (личные учетные записи и учетные записи организации) ошибки AADSTS50020. Учетная запись пользователя от поставщика удостоверений не существует вклиента. Сведения о преобразовании приложения с одним клиентом см. в статье Преобразование однотенантного приложения в мультитенантное приложение наидентификатора Microsoft Entra.
Подключение к Azure MySQL с помощью управляемого удостоверения в Azure Spring Apps
Чтобы включить управляемое удостоверение, см. раздел Назначение управляемого удостоверения с помощью портала Azure раздела Миграция приложения для использования бессерверных подключений с базой данных Azure для MySQL.
Сведения о предоставлении разрешений см. в разделе Назначение ролей управляемому удостоверению раздела Миграция приложения на использование бессерверных подключений с базой данных Azure для MySQL.
Настройте следующие свойства в файле application.yml:
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_MI_USERNAME} azure: passwordless-enabled: true
Образцы
См. репозиторий azure-spring-boot-samples на сайте GitHub.