Compartilhar via


Configurar a autenticação do Microsoft Entra para o Banco de Dados do Azure para MySQL – Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor flexível

Este tutorial mostra como configurar a autenticação do Microsoft Entra para o servidor flexível do Banco de Dados do Azure para MySQL.

Neste tutorial, você aprenderá a:

  • Configure o administrador do Microsoft Entra.
  • Conecte-se ao servidor flexível do Banco de Dados do Azure para MySQL usando o Microsoft Entra ID.

Pré-requisitos

Configurar o administrador do Microsoft Entra

Para criar um usuário administrador do Microsoft Entra, siga as etapas a seguir.

  • No portal do Azure, selecione a instância do servidor flexível do Banco de Dados do Azure para MySQL que você deseja habilitar para o Microsoft Entra ID.

  • No painel “Segurança”, selecione Autenticação: Diagrama de como configurar a autenticação do Microsoft Entra.

  • Existem três tipos de autenticação disponíveis:

    • Somente autenticação MySQL – por padrão, o MySQL usa o plug-in de autenticação mysql_native_password interno, que executa a autenticação usando o método de hash de senha nativa

    • Somente autenticação do Microsoft Entra – só permite a autenticação com uma conta do Microsoft Entra. Desabilita a autenticação mysql_native_password e ATIVA o parâmetro do servidor aad_auth_only

    • Autenticação do MySQL e do Microsoft Entra – permite a autenticação usando uma senha nativa do MySQL ou uma conta do Microsoft Entra. DESATIVA o parâmetro do servidor aad_auth_only

  • Selecionar Identidade – selecione/adicione a identidade gerenciada atribuída pelo usuário. As permissões a seguir são necessárias para permitir que a UMI leia o Microsoft Graph como a identidade do servidor. Como alternativa, dê à identidade gerenciada atribuída pelo usuário a função Leitores de Diretório.

    • User.Read.All: permite acesso às informações de usuário do Microsoft Entra.
    • GroupMember.Read.All: permite acesso às informações de grupo do Microsoft Entra.
    • Application.Read.ALL: permite o acesso às informações da entidade de serviço do Microsoft Entra (aplicativos).

Importante

Somente um usuário com pelo menos a função Administrador Privilegiado pode conceder essas permissões.

  • Selecione um grupo ou usuário válido do Microsoft Entra no locatário do cliente para ser administrador do Microsoft Entra. Depois que o suporte à autenticação do Microsoft Entra tiver sido habilitado, os Administradores do Microsoft Entra poderão ser adicionados como entidades de segurança com permissão para adicionar usuários do Microsoft Entra ao servidor MySQL.

    Observação

    Somente um administrador do Microsoft Entra pode ser criado por servidor MySQL, e a seleção de um outro substitui o administrador do Microsoft Entra existente configurado para o servidor.

Conceder permissões à identidade gerenciada atribuída pelo usuário

O script de exemplo do PowerShell a seguir concede as permissões necessárias para uma UMI. Este exemplo atribui permissões à UMI umiservertest.

Para executar o script, você deve entrar como um usuário com uma função Administrador Global ou Administrador de Funções Com Privilégios.

O script concede as permissões User.Read.All, GroupMember.Read.All e Application.Read.ALL a uma UMI ou uma SMI para acessar o Microsoft Graph.

# Script to assign permissions to the UMI "umiservertest"

import-module AzureAD
$tenantId = '<tenantId>' # Your Azure AD tenant ID

Connect-AzureAD -TenantID $tenantId
# Log in as a user with a "Global Administrator" or "Privileged Role Administrator" role
# Script to assign permissions to an existing UMI 
# The following Microsoft Graph permissions are required: 
#   User.Read.All
#   GroupMember.Read.All
#   Application.Read.ALL

# Search for Microsoft Graph
$AAD_SP = Get-AzureADServicePrincipal -SearchString "Microsoft Graph";
$AAD_SP
# Use Microsoft Graph; in this example, this is the first element $AAD_SP[0]

#Output

#ObjectId                             AppId                                DisplayName
#--------                             -----                                -----------
#47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44e2d3f6-97c3-4bc7-9ccd-e26746638b6d 0bf30f3b-4a52-48df-9a82-234910c4a086 Microsoft Graph #Change 

$MSIName = "<managedIdentity>";  # Name of your user-assigned
$MSI = Get-AzureADServicePrincipal -SearchString $MSIName 
if($MSI.Count -gt 1)
{ 
Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"

# Choose the right UMI

Exit
} 

# If you have more UMIs with similar names, you have to use the proper $MSI[ ]array number

# Assign the app roles

$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id 
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id

