Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo explica como usar o suporte Spring Cloud Azure MySQL para ligar aplicações Spring Boot ao Base de Dados do Azure para MySQL com opções de autenticação flexíveis, incluindo autenticação Microsoft Entra sem palavra-passe.
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. Ao utilizar a autenticação Microsoft Entra, pode gerir as identidades dos utilizadores da base de dados e outros serviços serviços Microsoft numa localização central, o que simplifica a gestão de permissões.
Como funciona
O Spring Cloud Azure constrói primeiro um dos seguintes tipos de credenciais, dependendo da configuração de autenticação da aplicação:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredentialDefaultAzureCredential
Se a aplicação não encontrar nenhum destes tipos de credenciais, obtém-nas DefaultAzureCredential através das propriedades da aplicação, variáveis de ambiente, identidades geridas ou do IDE. Para obter mais informações, consulte de autenticação do Spring Cloud Azure .
O seguinte diagrama de alto nível resume como funciona a autenticação através da autenticação de credenciais OAuth com o Base de Dados do Azure para MySQL. As setas indicam vias de comunicação.
Configuração
O Spring Cloud Azure para MySQL suporta os seguintes dois níveis de opções de configuração:
As opções de configuração de autenticação global do
credentialeprofilecom prefixos despring.cloud.azure.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. Esta dependência inclui automaticamente a spring-boot-starter dependência no seu projeto.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
Observação
As ligações sem palavra-passe são suportadas a partir da versão 4.5.0.
Lembre-se de adicionar a lista de materiais spring-cloud-azure-dependencies juntamente com a dependência anterior. 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 Microsoft Entra, defina primeiro o utilizador administrador do Microsoft Entra. 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
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.
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
Crie um utilizador Microsoft Entra para o principal do serviço e conceda permissão.
Use os comandos a seguir para configurar 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)Cria um script SQL chamado create_ad_user_sp.sql para criar um utilizador não administrativo. Adicione o seguinte conteúdo e guarde-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; EOFUse 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.sqlUse o seguinte comando para remover o ficheiro temporário de script SQL:
rm create_ad_user_sp.sql
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, consumers, ou o ID do inquilino. Para obter mais informações sobre esses valores, consulte a seção
Conectar-se ao Azure MySQL com identidade gerenciada no Azure Spring Apps
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.
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.
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
Veja o azure-spring-boot-samples repositório no GitHub.