Utiliser Microsoft Entra ID pour l’authentification avec MySQL

S’APPLIQUE À : Azure Database pour MySQL – Serveur unique

Important

Le serveur unique Azure Database pour MySQL est en voie de mise hors service. Nous vous conseillons vivement de procéder à une mise à niveau vers Azure Database pour MySQL – Serveur flexible. Pour obtenir plus d’informations sur la migration vers Azure Database pour MySQL – Serveur flexible, consultez Qu’en est-il du Serveur unique Azure Database pour MySQL ?

Cet article détaille les étapes à suivre pour configurer l’accès à Microsoft Entra ID avec Azure Database pour MySQL et la connexion à l’aide d’un jeton Microsoft Entra.

Important

L’authentification Microsoft Entra est disponible uniquement pour MySQL 5.7 et les versions ultérieures.

Configuration de l’utilisateur administrateur Microsoft Entra

Seuls les utilisateurs administrateurs Microsoft Entra peuvent créer ou activer des utilisateurs pour l’authentification basée sur Microsoft Entra ID. Pour créer un utilisateur Administrateur Microsoft Entra, suivez les étapes ci-dessous :

  1. Dans le Portail Azure, sélectionnez l’instance Azure Database pour MySQL que vous souhaitez activer pour Microsoft Entra ID.
  2. Sous Paramètres, sélectionnez Administrateur Active Directory.
  3. Sélectionnez un utilisateur Microsoft Entra valide dans le locataire client pour être administrateur Microsoft Entra.

Important

Lorsque vous définissez l’administrateur, un nouvel utilisateur est ajouté au serveur Azure Database pour MySQL avec toutes les autorisations d’administrateur.

Un seul administrateur Microsoft Entra peut être créé par serveur MySQL, et la sélection d’un autre administrateur remplace l’administrateur Microsoft Entra existant configuré pour le serveur.

Après avoir configuré l’administrateur, vous pouvez vous connecter :

Connexion à Azure Database pour MySQL à l’aide de Microsoft Entra ID

Nous avons conçu l’intégration Microsoft Entra pour qu’elle fonctionne avec des outils MySQL courants, tels que la CLI mysql, qui sont indépendants de Microsoft Entra et ne prennent en charge que la spécification du nom d’utilisateur et du mot de passe lors de la connexion à MySQL. Nous transmettons le jeton Microsoft Entra comme mot de passe.

Pour le moment, nous avons testé les clients suivants :

  • MySQLWorkbench
  • Interface CLI MySQL

Nous avons également testé la plupart des pilotes d’application courants. Vous pouvez consulter les détails à la fin de cette page.

Voici les étapes nécessaires à l’authentification d’un utilisateur ou d’une application avec Microsoft Entra :

Prérequis

Vous pouvez poursuivre dans Azure Cloud Shell, une machine virtuelle Azure ou sur votre ordinateur local. Assurez-vous que l’interface Azure CLI est installée.

Étape 1 : s’authentifier auprès de Microsoft Entra ID

Commencez par vous authentifier auprès de Microsoft Entra ID à l’aide de l’outil Azure CLI. Cette étape n’est pas obligatoire dans Azure Cloud Shell.

az login

La commande lance une fenêtre de navigateur sur la page d’authentification Microsoft Entra. Vous devez fournir votre ID utilisateur Microsoft Entra et le mot de passe.

Étape 2 : Récupérer le jeton d’accès Microsoft Entra

Appelez l’outil Azure CLI afin d’obtenir un jeton d’accès permettant à l’utilisateur authentifié auprès de Microsoft Entra à l’étape 1 d’accéder à Azure Database pour MySQL.

Exemple (pour le cloud public) :

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

La valeur de la ressource ci-dessus doit être spécifiée exactement comme indiqué. Pour les autres clouds, la valeur de la ressource peut être recherchée à l’aide de ce qui suit :

az cloud show

Pour Azure CLI version 2.0.71 et les versions ultérieures, la commande peut être spécifiée dans la version plus pratique suivante pour tous les clouds :

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

Avec PowerShell, vous pouvez utiliser la commande suivante pour obtenir le jeton d’accès :

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

Une fois l’authentification réussie, Microsoft Entra ID renvoie un jeton d’accès :

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

Le jeton est une chaîne base 64 qui code toutes les informations relatives à l’utilisateur authentifié et qui est destinée au service Azure Database pour MySQL.

La validité du jeton d’accès est comprise entre 5 minutes et 60 minutes. Nous vous recommandons d’obtenir le jeton d’accès juste avant de lancer la connexion à Azure Database pour MySQL. Vous pouvez utiliser la commande PowerShell suivante pour voir la validité du jeton.

$accessToken.ExpiresOn.DateTime

Étape 3 : Utiliser un jeton comme mot de passe pour la connexion avec MySQL

Lors de la connexion, vous devez utiliser le jeton d’accès comme mot de passe utilisateur MySQL. Lorsque vous utilisez des clients GUI tels que MySQLWorkbench, vous pouvez utiliser la méthode décrite ci-dessus pour récupérer le jeton.

Utilisation de l’interface CLI MySQL

Lorsque vous utilisez l’interface CLI, vous pouvez utiliser ce raccourci pour vous connecter :

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

