Compartir a través de


Uso de Microsoft Entra ID para la autenticación con MySQL

SE APLICA A: Azure Database for MySQL: Servidor único

Importante

El servidor único de Azure Database for MySQL está en la ruta de retirada. Se recomienda encarecidamente actualizar al servidor flexible de Azure Database for MySQL. Para más información sobre la migración al servidor flexible de Azure Database for MySQL, consulte ¿Qué ocurre con Azure Database for MySQL con servidor único?

Este artículo le guiará por los pasos para configurar el acceso a Microsoft Entra ID con Azure Database for MySQL, y cómo conectarse con un token de Microsoft Entra.

Importante

La autenticación de Microsoft Entra solo está disponible para MySQL 5.7 y posterior.

Establecimiento del usuario administrador de Microsoft Entra

Solo los usuarios administradores de Microsoft Entra pueden crear y habilitar usuarios para la autenticación basada en Microsoft Entra ID. Para crear un usuario administrador de Microsoft Entra, siga estos pasos:

  1. En Azure Portal, seleccione la instancia de Azure Database for MySQL que quiere habilitar para Microsoft Entra ID.
  2. En Configuración, seleccione Administrador de Active Directory:

set Microsoft Entra administrator

  1. Seleccione un usuario válido de Microsoft Entra en el inquilino del cliente para que sea administrador de Microsoft Entra.

Importante

Al establecer el administrador, se agrega un nuevo usuario al servidor de Azure Database for MySQL con permisos de administrador totales.

Solo se puede crear un administrador de Microsoft Entra por servidor MySQL y la selección de otro sobrescribirá al administrador de Microsoft Entra existente configurado para el servidor.

Después de configurar el administrador, ahora puede iniciar sesión:

Conexión a Azure Database for MySQL con Microsoft Entra ID

En el siguiente diagrama general se resume el flujo de trabajo del uso de la autenticación de Microsoft Entra con Azure Database for MySQL:

authentication flow

Hemos diseñado la integración de Microsoft Entra para que funcione con herramientas comunes de MySQL, como la CLI de mysql, que no son compatibles con Microsoft Entra y solo admiten la especificación de nombre de usuario y contraseña al conectarse a MySQL. Pasamos el token de Microsoft Entra como la contraseña tal como se muestra en la imagen anterior.

Actualmente hemos probado a los siguientes clientes:

  • MySQLWorkbench
  • CLI de MySQL

También hemos probado los controladores de aplicación más comunes, puede ver los detalles al final de esta página.

Los pasos que se describen a continuación son los que debe seguir un usuario o una aplicación para autenticarse con Microsoft Entra ID:

Requisitos previos

Puede seguir en Azure Cloud Shell, en una máquina virtual de Azure o en su equipo local. Asegúrese de que tiene instalado el CLI de Azure.

Paso 1: Autenticación con Microsoft Entra ID

Para empezar, autentíquese en Microsoft Entra ID con la CLI de Azure. Este paso no es necesario en Azure Cloud Shell.

az login

El comando iniciará una ventana del explorador en la página de autenticación de Microsoft Entra. Requiere que proporcione el identificador de usuario y la contraseña de Microsoft Entra.

Paso 2: recuperación del token de acceso de Microsoft Entra

Invoque la herramienta CLI de Azure para adquirir un token de acceso para el usuario autenticado de Microsoft Entra del paso 1 y acceder a Azure Database for MySQL.

Ejemplo (para la nube pública):

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

El valor del recurso anterior debe especificarse exactamente como se muestra. En el caso de otras nubes, el valor del recurso se puede buscar usando:

az cloud show

En la versión 2.0.71 de CLI de Azure y posteriores, el comando se puede especificar en la siguiente versión más conveniente para todas las nubes:

az account get-access-token --resource-type oss-rdbms

Con PowerShell puede usar el siguiente comando para adquirir tokens de acceso:

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

Una vez que la autenticación se realiza correctamente, Microsoft Entra ID devolverá un token de acceso:

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

El token es una cadena de Base 64 que codifica toda la información sobre el usuario autenticado, y que está dirigida al servicio de Azure Database for MySQL.

La validez del token de acceso es de entre 5 y 60 minutos. Se recomienda obtener el token de acceso justo antes del inicio de sesión en Azure Database for MySQL. Puede usar el siguiente comando de PowerShell para ver la validez del token.

$accessToken.ExpiresOn.DateTime

Paso 3: Usar el token como contraseña para iniciar sesión con MySQL

Al conectarse, debe usar el token de acceso como contraseña de usuario de MySQL. Al usar clientes de GUI, como MySQLWorkbench, puede utilizar el método anterior para recuperar el token.

Uso de la CLI de MySQL

Al usar la CLI, puede usar este atajo para conectarse:

