Partilhar via


Suporte ao Spring Cloud Azure MySQL

Banco de Dados do Azure para MySQL é um serviço de banco de dados relacional alimentado pela edição da comunidade MySQL. Você pode usar o Servidor Único ou o 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 dá suporte a vários tipos de credenciais para autenticação no Banco de Dados do Azure para o servidor MySQL Flexível.

Versão MySQL suportada

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

Principais características

Ligação sem palavra-passe

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 se conectar ao Banco de Dados do Azure para MySQL usando identidades definidas na ID do Microsoft Entra. Com a autenticação do Microsoft Entra, você pode gerenciar identidades de usuário de banco de dados e outros serviços da Microsoft em um local central, o que simplifica o gerenciamento de permissões.

Como 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 credenciais DefaultAzureCredential serão obtidas das propriedades do aplicativo, variáveis de ambiente, identidades gerenciadas ou do IDE. Para obter mais informações, consulte de 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 vias de comunicação.

Diagrama mostrando a autenticação do Microsoft Entra para MySQL.

Configuração

O Spring Cloud Azure para MySQL suporta os seguintes dois níveis de opções de configuração:

  1. As opções de configuração de autenticação global do credential e profile com prefixos de spring.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:

Designação Descrição
spring.datasource.azure.passwordless-enabled Se é necessário habilitar conexões sem senha para bancos de dados do Azure usando credenciais de token OAuth2 Microsoft Entra.
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 legada.
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 legada.
spring.datasource.azure.credential.managed-identity-enabled Se a identidade gerenciada deve ser habilitada para autenticação com o Azure. Se true e o client-id estiver definido, usará o ID do cliente como ID do cliente de identidade gerenciada atribuído ao usuário. O valor padrão é false.
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 para tenant-id são: common, organizations, consumersou o ID do locatário.

Configuração de dependência

Adicione a seguinte dependência ao seu projeto. Isso incluirá automaticamente a dependência spring-boot-starter 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 lista técnica spring-cloud-azure-dependencies juntamente com a dependência acima. Para obter mais informações, consulte a seção Introdução do guia do desenvolvedor do Spring Cloud Azure.

Utilização básica

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 o Spring Data JDBC 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 o JDBC do Spring Data 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 Azure MySQL 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 seguintes comandos 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 para tenant-id são: common, organizations, consumersou 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) de AADSTS50020 de erro - A conta de usuário do provedor de identidade não existe nodo 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 no Azure Spring Apps

  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 ao de identidade gerenciado 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
    

Amostras

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