Nas etapas finais do script, se você tiver mais UMIs com nomes semelhantes, será necessário usar o número $MSI[ ]array adequado. Um exemplo é $AAD_SP.ObjectId[0].

Verificar permissões da identidade gerenciada atribuída pelo usuário

Para verificar permissões de uma UMI, acesse o portal do Azure. No recurso Microsoft Entra ID, acesse Aplicativos empresariais. Selecione Todos os Aplicativos em Tipo de aplicativo e procure a UMI que foi criada.

Selecione a UMI e acesse as configurações de Permissões em Segurança.

Depois de conceder as permissões à UMI, elas são habilitadas para todos os servidores criados com a UMI designada como uma identidade de servidor.

Conectar-se ao servidor flexível do Banco de Dados do Azure para MySQL usando o Microsoft Entra ID

1 – Autenticar-se com o Microsoft Entra ID

Comece se autenticando com o Microsoft Entra ID usando a ferramenta de CLI do Azure.
(Esta etapa não é necessária no Azure Cloud Shell.)

  • Entre na conta do Azure usando o comando az login. Observe a propriedade ID, que se refere à ID da assinatura da conta do Azure:

    az login
    

O comando inicia uma janela do navegador na página de autenticação do Microsoft Entra. Ele exige que você forneça a ID de usuário e a senha do Microsoft Entra.

  • Se você tiver várias assinaturas, escolha a assinatura apropriada usando o comando az account set:

    az account set --subscription \<subscription id\>
    

2 – Recuperar o token de acesso do Microsoft Entra

Invoque a ferramenta de CLI do Azure para adquirir um token de acesso para o usuário autenticado do Microsoft Entra da etapa 1 e acessar o servidor flexível do Banco de Dados do Azure para MySQL.

  • Exemplo (para nuvem pública):

    az account get-access-token --resource https://ossrdbms-aad.database.windows.net
    
  • O valor do recurso acima deve ser especificado exatamente como o mostrado. Para outras nuvens, o valor do recurso pode ser pesquisado usando o seguinte:

    az cloud show
    
  • Para a versão 2.0.71 do CLI do Azure e posteriores, o comando pode ser especificado na seguinte versão mais conveniente para todas as nuvens:

    az account get-access-token --resource-type oss-rdbms
    
  • Usando o PowerShell, você pode usar o seguinte comando para adquirir o token de acesso:

    $accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
    $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
    

Depois que a autenticação for bem-sucedida, o Microsoft Entra ID retornará um token de acesso:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

O token é uma cadeia de caracteres Base64 que codifica todas as informações sobre o usuário autenticado e tem como destino o serviço do Banco de Dados do Azure para MySQL.

A validade do token de acesso está entre 5 e 60 minutos. É recomendável obter o token de acesso antes de entrar no servidor flexível do Banco de Dados do Azure para MySQL.

  • Você pode usar o comando do PowerShell a seguir para ver a validade do token.
   $accessToken.ExpiresOn.DateTime

3) Usar um token como senha para entrar no MySQL

É necessário usar o token de acesso como a senha do usuário do MySQL ao se conectar. É possível usar o método descrito acima para recuperar o token por meio de clientes da GUI, como o MySQL Workbench.

Conectar-se ao Banco de Dados do Azure para MySQL ─ Servidor Flexível usando a CLI do MySQL

Com a CLI, é possível usar este atalho para se conectar:

Exemplo (Linux/macOS):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

Exemplo (PowerShell)

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)


mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$((Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net).Token)

Conectar-se ao Banco de Dados do Azure para MySQL ─ Servidor Flexível usando o MySQL Workbench

  • Inicie o MySQL Workbench, selecione a opção “Banco de dados” e clique em Conectar ao banco de dados.
  • No campo de nome do host, insira o FQDN do MySQL, por exemplo, mysql.database.azure.com.
  • No campo nome de usuário, insira o nome de administrador do Microsoft Entra do MySQL. Por exemplo, user@tenant.onmicrosoft.com.
  • No campo de senha, clique em Armazenar no cofre e cole o token de acesso do arquivo, por exemplo, C:\temp\MySQLAccessToken.txt.
  • Clique na guia “Avançado” e marque Habilitar plug-in de autenticação de texto não criptografado.
  • Selecione OK para se conectar ao banco de dados.

Considerações importantes ao conectar-se

  • user@tenant.onmicrosoft.com é o nome do usuário ou do grupo do Microsoft Entra como o qual você está tentando se conectar
  • Certifique-se de usar o nome do usuário ou do grupo do Microsoft Entra exatamente como está escrito
  • Os nomes de usuários e grupos do Microsoft Entra diferenciam maiúsculas de minúsculas
  • Ao se conectar como um grupo, use somente o nome do grupo (por exemplo, GroupName)
  • Se o nome contiver espaços, use \ antes de cada espaço para fazer o escape dele

