Compartilhar via


Usar o Microsoft Entra ID para autenticação com o MySQL

APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor único

Importante

O servidor único do Banco de Dados do Azure para MySQL está no caminho da desativação. É altamente recomendável que você atualize para o servidor flexível do Banco de Dados do Azure para MySQL. Para obter mais informações sobre a migração para o servidor flexível do Banco de Dados do Azure para MySQL, confira O que está acontecendo com o Servidor Único do Banco de Dados do Azure para MySQL?

Este artigo orientará você pelas etapas de configuração de acesso ao Microsoft Entra ID com o Banco de Dados do Azure para MySQL e mostrará como se conectar usando um token do Microsoft Entra.

Importante

A autenticação do Microsoft Entra só está disponível para o MySQL 5.7 e mais recente.

Como configurar o usuário Administrador do Microsoft Entra

Somente um usuário administrador do Microsoft Entra podem criar/habilitar usuários para a autenticação baseada no Microsoft Entra ID. Para criar um usuário administrador do Microsoft Entra, execute as etapas a seguir

  1. No portal do Azure, selecione a instância do Banco de Dados do Azure para MySQL que você quer habilitar para o Microsoft Entra ID.
  2. Em Configurações, selecione Administrador do Active Directory:

definir administrador do Microsoft Entra

  1. Selecione um usuário válido do Microsoft Entra no locatário do cliente para ser administrador do Microsoft Entra.

Importante

Ao definir o administrador, um novo usuário é adicionado ao servidor do Banco de Dados do Azure para MySQL com permissões completas de administrador.

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

Depois de configurar o administrador, será possível entrar:

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

O diagrama de alto nível a seguir resume o fluxo de trabalho do uso da autenticação do Microsoft Entra com o Banco de Dados do Azure para MySQL:

fluxo de autenticação

Projetamos a integração do Microsoft Entra para funcionar com ferramentas comuns do MySQL, como a CLI mysql, que não reconhecem o Microsoft Entra e só dão suporte à especificação de nome de usuário e senha quando se conectam ao MySQL. Transmitimos o token do Microsoft Entra como uma senha, conforme mostrado na imagem acima.

No momento, testamos os clientes a seguir:

  • MySQLWorkbench
  • CLI do MySQL

Também testamos os drivers de aplicativos mais comuns. Veja os detalhes no final desta página.

Essas são as etapas que um usuário/aplicativo precisará executar para se autenticar no Microsoft Entra, descritas abaixo:

Pré-requisitos

Você pode acompanhar as etapas no Azure Cloud Shell, em uma VM do Azure ou no computador local. Garanta que você tem o CLI do Azure instalado.

Etapa 1: Autenticar com o Microsoft Entra ID

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

az login

O comando abrirá uma janela do navegador para a página de autenticação do Microsoft Entra. Isso requer que você forneça sua ID de usuário do Microsoft Entra e a senha.

Etapa 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 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, é possível pesquisar o valor do recurso usando:

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

Após a autenticação ter sido bem-sucedida, o Microsoft Entra ID retornará um token de acesso:

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

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

A validade do token de acesso está entre 5 e 60 minutos. Recomendamos que você obtenha o token de acesso logo antes de iniciar o logon no 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

Etapa 3: Use o token como senha para fazer logon no MySQL

Ao se conectar, é preciso usar o token de acesso como a senha de usuário do MySQL. Ao usar clientes de GUI, como MySQLWorkbench, é possível usar o método descrito acima para recuperar o token.

Usando a CLI do MySQL

Ao usar a CLI, é possível usar essa alternativa para se conectar:

Exemplo (Linux/macOS):

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

Usando o MySQL Workbench

  • Inicie o MySQL Workbench e clique na opção Banco de Dados e, em seguida, clique em "Conectar-se ao banco de dados"
  • No campo de nome do host, insira o FQDN do MySQL, por exemplo. mydb.mysql.database.azure.com
  • No campo de nome de usuário, insira o nome do administrador do Microsoft Entra MySQL e acrescente a ele o nome do servidor do MySQL, não o FQDN, por exemplo, user@tenant.onmicrosoft.com@mydb
  • No campo senha, clique em "Armazenar no Cofre" e cole no token de acesso do arquivo, por exemplo, C:\temp\MySQLAccessToken.txt
  • Clique na guia avançado e verifique se você marcou "Habilitar Plug-in de Autenticação Cleartext"
  • Clique em OK para se conectar ao banco de dados

Considerações importantes durante a conexão:

  • user@tenant.onmicrosoft.com é o nome do usuário ou do grupo do Microsoft Entra com o qual você está tentando se conectar
  • Sempre acrescente o nome do servidor após o nome de usuário/grupo do Microsoft Entra (por exemplo, @mydb)
  • 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 apenas o nome do grupo (por exemplo, GroupName@mydb)
  • Se o nome contiver espaços, use \ antes de cada espaço para fazer o escape dele

Observe 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 MySQL usando a autenticação do Microsoft Entra.

Como 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 do seu Banco de Dados do Azure para MySQL, execute as etapas a seguir após ter se conectado (confira a seção mais adiante sobre como se conectar):

  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';

Para nomes de usuário que excedem 32 caracteres, é recomendável usar um alias como alternativa, para ser usado ao conectar:

Exemplo:

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

Observação

  1. O MySQL ignora espaços no início e no final, portanto, o nome de usuário não deve ter espaços no início nem no final.
  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.

Como 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 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 usarão os tokens de acesso pessoal deles, mas assinarão com o nome do grupo especificado como o nome de usuário.

Validação de token

A autenticação do Microsoft Entra no Banco de Dados do Azure para MySQL garante que o usuário existe no servidor MySQL e verifica a validade do token por meio da validação do conteúdo do token. As seguintes etapas de validação de token são executadas:

  • O token é assinado pelo Microsoft Entra ID e não foi adulterado
  • O token foi emitido pelo Microsoft Entra ID para o locatário associado ao servidor
  • O token não expirou
  • O token é para o recurso do Banco de Dados do Azure para MySQL (não para outro recurso do Azure)

Compatibilidade com drivers de aplicativo

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

  • 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 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

Próximas etapas