Suporte ao MySQL do Spring Cloud Azure

Este artigo aplica-se a: ✔️ Versão 4.14.0 Versão 5.8.0 ✔️

O Banco de Dados do Azure para MySQL é um serviço de banco de dados relacional desenvolvido pela edição da comunidade MySQL . É possível usar um Servidor Único ou um Servidor Flexível para hospedar um banco de dados MySQL no Azure. É uma oferta de banco de dados como serviço totalmente gerenciada que pode lidar com cargas de trabalho de missão crítica com desempenho previsível e escalabilidade dinâmica.

A partir da versão 4.5.0, o Spring Cloud Azure oferece suporte a vários tipos de credenciais para autenticação no Banco de Dados do Azure para servidor flexível MySQL.

Versão suportada do MySQL

A versão atual do iniciador deve usar o Banco de Dados do Azure para a versão 5.7 do MySQL Flexible Server ou 8.0.

Principais recursos

Conexão sem senha

A conexão sem senha usa a autenticação do Microsoft Entra para se conectar aos serviços do Azure sem armazenar credenciais no aplicativo, em seus arquivos de configuração ou em variáveis de ambiente. A autenticação do Microsoft Entra é um mecanismo para conexão ao Banco de Dados do Azure para MySQL que usa as identidades definidas no Microsoft Entra ID. Com a autenticação do Microsoft Entra, você pode gerenciar as identidades de usuários do banco de dados e outros serviços da Microsoft em uma só localização central, o que simplifica o gerenciamento de permissões.

Como ele funciona

O Spring Cloud Azure primeiro criará um dos seguintes tipos de credenciais, dependendo da configuração de autenticação do aplicativo:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Se nenhum desses tipos de credenciais for encontrado, as DefaultAzureCredential credenciais serão obtidas de propriedades do aplicativo, variáveis de ambiente, identidades gerenciadas ou do IDE. Para obter mais informações, consulte Autenticação do Spring Cloud Azure.

O diagrama de alto nível a seguir resume como a autenticação funciona usando a autenticação de credenciais OAuth com o Banco de Dados do Azure para MySQL. As setas indicam caminhos para comunicação.

Diagram showing Microsoft Entra authentication for MySQL.

Configuração

O Spring Cloud Azure para MySQL oferece suporte aos dois níveis de opções de configuração a seguir:

  1. As opções de configuração de autenticação global de e profile com prefixos de .credentialspring.cloud.azure

  2. Opções de configuração comuns do Spring Cloud Azure para MySQL.

A tabela a seguir mostra as opções de configuração comuns do Spring Cloud Azure para MySQL:

Nome Descrição
spring.datasource.azure.passwordless-enabled Se deseja habilitar conexões sem senha com bancos de dados do Azure usando credenciais de token do Microsoft Entra OAuth2.
spring.datasource.azure.credential.client-certificate-password Senha do arquivo de certificado.
spring.datasource.azure.credential.client-certificate-path Caminho de um arquivo de certificado PEM a ser usado ao executar a autenticação da entidade de serviço com o Azure.
spring.datasource.azure.credential.client-id ID do cliente a ser usada ao executar a autenticação da entidade de serviço com o Azure. Esta é uma propriedade herdada.
spring.datasource.azure.credential.client-secret Segredo do cliente a ser usado ao executar a autenticação da entidade de serviço com o Azure. Esta é uma propriedade herdada.
spring.datasource.azure.credential.managed-identity-enabled Se a identidade gerenciada deve ser habilitada para autenticação com o Azure. Se true e o estiver definido, usará o ID do cliente como ID do client-id cliente de identidade gerenciada atribuído ao usuário. O valor padrão é falso.
spring.datasource.azure.credential.password Senha a ser usada ao executar a autenticação de nome de usuário/senha com o Azure.
spring.datasource.azure.credential.username Nome de usuário a ser usado ao executar a autenticação de nome de usuário/senha com o Azure.
spring.datasource.azure.profile.cloud-type Nome da nuvem do Azure à qual se conectar.
spring.datasource.azure.profile.environment.active-directory-endpoint O ponto de extremidade do Microsoft Entra ao qual se conectar.
spring.datasource.azure.profile.tenant-id ID do locatário para recursos do Azure. Os valores permitidos sãotenant-id: common, , , organizationsconsumersou o ID do locatário.

Configuração de dependência

Adicione a seguinte dependência ao seu projeto. Isso incluirá automaticamente a spring-boot-starter dependência em seu projeto transitivamente.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>

Observação

Conexões sem senha são suportadas desde a versão 4.5.0.

Lembre-se de adicionar a BOM spring-cloud-azure-dependencies junto com a dependência acima. Para obter mais informações, consulte a seção Introdução do guia do desenvolvedor do Spring Cloud Azure.

Uso básico

As seções a seguir mostram os cenários clássicos de uso do aplicativo Spring Boot.

Importante

A conexão sem senha usa a autenticação do Microsoft Entra. Para usar a autenticação do Microsoft Entra, você deve definir o usuário administrador do Microsoft Entra primeiro. Somente um usuário administrador do Microsoft Entra pode criar e habilitar usuários para autenticação baseada em ID do Microsoft Entra. Para obter mais informações, consulte Usar JDBC de dados Spring com o Banco de Dados do Azure para MySQL.

Conectar-se ao Azure MySQL localmente sem senha

  1. Para criar usuários e conceder permissão, consulte a seção Criar um usuário não administrador do MySQL e conceder permissão de Usar JDBC de dados Spring com o Banco de Dados do Azure para MySQL.

  2. Configure as seguintes propriedades no arquivo 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
    

Conectar-se ao MySQL do Azure usando uma entidade de serviço

  1. Crie um usuário do Microsoft Entra para a entidade de serviço e conceda permissão.

    1. Primeiro, use os comandos a seguir para configurar algumas variáveis de ambiente.

      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. Em seguida, crie um script SQL chamado create_ad_user_sp.sql para criar um usuário não administrador. Adicione o seguinte conteúdo e salve-o localmente:

      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. Use o seguinte comando para executar o script SQL para criar o usuário não administrador do 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. Agora, use o seguinte comando para remover o arquivo de script SQL temporário:

      rm create_ad_user_sp.sql
      
  2. Configure as seguintes propriedades no arquivo 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
    

Observação

Os valores permitidos sãotenant-id: common, , , organizationsconsumersou o ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Usado o ponto de extremidade errado (contas pessoais e de organização) do Erro AADSTS50020 - A conta de usuário do provedor de identidade não existe no locatário. Para obter informações sobre como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.

Conectar-se ao Azure MySQL com identidade gerenciada nos aplicativos do Azure Spring

  1. Para habilitar a identidade gerenciada, consulte a seção Atribuir a identidade gerenciada usando o portal do Azure de Migrar um aplicativo para usar conexões sem senha com o Banco de Dados do Azure para MySQL.

  2. Para conceder permissões, consulte a seção Atribuir funções à identidade gerenciada de Migrar um aplicativo para usar conexões sem senha com o Banco de Dados do Azure para MySQL.

  3. Configure as seguintes propriedades no arquivo 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
    

Exemplos

Consulte o repositório azure-spring-boot-samples no GitHub.