Delen via


Microsoft Entra-aanmeldingen en gebruikers met niet-unieke weergavenamen

van toepassing op:Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Fabric

In dit artikel leert u hoe u de syntaxis van de T-SQL-Object_ID gebruikt om Microsoft Entra-aanmeldingen en -gebruikers met niet-actieve weergavenamen te maken in Azure SQL Database, Fabric SQL-database en Azure SQL Managed Instance.

Notitie

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 Azure SQL Database en Azure SQL Managed Instance.

Als de toepassing bijvoorbeeld myapp niet uniek is, kan het zijn dat u de volgende fout krijgt:

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 weergavenaam 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 kunnen creëren. 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 meeste niet-unieke weergavenamen in Microsoft Entra ID zijn gerelateerd aan service-principals, hoewel groepsnamen af en toe ook niet-uniek kunnen zijn. Microsoft Entra-gebruikers-principalnamen zijn uniek, omdat twee gebruikers niet dezelfde gebruikers-principalnaam 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 standaardinstructie CREATE LOGIN of CREATE USER 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, zal succesvol worden uitgevoerd, maar het zal niet duidelijk zijn welke service-principal de aanmelding of gebruiker was gemaakt voor. 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.

nl-NL: 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 fouten voorkomen 33131 en ook een alias opgeven voor de aanmelding of gebruiker die is gemaakt met de object-id. Bijvoorbeeld, met het volgende T-SQL-voorbeeld wordt een loginaccount myapp4466e gemaakt met behulp van de Object-ID van de toepassing aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb.

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 bestaan in de Microsoft Entra-tenant waarin de Azure SQL-resource zich bevindt. Anders mislukt de opdracht CREATE 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 wanneer u de instructie CREATE LOGIN of CREATE USER gebruikt. 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 het loginaccount expliciet te koppelen aan 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. Het uitvoeren van 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 aan de toepassing is toegewezen.

Voor niet-unieke 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 applicatie of de object-id van de Microsoft Entra-groep op, afkomstig van de gebruiker die is aangemaakt in de SQL-database. Zie de volgende query's:

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

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

      voorbeelduitvoer:

      schermopname van de query-uitvoer 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 de queryuitvoer van SQL Server Management Studio (SSMS) voor de SID van de toepassing.

    • Voer de volgende query uit om de object-id van de Microsoft Entra-groep die door de gebruiker is aangemaakt op te halen.

      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 door de gebruiker aangemaakte Microsoft Entra-groep te controleren:

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

      Voorbeelduitvoer:

      Schermopname van sql Server Management Studio -queryuitvoer (SSMS) 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-portalen controleer in uw Ondernemingstoepassing- of Microsoft Entra-groepsresource respectievelijk de toepassings-id of object-id. Kijk of deze overeenkomt met die uit de vorige query.

Notitie

Wanneer u een gebruiker aanmaakt vanuit een service-principal, is de Object-id vereist bij het gebruik van de WITH OBJECT_ID-clausule 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 service-principal-objectvoor meer informatie over de object-id van een service-principal. U kunt de object-id van de service-principal vinden die wordt vermeld naast de naam van de toepassing in Azure Portal onder Enterprise-toepassingen.

Waarschuwing

De object-id die is verkregen op de pagina App-registratie Overzicht verschilt van de object-id die is verkregen op de Ondernemingstoepassingen overzichtspagina. Als u zich op de pagina App-registratie Overzicht bevindt, selecteert u de gekoppelde beheerde toepassing in de lokale map toepassingsnaam om naar de juiste object-id te navigeren op de Ondernemingstoepassingen overzichtspagina.