Utilisation de MySQL Workbench

  • Lancez MySQL Workbench, cliquez sur l’option Base de données, puis sur « Se connecter à la base de données »
  • Dans le champ de nom d’hôte, entrez le nom de domaine complet MySQL, par exemple mydb.mysql.database.azure.com
  • Dans le champ du nom d’utilisateur, entrez le nom de l’administrateur Microsoft Entra MySQL et ajoutez-le au nom de serveur MySQL, et non au nom de domaine complet, par exemple user@tenant.onmicrosoft.com@mydb
  • Dans le champ mot de passe, cliquez sur « Stocker dans le coffre » et collez le jeton d’accès à partir du fichier, par exemple C:\temp\MySQLAccessToken.txt
  • Cliquez sur l’onglet Avancé et n’oubliez pas de cocher « Activer le plug-in d’authentification en texte clair »
  • Cliquez sur OK pour vous connecter à la base de données

Considérations importantes à prendre en compte lors de la connexion :

  • user@tenant.onmicrosoft.com est le nom d’utilisateur ou de groupe Microsoft Entra sous lequel vous essayez de vous connecter
  • Ajoutez toujours le nom du serveur après le nom d’utilisateur ou de groupe Microsoft Entra (par exemple @mydb)
  • Veillez à orthographier correctement le nom d’utilisateur ou de groupe Microsoft Entra.
  • Les noms d’utilisateurs et de groupes Microsoft Entra respectent la casse
  • Quand vous vous connectez en tant que groupe, utilisez uniquement le nom du groupe (par exemple, GroupName@mydb)
  • Si le nom contient des espaces, utilisez \ avant chaque espace pour le placer dans une séquence d’échappement

Notez le paramètre « enable-cleartext-plugin » : vous devez utiliser une configuration similaire avec d’autres clients pour vous assurer que le jeton est envoyé au serveur sans être haché.

Vous vous êtes à présent authentifié auprès de votre serveur MySQL à l’aide de l’authentification Microsoft Entra.

Création d’utilisateurs Microsoft Entra dans Azure Database pour MySQL

Pour ajouter un utilisateur Microsoft Entra à votre base de données Azure Database pour MySQL, procédez comme suit après la connexion (voir la section suivante sur la connexion) :

  1. Tout d’abord, assurez-vous que l’utilisateur <user>@yourtenant.onmicrosoft.com Microsoft Entra est un utilisateur valide dans le locataire Microsoft Entra.
  2. Connectez-vous à votre instance Azure Database pour MySQL en tant qu’utilisateur administrateur Microsoft Entra.
  3. Créer l’utilisateur <user>@yourtenant.onmicrosoft.com dans Azure Database pour MySQL.

Exemple :

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

Pour les noms d’utilisateur dépassant 32 caractères, il est recommandé d’utiliser un alias à la place, à utiliser lors de la connexion :

Exemple :

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

Remarque

  1. MySQL ignore les espaces de début et de fin. Le nom d’utilisateur ne doit donc pas en contenir.
  2. L’authentification d’un utilisateur par le biais de Microsoft Entra ID ne lui donne pas d’autorisation d’accès aux objets dans la base de données Azure Database pour MySQL. Vous devez accorder manuellement les autorisations requises à l’utilisateur.

Création de groupes Microsoft Entra dans Azure Database pour MySQL

Pour permettre à un groupe Microsoft Entra d’accéder à votre base de données, utilisez le même mécanisme que pour les utilisateurs, mais spécifiez plutôt le nom du groupe :

Exemple :

CREATE AADUSER 'Prod_DB_Readonly';

Lors de la connexion, les membres du groupe utilisent leurs jetons d’accès personnels, mais se connectent avec le nom du groupe spécifié comme nom d’utilisateur.

Validation du jeton

L’authentification Microsoft Entra dans Azure Database pour MySQL garantit que l’utilisateur existe dans le serveur MySQL et vérifie la validité du jeton en validant son contenu. Les étapes de validation de jeton suivantes sont exécutées :

  • Le jeton est signé par Microsoft Entra ID et n’a pas été falsifié
  • Le jeton a été émis par Microsoft Entra ID pour le locataire associé au serveur
  • Le jeton n’a pas expiré
  • Le jeton est destiné à la ressource Azure Database pour MySQL (et non pour une autre ressource Azure)

Compatibilité avec des pilotes d’application

La plupart des pilotes sont pris en charge, mais veillez à utiliser les paramètres d’envoi du mot de passe en texte clair, afin que le jeton soit envoyé sans modification.

  • C/C++
    • libmysqlclient : Prise en charge
    • mysql-connector-c++ : Prise en charge
  • Java
    • Connecteur/J (mysql-connector-java) : Pris en charge, doit utiliser le paramètre useSSL
  • Python
    • Connecteur/Python : Prise en charge
  • Ruby
    • mysql2 : Prise en charge
  • .NET
    • mysql-connector-net : Pris en charge, il faut ajouter un plug-in pour mysql_clear_password
    • mysql-net/MySqlConnector : Prise en charge
  • Node.js
    • mysqljs : Non pris en charge (n’envoie pas de jeton en texte clair sans correctif)
    • node-mysql2 : Prise en charge
  • Perl
    • DBD::mysql : Prise en charge
    • Net::MySQL : Non pris en charge
  • Go
    • go-sql-driver : Pris en charge, ajouter ?tls=true&allowCleartextPasswords=true à la chaîne de connexion

Étapes suivantes