Dela via


Microsoft Entra-inloggningar och användare med icke-substantivt visningsnamn

Gäller för:Azure SQL DatabaseAzure SQL Managed Instance

Att använda ett huvudnamn för tjänsten med ett visningsnamn som inte är unikt i Microsoft Entra-ID leder till fel när du skapar inloggningen eller användaren i Azure SQL. Om programmet myapp till exempel inte är unikt kan du stöta på följande fel när du kör följande T-SQL-instruktion:

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. 

Tillägget WITH OBJECT_ID

Det här felet beror på att Microsoft Entra-ID tillåter duplicerade visningsnamn för Microsoft Entra-programmet (tjänstens huvudnamn) medan Azure SQL kräver unika namn för att skapa Microsoft Entra-inloggningar och -användare. För att åtgärda det här problemet har DDL-instruktionen (Data Definition Language) för att skapa inloggningar och användare utökats för att inkludera Objekt-ID för Azure-resursen WITH OBJECT_ID med -satsen.

Kommentar

Tillägget WITH OBJECT_ID är för närvarande i offentlig förhandsversion.

De flesta icke-unique visningsnamn i Microsoft Entra-ID är relaterade till tjänstens huvudnamn, men ibland kan gruppnamn också vara icke-substantiv. Microsoft Entra-användarens huvudnamn är unika eftersom två användare inte kan ha samma användarhuvudnamn. En appregistrering (tjänstens huvudnamn) kan dock skapas med ett visningsnamn som är samma som användarens huvudnamn.

Om visningsnamnet för tjänstens huvudnamn inte är en dubblett ska standard CREATE LOGIN - eller CREATE USER instruktionen användas. Tillägget WITH OBJECT_ID finns i en offentlig förhandsversion och är ett felsökningsreparationsobjekt som implementerats för användning med icke-anpassade tjänstens huvudnamn. Det är inte nödvändigt att använda det med ett unikt huvudnamn för tjänsten. WITH OBJECT_ID Det går inte att använda tillägget för ett huvudnamn för tjänsten utan att lägga till ett suffix, men det är inte uppenbart vilket tjänsthuvudnamn som inloggningen eller användaren skapades för. Vi rekommenderar att du skapar ett alias med hjälp av ett suffix för att unikt identifiera tjänstens huvudnamn. Tillägget WITH OBJECT_ID stöds inte för SQL Server.

Skapa inloggnings-/användarsyntax för icke-substantiv visningsnamn i T-SQL

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

Med T-SQL DDL-tillägget för att skapa inloggningar eller användare med objekt-ID kan du undvika fel 33131 och även ange ett alias för inloggningen eller användaren som skapats med objekt-ID:t. Följande skapar till exempel en inloggning myapp4466e med hjälp av programmets objekt-ID 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • För att köra ovanstående fråga måste det angivna objekt-ID:t finnas i Microsoft Entra-klientorganisationen där Azure SQL-resursen finns. Annars CREATE misslyckas kommandot med felmeddelandet: Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • Inloggningen eller användarnamnet måste innehålla det ursprungliga tjänstens huvudnamn som utökats med ett användardefinierat suffix när du använder instruktionen CREATE LOGIN eller CREATE USER . Som bästa praxis kan suffixet innehålla en första del av objekt-ID:t. Till exempel myapp2ba6c för objekt-ID 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx. Du kan dock också definiera ett anpassat suffix. Det krävs inte att du bildar suffixet från objekt-ID:t.

Den här namngivningskonventionen rekommenderas att uttryckligen associera databasanvändaren eller logga tillbaka till objektet i Microsoft Entra-ID.

Kommentar

Aliaset följer T-SQL-specifikationen för sysname, inklusive en maximal längd på 128 tecken. Vi rekommenderar att du begränsar suffixet till de första 5 tecknen i objekt-ID:t.

Visningsnamnet för tjänstens huvudnamn i Microsoft Entra-ID synkroniseras inte med databasinloggningen eller användaraliaset. Körning CREATE LOGIN eller CREATE USER påverkar inte visningsnamnet i Azure-portalen. Att ändra visningsnamnet för Microsoft Entra-ID påverkar inte heller databasinloggningen eller användaraliaset.

Identifiera den användare som skapats för programmet

För tjänstens huvudnamn som inte är anpassade till tjänsten är det viktigt att kontrollera att Microsoft Entra-aliaset är kopplat till rätt program. Så här kontrollerar du att användaren har skapats för rätt huvudnamn för tjänsten (programmet):

  1. Hämta programmets program-ID eller objekt-ID för Microsoft Entra-gruppen från användaren som skapats i SQL Database. Se följande frågor:

    • Kör följande fråga för att hämta program-ID för tjänstens huvudnamn från den skapade användaren:

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

      Exempel på utdata>

      Screenshot of SSMS output for the Application ID.

      Program-ID:t konverteras från säkerhetsidentifieringsnumret (SID) för den angivna inloggningen eller användarnamnet, vilket vi kan bekräfta genom att köra frågan nedan och jämföra de senaste siffrorna och skapa datum:

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

      Exempel på utdata>

      Screenshot of SSMS output for the SID of the application.

    • Kör följande fråga för att hämta objekt-ID :t för Microsoft Entra-gruppen från användaren som skapats:

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

      Exempel på utdata>

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

      Kör följande fråga för att kontrollera SID för Microsoft Entra-gruppen från den skapade användaren:

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

      Exempel på utdata>

      Screenshot of SSMS output for the SID of the group.

    • Kör följande kommando för att hämta objekt-ID och program-ID för programmet med hjälp av PowerShell:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Gå till Azure-portalen och kontrollera program-ID eller objekt-ID i företagsappen eller Microsoft Entra-gruppresursen. Se om den matchar den som hämtas från ovanstående fråga.

Kommentar

När du skapar en användare från ett huvudnamn för tjänsten krävs objekt-ID när du använder WITH OBJECT_ID -satsen med T-SQL-instruktionen CREATE . Detta skiljer sig från det program-ID som returneras när du försöker verifiera aliaset i Azure SQL. Med den här verifieringsprocessen kan du identifiera tjänstens huvudnamn eller grupp som är associerad med SQL-aliaset i Microsoft Entra-ID och förhindra eventuella misstag när du skapar inloggningar eller användare med ett objekt-ID.

Hitta rätt objekt-ID

Information om objekt-ID för ett huvudnamn för tjänsten finns i Objektet För tjänstens huvudnamn. Du kan hitta objekt-ID:t för tjänstens huvudnamn bredvid programnamnet i Azure-portalen under Företagsprogram.

Varning

Objekt-ID:t som hämtas på sidan Översikt över appregistrering skiljer sig från objekt-ID:t som hämtas på sidan Översikt över företagsprogram . Om du är på sidan Översikt över appregistrering väljer du det länkade hanterade programmet i namnet på det lokala katalogprogrammet för att navigera till rätt objekt-ID på översiktssidan för företagsprogram .