Ejemplo (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`

Uso de MySQL Workbench

  • Inicie MySQL Workbench, haga clic en la opción Base de datos y luego en "Conectar a base de datos"
  • En el campo nombre de host, escriba el FQDN de MySQL, por ejemplo. mydb.mysql.database.azure.com
  • En el campo de nombre de usuario, escriba el nombre de administrador de Microsoft Entra para MySQL y anéxelo con el nombre del servidor de MySQL, no con el FQDN, por ejemplo, user@tenant.onmicrosoft.com@mydb.
  • En el campo Contraseña haga clic en "Almacenar en almacén" y pegue el token de acceso del archivo, por ejemplo, C:\temp\MySQLAccessToken.txt
  • Haga clic en la pestaña Opciones avanzadas y asegúrese de activar la casilla "Habilitar el complemento de autenticación Cleartext"
  • Haga clic en Aceptar para conectarse a la base de datos

Consideraciones importantes al conectarse:

  • user@tenant.onmicrosoft.com es el nombre del usuario o grupo de Microsoft Entra al que se intenta conectar.
  • Anexe siempre el nombre del servidor después del nombre del grupo o usuario de Microsoft Entra (por ejemplo, @mydb).
  • Asegúrese de escribir de forma exacta el nombre del usuario o grupo de Microsoft Entra.
  • Los nombres de usuario y grupo de Microsoft Entra distinguen mayúsculas de minúsculas
  • Al conectarse como un grupo, use solo el nombre de grupo (por ejemplo, GroupName@mydb).
  • Si el nombre contiene espacios, utilice \ antes de cada espacio para escaparlo.

Tenga en cuenta el valor "enable-cleartext-plugin", debe usar una configuración similar con otros clientes para asegurarse de que el token se envíe al servidor sin síntesis del mensaje.

Ahora está autenticado en el servidor MySQL mediante la autenticación de Microsoft Entra.

Creación de usuarios Microsoft Entra en Azure Database for MySQL

Para agregar un usuario de Microsoft Entra a la base de datos de Azure Database for MySQL, haga lo siguiente después de la conexión (consulte más adelante la sección sobre cómo conectarse):

  1. En primer lugar, asegúrese de que el usuario de Microsoft Entra <user>@yourtenant.onmicrosoft.com sea un usuario válido en el inquilino de Microsoft Entra.
  2. Inicie sesión en la instancia de Azure Database for MySQL como usuario administrador de Microsoft Entra.
  3. Cree el usuario <user>@yourtenant.onmicrosoft.com en Azure Database for MySQL.

Ejemplo:

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

En el caso de los nombres de usuario que superen los 32 caracteres, se recomienda usar un alias en su lugar, para usarlo al conectarse:

Ejemplo:

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

Nota

  1. MySQL omite los espacios iniciales y finales, por lo que el nombre de usuario no debe tener espacios de este tipo.
  2. La autenticación de un usuario mediante Microsoft Entra ID no concede al usuario ningún permiso para tener acceso a los objetos de la base de datos de Azure Database for MySQL. Asegúrese de concederle al usuario los permisos necesarios de forma manual.

Creación de grupos de Microsoft Entra en Azure Database for MySQL

Para habilitar el acceso de un grupo de Microsoft Entra a la base de datos, use el mismo mecanismo que para los usuarios, pero en su lugar especifique el nombre del grupo:

Ejemplo:

CREATE AADUSER 'Prod_DB_Readonly';

Al iniciar sesión, los miembros del grupo usarán sus token de acceso personal, pero firmarán con el nombre del grupo especificado como nombre de usuario.

Validación de token

En la autenticación de Microsoft Entra de Azure Database for MySQL se garantiza que el usuario existe en el servidor MySQL y se comprueba la validez del token mediante la validación de su contenido. Se realizan los siguientes pasos de validación de token:

  • El token está firmado por el identificador de Microsoft Entra ID y no se ha manipulado
  • El token se emitió por Microsoft Entra ID para el suscriptor asociado con el servidor
  • El token sigue vigente
  • El token es para el recurso Azure Database for MySQL (y no para otro recurso de Azure)

Compatibilidad con controladores de aplicaciones

Se admite la mayoría de los controladores; sin embargo, asegúrese de usar la configuración para enviar la contraseña en texto sin cifrar, de modo que el token se envíe sin modificaciones.

  • C/C++
    • libmysqlclient: Compatible
    • mysql-connector-c++: Compatible
  • Java
    • Connector/J (mysql-connector-java): Compatible, debe usar la configuración useSSL
  • Python
    • Connector/Python: Compatible
  • Ruby
    • mysql2: Compatible
  • .NET
    • mysql-connector-net: Compatible, debe agregar complementos para mysql_clear_password
    • mysql-net/MySqlConnector: Compatible
  • Node.js
    • mysqljs: No compatible (no envía el token en texto no cifrado sin revisión)
    • node-mysql2: Compatible
  • Perl
    • DBD::mysql: Compatible
    • Net::MySQL: No compatible
  • Go
    • go-sql-driver: Compatible, agregue ?tls=true&allowCleartextPasswords=true a la cadena de conexión

Pasos siguientes