Observação

A configuração "enable-cleartext-plugin": é preciso usar uma configuração semelhante com outros clientes para garantir que o token seja enviado ao servidor sem que haja hash.

Agora você está autenticado no servidor flexível do MySQL usando a autenticação do Microsoft Entra.

Outros comandos de administrador do Microsoft Entra

  • Gerenciar administrador do Active Directory do servidor

    az mysql flexible-server ad-admin
    
  • Criar um administrador do Active Directory

    az mysql flexible-server ad-admin create
    

    Exemplo: Criar administrador do Active Directory com o usuário 'john@contoso.com', ID do administrador '00000000-0000-0000-0000-000000000000' e identidade 'test-identity'

    az mysql flexible-server ad-admin create -g testgroup -s testsvr -u john@contoso.com -i 00000000-0000-0000-0000-000000000000 --identity test-identity
    
  • Excluir um administrador do Active Directory

    az mysql flexible-server ad-admin delete
    

    Exemplo: excluir administrador do Active Directory

    az mysql flexible-server ad-admin delete -g testgroup -s testsvr
    
  • Listar todos os administradores do Active Directory

    az mysql flexible-server ad-admin list
    

    Exemplo: listar administradores do Active Directory

    az mysql flexible-server ad-admin list -g testgroup -s testsvr
    
  • Obter um administrador do Active Directory

    az mysql flexible-server ad-admin show
    

    Exemplo: obter administrador do Active Directory

    az mysql flexible-server ad-admin show -g testgroup -s testsvr
    
  • Aguardar até que o administrador do Active Directory cumpra determinadas condições

    az mysql flexible-server ad-admin wait
    

    Exemplos:

    • Aguardar até que o administrador do Active Directory exista
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
    
    • Aguardar até que o administrador do Active Directory seja excluído
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
    

Criar usuários do Microsoft Entra no Banco de Dados do Azure para MySQL

Para adicionar um usuário do Microsoft Entra ao banco de dados referente a Banco de Dados do Azure para MySQL, execute as seguintes etapas após a conexão:

  1. Primeiro, certifique-se de que o usuário <user>@yourtenant.onmicrosoft.com do Microsoft Entra é um usuário válido no locatário do Microsoft Entra.
  2. Entre na sua instância do Banco de Dados do Azure para MySQL como o usuário Administrador do Microsoft Entra.
  3. Criar usuário <user>@yourtenant.onmicrosoft.com no Banco de Dados do Azure para MySQL.

Exemplo:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

No caso de nomes de usuário que excedam 32 caracteres, é recomendado o uso de um alias para a conexão:

Exemplo:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';

Observação

  1. O MySQL ignora espaços à esquerda e à direita, portanto, o nome do usuário não deve ter nenhum espaço.
  2. A autenticação de um usuário por meio do Microsoft Entra não concede ao usuário nenhuma permissão para acessar objetos dentro do banco de dados do Banco de Dados do Azure para MySQL. Você precisa conceder ao usuário as permissões necessárias manualmente.

Criar grupos do Microsoft Entra no Banco de Dados do Azure para MySQL

Para habilitar um grupo do Microsoft Entra a acessar seu banco de dados, use exatamente o mesmo mecanismo usado para os usuários, mas especifique o nome do grupo:

Exemplo:

CREATE AADUSER 'Prod_DB_Readonly';

Ao fazer logon, os membros do grupo usam os tokens de acesso pessoal deles, mas entram com o nome do grupo especificado como o nome de usuário.

Compatibilidade com drivers de aplicativo

A maioria dos drivers é compatível. No entanto, use as configurações adequadas para enviar a senha em texto não criptografado, a fim de que o token seja enviado sem modificação.

  • C/C++

    • libmysqlclient: Com suporte
    • mysql-connector-c++: Com suporte
  • Java

    • Connector/J (mysql-connector-java): Compatível, é preciso utilizar a configuração useSSL
  • Python

    • Conector/Python: Com suporte
  • Ruby

    • mysql2: Com suporte
  • .NET

    • mysql-connector-net: Compatível, é necessário adicionar o plug-in para mysql_clear_password
    • mysql-net/MySqlConnector: Com suporte
  • Node.js

    • mysqljs: não compatível (não envia o token em texto não criptografado sem patch)
    • node-mysql2: Com suporte
  • Perl

    • DBD::mysql: Com suporte
    • Net::MySQL: Sem suporte
  • Go

    • go-sql-driver: Compatível, adicione ?tls=true&allowCleartextPasswords=true à cadeia de conexão
  • PHP

    • Extensão mysqli: com suporte

    • Driver PDO_MYSQL: com suporte

Próximas etapas