Delen via


Microsoft Entra-aanmeldingen en gebruikers met niet-unieke weergavenamen

Van toepassing op: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric

In dit artikel leert u hoe u de T-SQL-syntaxis Object_ID gebruikt voor het maken van Microsoft Entra-aanmeldingen en -gebruikers met niet-zelfstandige weergavenamen in Azure SQL Database, Fabric SQL Database, Azure SQL Managed Instance en SQL Server 2025 en latere versies.

Opmerking

U kunt gebruikers maken in een Fabric SQL-database, maar geen aanmeldingen.

Overzicht

Microsoft Entra ID ondersteunt verificatie voor service-principals. Als u echter een service-principal gebruikt met een weergavenaam die niet uniek is in Microsoft Entra ID, leidt dit tot fouten bij het maken van de aanmelding of gebruiker in SQL Server, Azure SQL Database en Azure SQL Managed Instance.

Als de toepassing myapp bijvoorbeeld niet uniek is, kunt u de volgende fout tegenkomen:

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. 

Wanneer u de volgende T-SQL-instructie probeert uit te voeren:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

De WITH OBJECT_ID extensie

De dubbele weergavenaamfout treedt op omdat Microsoft Entra-id dubbele weergavenamen toestaat voor de Microsoft Entra-toepassing (service-principal), terwijl SQL Server en Azure SQL unieke namen nodig hebben 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.

Opmerking

De meeste niet-unieke weergavenamen in Microsoft Entra ID zijn gerelateerd aan service-principalen, maar soms kunnen groepsnamen ook niet-uniek zijn. Microsoft Entra gebruikers-hoofdnamen zijn uniek, omdat twee gebruikers niet dezelfde gebruikers-hoofdnaam kunnen hebben. Een app-registratie (service-principal) kan echter worden gemaakt met een weergavenaam die hetzelfde is als een gebruikers-principalnaam.

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 is een herstelitem voor probleemoplossing dat is geïmplementeerd voor gebruik met niet-unique service-principals. Het gebruik ervan met een unieke service-principal wordt niet aanbevolen. 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 ondersteund voor SQL Server 2025 en latere versies.

T-SQL create login/user syntaxis voor niet-unieke weergavenamen

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-ondersteuningsextensie 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 T-SQL-voorbeeld wordt bijvoorbeeld een aanmelding myapp4466e gemaakt met behulp van de object-id aaaaaaaa-0000-1111-2222-bbbbbbbbbbbbvan de toepassing.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 
  • Als u deze T-SQL-query wilt uitvoeren, moet de opgegeven object-id aanwezig zijn in de Microsoft Entra-tenant waarin de 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 bbbbbbbb-1111-2222-3333-cccccccccccc. U kunt echter ook een aangepast achtervoegsel definiëren. Het vormen van het achtervoegsel van de object-id is niet vereist.

Deze naamgevingsconventie wordt aanbevolen om de databasegebruiker of aanmelding expliciet te koppelen aan het object in Microsoft Entra ID.

Opmerking

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. Het uitvoeren van CREATE LOGIN of CREATE USER heeft geen invloed op weergavenaam in de Azure portal. Op dezelfde manier heeft het wijzigen van de weergavenaam van de Microsoft Entra ID geen invloed op de database-login of de gebruikersalias.

Een gebruiker identificeren die voor de toepassing is aangemaakt

Voor niet-unieke service-principals is het belangrijk om na te gaan of de Microsoft Entra-alias aan de juiste toepassing is gekoppeld. 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 Azure SQL of SQL Server. Zie de volgende query's:

    • Voer de volgende query uit om de Application ID van de service-principal die door de gebruiker is aangemaakt op te halen:

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

      Voorbeelduitvoer:

      Schermopname van de queryuitvoer van SQL Server Management Studio (SSMS) voor de toepassings-id.

      De toepassings-id wordt geconverteerd van het beveiligingsidentificatienummer (SID) voor de opgegeven aanmelding of gebruikersnaam, die we kunnen bevestigen door de volgende T-SQL-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:

      Schermopname van SSMS-queryuitvoer (SQL Server Management Studio) voor de SID van de toepassing.

    • 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:

      Schermopname van de queryuitvoer van SQL Server Management Studio (SSMS) voor de object-id van de Microsoft Entra-groep.

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

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

      Voorbeelduitvoer:

      Schermopname van SSMS-queryuitvoer (SQL Server Management Studio) voor de SID van de groep.

    • 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 de Azure portal en controleer in uw Enterprise-applicatie of de Microsoft Entra-groepsresource respectievelijk de toepassings-id of object-id. Kijk of het resultaat overeenkomt met dat van de vorige query.

Opmerking

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 SQL Server 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 app-registratie Overzicht pagina bevindt, selecteert u de gekoppelde beheerde applicatie in de lokale directory om naar de juiste Object-ID te navigeren op de bedrijfstoepassingen Overzicht pagina.