Connexions Microsoft Entra et utilisateurs avec des noms d’affichage non uniques (préversion)

S’applique à : Azure SQL Database Azure SQL Managed Instance

Cet article explique comment utiliser la syntaxe T-SQL Object_ID pour créer des connexions Microsoft Entra et des utilisateurs avec des noms d’affichage non uniques dans Azure SQL Database et Azure SQL Managed Instance.

Remarque

L'utilisation de WITH OBJECT_ID pour créer des utilisateurs et des connexions dans Azure SQL est actuellement en préversion.

Vue d’ensemble

Microsoft Entra ID prend en charge l’authentification pour les principaux de service. Cependant, l’utilisation d’un principal de service avec un nom d’affichage qui n’est pas unique dans Microsoft Entra ID entraîne des erreurs lors de la création de la connexion ou de l’utilisateur dans Azure SQL.

Par exemple, si l’application myapp n’est pas unique, vous pourriez rencontrer l’erreur suivante :

Msg 33131, Level 16, State 1, Line 4 
Principal 'myapp' has a duplicate display name. Make the display name unique in Azure Active Directory and execute this statement again. 

Lorsque vous essayez d’exécuter l’instruction T-SQL suivante :

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

Extension WITH OBJECT_ID

L’erreur nom d’affichage dupliqué se produit car Microsoft Entra ID autorise les noms d’affichage en double pour l’application Microsoft Entra (principal de service), tandis qu’Azure SQL nécessite des noms uniques pour créer des connexions et des utilisateurs Microsoft Entra. Pour atténuer ce problème, l’instruction du langage de définition de données (DDL) pour créer des connexions et les utilisateurs a été étendue pour inclure l’ID objet de la ressource Azure avec la clause WITH OBJECT_ID.

Remarque

L’extension WITH OBJECT_ID est actuellement en préversion publique.

La plupart des noms d’affichage non uniques dans Microsoft Entra ID sont liés aux principaux de service, bien que parfois, les noms de groupe peuvent également être non uniques. Les noms d’utilisateurs principaux Microsoft Entra sont uniques, car deux utilisateurs ne peuvent pas avoir le même principal d’utilisateur. Toutefois, une inscription d’application (principal de service) peut être créée avec un nom d’affichage identique à un nom d’utilisateur principal.

Si le nom d’affichage du principal de service n’est pas un doublon, l’instruction CREATE LOGIN ou CREATE USER par défaut doit être utilisée. L’extension WITH OBJECT_ID est en préversion publique et est un élément de réparation de dépannage implémenté pour une utilisation avec des principaux de service non uniques. L’utilisation avec un principal de service unique n’est pas recommandée. L’utilisation de l’extension WITH OBJECT_ID pour un principal de service sans ajouter de suffixe s’exécute correctement, mais il n’est pas évident pour quel principal de service la connexion ou l’utilisateur a été créé. Il est recommandé de créer un alias à l’aide d’un suffixe pour identifier de manière unique le principal de service. L’extension WITH OBJECT_ID n’est pas prise en charge pour SQL Server.

Syntaxe T-SQL create login/user pour les noms d’affichage non uniques

CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'
CREATE USER [user_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'

Avec l’extension de prise en charge T-SQL DDL pour créer des connexions ou des utilisateurs avec l’ID objet, vous pouvez éviter l’erreur 33131 et spécifier également un alias pour la connexion ou l’utilisateur créé avec l’ID objet. Par exemple, les éléments suivants créent une connexion myapp4466e à l’aide de l’ID objet d’application 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • Pour exécuter la requête ci-dessus, l’ID objet spécifié doit exister dans le locataire Microsoft Entra où réside la ressource Azure SQL. Sinon, la commande CREATE échoue avec le message d’erreur : Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • La connexion ou le nom d’utilisateur doit contenir le nom du principal de service d’origine étendu par un suffixe défini par l’utilisateur lors de l’utilisation de l’instruction CREATE LOGIN ou CREATE USER. En guise de meilleure pratique, le suffixe peut inclure une partie initiale de son ID objet. Par exemple, myapp2ba6c pour l’ID objet 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx. Toutefois, vous pouvez également définir un suffixe personnalisé. La formation du suffixe à partir de l’ID objet n’est pas nécessaire.

Cette convention d’affectation de noms est recommandée pour associer explicitement l’utilisateur de base de données ou la connexion à son objet dans Microsoft Entra ID.

Remarque

L’alias respecte la spécification T-SQL pour sysname, y compris une longueur maximale de 128 caractères. Nous vous recommandons de limiter le suffixe aux 5 premiers caractères de l’ID objet.

Le nom d’affichage du principal de service dans Microsoft Entra ID n’est pas synchronisé avec l’alias de connexion ou d’utilisateur de la base de données. L’exécution de CREATE LOGIN ou CREATE USER n’affecte pas le nom d’affichage dans le portail Azure. De même, la modification du nom d’affichage de Microsoft Entra ID n’affecte pas l’alias de connexion ou d’utilisateur de la base de données.

Identifier l’utilisateur créé pour l’application

Pour les principaux de service non uniques, il est important de vérifier que l’alias Microsoft Entra est lié à la bonne application. Pour s’assurer que l’utilisateur a été créé pour le principal de service approprié (application) :

  1. Obtenez l’ID d’application de l’application ou l’ID objet du groupe Microsoft Entra à partir de l’utilisateur créé dans SQL Database. Consultez les requêtes suivantes :

    • Pour obtenir l’ID d’application du principal de service à partir de l’utilisateur créé, exécutez la requête suivante :

      SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Exemple de sortie :

      Capture d’écran de la sortie de SSMS pour l’ID d’application.

      L’ID d’application est converti à partir du numéro d’identification de sécurité (SID) pour la connexion ou le nom d’utilisateur spécifié, que nous pouvons confirmer en exécutant la requête ci-dessous et en comparant les derniers chiffres et créer des dates :

      SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Exemple de sortie :

      Capture d’écran de la sortie de SSMS pour le SID de l’application.

    • Pour obtenir l’ID objet du groupe Microsoft Entra à partir de l’utilisateur créé, exécutez la requête suivante :

      SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Exemple de sortie :

      Capture d’écran de la sortie de SSMS pour l’ID d’objet du groupe Microsoft Entra.

      Pour consulter le SID du groupe Microsoft Entra à partir de l’utilisateur créé, exécutez la requête suivante :

      SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Exemple de sortie :

      Capture d’écran de la sortie de SSMS pour le SID du groupe.

    • Pour obtenir l’ID objet et l’ID d’application de l’application à l’aide de PowerShell, exécutez la commande suivante :

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Accédez au portail Azure et, dans votre application d’entreprise ou la ressource de groupe Microsoft Entra, consultez respectivement l’ID d’application ou l’ID objet. Vérifiez s’il correspond à celui obtenu à partir de la requête ci-dessus.

Remarque

Lors de la création d’un utilisateur à partir d’un principal de service, l’ID objet est requis lors de l’utilisation de la clause WITH OBJECT_ID avec l’instruction T-SQL CREATE. Cela diffère de l’ID d’application retourné lorsque vous essayez de vérifier l’alias dans Azure SQL. À l’aide de ce processus de vérification, vous pouvez identifier le principal de service ou le groupe associé à l’alias SQL dans Microsoft Entra ID et prévenir les erreurs éventuelles lors de la création de connexions ou d’utilisateurs avec un ID objet.

Trouver le bon ID objet

Pour plus d’informations sur l’ID objet d’un principal de service, consultez l’objet de principal de service. Vous pouvez localiser l’ID objet du principal de service répertorié en regard du nom de l’application dans le portail Azure sous Applications d’entreprise.

Avertissement

L’ID objet obtenu dans la page de présentation de l’inscription d’application est différent de celui obtenu dans la page de présentation des applications d’entreprise. Si vous êtes sur la page de présentation de l’inscription d’application, sélectionnez le nom d’application de l’application gérée liée dans le répertoire local pour accéder à l’ID objet approprié dans la page de présentation des applications d’entreprise.