Partage via


Connexions Microsoft Entra et utilisateurs avec des noms d’affichage non uniques

S’applique à :Base de données SQLAzure SQL Managed InstanceBase de données Azure SQL dans Fabric

Cet article vous apprend à utiliser la syntaxe T-SQL Object_ID pour créer des identifiants et des utilisateurs Microsoft Entra avec des noms d'affichage non uniques dans Base de données Azure SQL, Base de données SQL Fabric et Azure SQL Managed Instance.

Remarque

Vous pouvez créer des utilisateurs dans la base de données SQL Fabric, mais pas les connexions.

Vue d’ensemble

Microsoft Entra ID prend en charge l’authentification pour les principaux de service. Toutefois, l’utilisation d’un principal de service avec un nom complet 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 Database et Azure SQL Managed Instance.

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

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 dupliqué, l’instruction par défaut CREATE LOGIN ou CREATE USER doit être utilisée. L’extension WITH OBJECT_ID est un élément destinés à la réparation de problèmes, implémenté pour une utilisation avec des principaux de service non uniques. Il n'est pas recommandé de l'utiliser avec un principal de service unique. 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, l’exemple T-SQL suivant crée un login myapp4466e en utilisant l’ID d’objet de l’application aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 
  • Pour exécuter cette requête T-SQL, l’ID d’objet spécifié doit exister dans le locataire Microsoft Entra où se trouve 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 bbbbbbbb-1111-2222-3333-cccccccccccc. Toutefois, vous pouvez également définir un suffixe personnalisé. La formation du suffixe à partir de l’ID d’objet n’est pas obligatoire.

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 l’ID Microsoft Entra n’est pas synchronisé avec la connexion à la base de données ou l'alias d'utilisateur. L'exécution de CREATE LOGIN ou de CREATE USER n'affectera 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 la requête dans SQL Server Management Studio (SSMS) pour l’ID d’application.

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

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

      Exemple de sortie :

      Capture d’écran de la sortie de la requête dans SQL Server Management Studio (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 la requête dans SQL Server Management Studio (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 la requête dans SQL Server Management Studio (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 avec la requête précédente.

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.