Microsoft Entra-inloggningar och användare med icke-unika visningsnamn
gäller för:Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Fabric
I den här artikeln lär du dig hur du använder syntaxen för T-SQL Object_ID
för att skapa Microsoft Entra-inloggningar och användare med icke-unika visningsnamn i Azure SQL Database, Fabric SQL Database och Azure SQL Managed Instance.
Obs
Du kan skapa användare i Fabric SQL-databasen, men inte inloggningar.
Överblick
Microsoft Entra ID stöder autentisering för tjänsteombud. 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 Azure SQL Database och Azure SQL Managed Instance.
Om programmet till exempel myapp
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
Det duplicerade visningsnamnet-fel uppstår eftersom Microsoft Entra-ID tillåter dubbla visningsnamn för Microsoft Entra-program (tjänstehuvudnamn), medan Azure SQL kräver unika namn för att skapa inloggningar och användare i Microsoft Entra. 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 med satsen WITH OBJECT_ID
.
Not
De flesta icke unika visningsnamn i Microsoft Entra-ID är relaterade till tjänsteprincipaler, 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 standardsatsen CREATE LOGIN
eller CREATE USER
användas. Tillägget WITH OBJECT_ID
är ett objekt för felsökning och reparation som är implementerat för användning med icke-unika tjänstprincipaler. Det rekommenderas inte att du använder det med ett unikt huvudnamn för tjänsten. 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 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-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. Följande T-SQL-exempel skapar till exempel en inloggning myapp4466e
med hjälp av programobjekt-ID:t aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
.
CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
- För att kunna köra den här T-SQL-frågan måste det angivna objekt-ID:t finnas i Microsoft Entra-klientorganisationen där Azure SQL-resursen finns. Annars misslyckas kommandot
CREATE
med felmeddelandet:Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
- Inloggnings- 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
ellerCREATE USER
. Som bästa praxis kan suffixet innehålla en första del av objekt-ID:t. Till exempelmyapp2ba6c
för objekt-ID:tbbbbbbbb-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 tydligt associera databasanvändaren eller inloggningen med dess objekt i Microsoft Entra ID.
Not
Aliaset följer T-SQL-specifikationen för sysname
, inklusive en maxlä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. Om du kör CREATE LOGIN
eller CREATE USER
påverkas 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änstehuvudmän är det viktigt att kontrollera att Microsoft Entra-aliaset är kopplat till rätt applikation. Så här kontrollerar du att användaren har skapats för rätt huvudnamn för tjänsten (programmet):
Hämta programmets program-ID eller objekt-ID för Microsoft Entra-gruppen från den användare som skapades i SQL-databasen. Se följande frågor:
Kör följande fråga för att hämta program-ID:t 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 Microsoft Entra-gruppens objekt-ID för den skapade 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-portalenoch i din Enterprise-- eller Microsoft Entra-gruppresurs kontrollerar du program-ID respektive objekt-ID. Se om den matchar den som hämtades från föregående fråga.
Not
När du skapar en användare från en tjänstens huvudprincip krävs objekt-ID när du använder WITH OBJECT_ID
-satsen med T-SQL-instruktionen CREATE
. Detta skiljer sig från 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:t för ett huvudnamn för tjänsten finns i objekt för tjänstens huvudnamn. Du kan hitta objekt-ID:t för tjänstens huvudnamn bredvid programnamnet i Azure-portalen under Enterprise-program.
Varning
Objekt-ID som hämtas på sidan Appregistrering Översikt skiljer sig från Objekt-ID som hämtas på sidan företagsprogram Översikt. Om du är på sidan Appregistrering Översikt väljer du den länkade hanterade applikationen i den lokala katalogen applikationsnamn för att navigera till rätt Object ID på sidan Enterprise-program Översikt.