Connexions Microsoft Entra et utilisateurs avec des noms d’affichage non uniques (préversion)
S’applique à : Base de données SQL Azure SQL Managed Instance Base 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
L'utilisation de WITH OBJECT_ID
pour créer des utilisateurs et des connexions dans Azure SQL est actuellement en préversion.
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. 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
ouCREATE USER
. En guise de meilleure pratique, le suffixe peut inclure une partie initiale de son ID objet. Par exemple,myapp2ba6c
pour l’ID objet2ba6c0a3-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) :
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 :
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 :
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 :
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 :
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"
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.