Поделиться через


Поддержка 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. Стрелки указывают пути связи.

схема с проверкой подлинности Microsoft Entra для MySQL.

Конфигурация

Azure Spring Cloud для MySQL поддерживает следующие два уровня параметров конфигурации:

  1. Параметры глобальной конфигурации проверки подлинности credential и profile с префиксами spring.cloud.azure.

  2. Распространенные параметры конфигурации 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 Cloud Azure.

Базовое использование

В следующих разделах показаны классические сценарии использования приложений Spring Boot.

Важный

Подключение без пароля использует проверку подлинности Microsoft Entra. Чтобы использовать проверку подлинности Microsoft Entra, сначала необходимо задать пользователя администратора Microsoft Entra. Только пользователь администратора Microsoft Entra может создавать и включать пользователей для проверки подлинности на основе идентификаторов Майкрософт. Дополнительные сведения см. в статье Use Spring Data JDBC with Azure Database for MySQL.

Подключение к Azure MySQL локально без пароля

  1. Сведения о создании пользователей и предоставлении разрешений см. в разделе Создание пользователя, не отличного от администратора MySQL, и предоставление разрешений раздела Use Spring Data JDBC with Azure Database for MySQL.

  2. Настройте следующие свойства в файле 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 с помощью субъекта-службы

  1. Создайте пользователя Microsoft Entra для субъекта-службы и предоставьте разрешение.

    1. Сначала используйте следующие команды, чтобы настроить некоторые переменные среды.

      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)
      
    2. Затем создайте скрипт 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
      
    3. Используйте следующую команду, чтобы запустить скрипт 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
      
    4. Теперь используйте следующую команду, чтобы удалить временный файл скрипта SQL:

      rm create_ad_user_sp.sql
      
  2. Настройте следующие свойства в файле 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

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

  2. Сведения о предоставлении разрешений см. в разделе Назначение ролей управляемому удостоверению раздела Миграция приложения на использование бессерверных подключений с базой данных Azure для MySQL.

  3. Настройте следующие свойства в файле 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.