Delen via


Microsoft Entra-aanmeldingen en -gebruikers met niet-actieve weergavenamen

Van toepassing op: Azure SQL DatabaseAzure SQL Managed Instance

Het gebruik van een service-principal met een weergavenaam die niet uniek is in Microsoft Entra ID leidt tot fouten bij het maken van de aanmelding of gebruiker in Azure SQL. Als de toepassing myapp bijvoorbeeld niet uniek is, kunt u de volgende fout tegenkomen bij het uitvoeren van de volgende T-SQL-instructie:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 
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. 

De WITH OBJECT_ID extensie

Deze fout treedt op omdat Microsoft Entra-id dubbele weergavenamen toestaat voor de Microsoft Entra-toepassing (service-principal), terwijl Azure SQL unieke namen vereist om Microsoft Entra-aanmeldingen en -gebruikers te maken. Om dit probleem te verhelpen, is de DDL-instructie (Data Definition Language) voor het maken van aanmeldingen en gebruikers uitgebreid met de object-id van de Azure-resource met de WITH OBJECT_ID component.

Notitie

De WITH OBJECT_ID extensie is momenteel beschikbaar als openbare preview.

De meeste niet-actieve weergavenamen in Microsoft Entra-id zijn gerelateerd aan service-principals, maar af en toe kunnen groepsnamen ook niet-zelfstandig zijn. Microsoft Entra user principal names zijn uniek, omdat twee gebruikers niet dezelfde gebruikers-principal kunnen hebben. Een app-registratie (service-principal) kan echter worden gemaakt met een weergavenaam die hetzelfde is als een user principal name.

Als de weergavenaam van de service-principal geen duplicaat is, moet de standaard CREATE LOGIN - of CREATE USER instructie worden gebruikt. De WITH OBJECT_ID extensie bevindt zich in openbare preview en is een herstelitem voor probleemoplossing dat is geïmplementeerd voor gebruik met niet-unique service-principals. Het gebruik ervan met een unieke service-principal is niet nodig. Het gebruik van de WITH OBJECT_ID extensie voor een service-principal zonder een achtervoegsel toe te voegen, wordt uitgevoerd, maar het is niet duidelijk voor welke service-principal de aanmelding of gebruiker is gemaakt. Het is raadzaam om een alias te maken met behulp van een achtervoegsel om de service-principal uniek te identificeren. De WITH OBJECT_ID extensie wordt niet ondersteund voor SQL Server.

T-SQL create login/user syntaxis for nonunique display names

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

Met de T-SQL DDL-extensie voor het maken van aanmeldingen of gebruikers met de object-id, kunt u fout 33131 voorkomen en ook een alias opgeven voor de aanmelding of gebruiker die is gemaakt met de object-id. Met het volgende wordt bijvoorbeeld een aanmelding myapp4466e gemaakt met behulp van de object-id 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxxvan de toepassing.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • Als u de bovenstaande query wilt uitvoeren, moet de opgegeven object-id bestaan in de Microsoft Entra-tenant waarin de Azure SQL-resource zich bevindt. Anders mislukt de CREATE opdracht met het foutbericht: Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • De aanmeldings- of gebruikersnaam moet de oorspronkelijke service-principal-naam bevatten die wordt uitgebreid door een door de gebruiker gedefinieerd achtervoegsel bij gebruik van de CREATE LOGIN of CREATE USER instructie. Als best practice kan het achtervoegsel een eerste deel van de object-id bevatten. Bijvoorbeeld myapp2ba6c voor de object-id 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx. U kunt echter ook een aangepast achtervoegsel definiëren. Het vormen van het achtervoegsel van de object-id is niet vereist.

Deze naamconventie wordt aanbevolen om de databasegebruiker expliciet te koppelen of u aan te melden bij het object in Microsoft Entra ID.

Notitie

De alias voldoet aan de T-SQL-specificatie voor sysname, inclusief een maximale lengte van 128 tekens. U wordt aangeraden het achtervoegsel te beperken tot de eerste vijf tekens van de object-id.

De weergavenaam van de service-principal in Microsoft Entra ID wordt niet gesynchroniseerd met de aanmeldings- of gebruikersalias van de database. Uitvoeren CREATE LOGIN of CREATE USER heeft geen invloed op de weergavenaam in Azure Portal. Op dezelfde manier heeft het wijzigen van de weergavenaam van Microsoft Entra ID geen invloed op de aanmeldings- of gebruikersalias van de database.

De gebruiker identificeren die voor de toepassing is gemaakt

Voor niet-dynamische service-principals is het belangrijk om te controleren of de Microsoft Entra-alias is gekoppeld aan de juiste toepassing. Controleren of de gebruiker is gemaakt voor de juiste service-principal (toepassing):

  1. Haal de toepassings-id van de toepassing of object-id van de Microsoft Entra-groep op van de gebruiker die is gemaakt in SQL Database. Zie de volgende query's:

    • Voer de volgende query uit om de toepassings-id van de service-principal op te halen van de gebruiker die is gemaakt:

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

      Voorbeelduitvoer:

      Screenshot of SSMS output for the Application ID.

      De toepassings-id wordt geconverteerd van het beveiligingsidentificatienummer (SID) voor de opgegeven aanmelding of gebruikersnaam, die we kunnen bevestigen door de onderstaande query uit te voeren en de laatste cijfers te vergelijken en datums te maken:

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

      Voorbeelduitvoer:

      Screenshot of SSMS output for the SID of the application.

    • Als u de object-id van de Microsoft Entra-groep wilt ophalen van de gebruiker die u hebt gemaakt, voert u de volgende query uit:

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

      Voorbeelduitvoer:

      Screenshot of SSMS output for the Object ID of the Microsoft Entra group.

      Voer de volgende query uit om de SID van de Microsoft Entra-groep van de gemaakte gebruiker te controleren:

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

      Voorbeelduitvoer:

      Screenshot of SSMS output for the SID of the group.

    • Voer de volgende opdracht uit om de object-id en toepassings-id van de toepassing op te halen met behulp van PowerShell:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Ga naar Azure Portal en controleer in uw Ondernemingstoepassing of Microsoft Entra-groepsresource respectievelijk de toepassings-id of object-id . Kijk of deze overeenkomt met de query die is verkregen uit de bovenstaande query.

Notitie

Wanneer u een gebruiker maakt op basis van een service-principal, is de object-id vereist bij het gebruik van de WITH OBJECT_ID component met de CREATE T-SQL-instructie. Dit verschilt van de toepassings-id die wordt geretourneerd wanneer u de alias in Azure SQL probeert te verifiëren. Met behulp van dit verificatieproces kunt u de service-principal of groep identificeren die is gekoppeld aan de SQL-alias in Microsoft Entra-id en mogelijke fouten voorkomen bij het maken van aanmeldingen of gebruikers met een object-id.

De juiste object-id zoeken

Zie Het service-principal-object voor informatie over de object-id van een service-principal. U kunt de object-id van de service-principal zoeken die wordt vermeld naast de naam van de toepassing in Azure Portal onder Bedrijfstoepassingen.

Waarschuwing

De object-id die is verkregen op de overzichtspagina van de app-registratie verschilt van de object-id die is verkregen op de pagina Overzicht van bedrijfstoepassingen . Als u zich op de pagina Overzicht van app-registratie bevindt, selecteert u de gekoppelde beheerde toepassing in de naam van de lokale maptoepassing om naar de juiste object-id te gaan op de pagina Overzicht van bedrijfstoepassingen .