Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric
Den här artikeln lär dig hur du använder T-SQL-syntaxen Object_ID för att skapa Microsoft Entra-inloggningar och användare med icke-unika visningsnamn i Azure SQL Database, Fabric SQL Database, Azure SQL Managed Instance och SQL Server 2025 och senare versioner.
Anmärkning
Du kan skapa användare i Fabric SQL-databasen, men inte inloggningar.
Översikt
Microsoft Entra ID stöder autentisering för tjänsteprincipaler. Att använda ett huvudnamn för tjänsten med ett visningsnamn som inte är unikt i Microsoft Entra-ID leder dock till fel när du skapar inloggningen eller användaren i SQL Server, Azure SQL Database och Azure SQL Managed Instance.
Om programmet myapp till exempel inte är unikt kan du stöta på följande fel:
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.
När du försöker köra följande T-SQL-instruktion:
CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER
Tillägget WITH OBJECT_ID
Felet med duplicerat visningsnamn beror på att Microsoft Entra ID tillåter duplicerade visningsnamn för Microsoft Entra-programmet (tjänstens huvudnamn), medan SQL Server och 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.
Anmärkning
De flesta icke-unika visningsnamn i Microsoft Entra ID är relaterade till tjänstprincipaler, men ibland kan gruppnamn också vara icke-unika. 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 är ett felsökningsreparationsobjekt som implementerats för användning med icke-substantiv tjänsthuvudnamn. Det rekommenderas inte att använda det med ett unikt tjänsthuvudkonto. Det går att använda WITH OBJECT_ID-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 för SQL Server 2025 och senare versioner.
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-supporttillä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 T-SQL-exempel skapar till exempel en inloggning myapp4466e med programmets objekt-ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb.
CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
- För att köra den här T-SQL-frågan måste det angivna objekt-ID:t finnas i Microsoft Entra-klientorganisationen där SQL-resursen finns. Annars
CREATEmisslyckas 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 LOGINellerCREATE USER. Som bästa praxis kan suffixet innehålla en första del av objekt-ID:t. Till exempelmyapp2ba6cför objekt-IDbbbbbbbb-1111-2222-3333-cccccccccccc. 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 för att uttryckligen associera databasanvändaren eller inloggningen med dess objekt i Microsoft Entra ID.
Anmärkning
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 fem tecknen i objekt-ID:t.
Visningsnamnet för tjänstens huvudnamn i Microsoft Entra-ID synkroniseras inte med databasinloggningen eller användaraliaset. Att köra 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 icke-unika tjänstens huvudkonton är det viktigt att verifiera att Microsoft Entra-aliaset är kopplat till rätt applikation. Så här kontrollerar du att användaren har skapats för rätt tjänstehuvudnamn (program):
Hämta programmets program-ID eller objekt-ID för Microsoft Entra-gruppen från användaren som skapats i Azure SQL eller SQL Server. 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:
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 nästa T-SQL-fråga och jämföra de senaste siffrorna och skapa datum:
SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c'Exempel på utdata:
Kör följande fråga för att hämta objekt-ID för Microsoft Entra-gruppen som skapats av användaren:
SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'Exempel på utdata:
Kör följande fråga för att kontrollera SID för Microsoft Entra-gruppen som skapats av användaren.
SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'Exempel på utdata:
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"
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ämtades från föregående fråga.
Anmärkning
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 SQL Server. 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 en tjänstens huvudnamn finns i Tjänstens huvudnamnsobjekt. 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älj den länkade hanterade applikationen i den lokala katalogen för att navigera till rätt Objekt-ID på översiktssidan för företagsapplikationer.