Dela via


Självstudie: Skapa och använda Microsoft Entra-serverinloggningar

gäller för:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (endast dedikerade SQL-pooler)

Den här artikeln vägleder dig genom att skapa och använda inloggningar som backas upp av Microsoft Entra ID (tidigare Azure Active Directory) i den virtuella master-databasen i Azure SQL.

I den här handledningen lär du dig att:

  • Skapa en Microsoft Entra-inloggning i den virtuella master-databasen med det nya syntaxtillägget för Azure SQL Database
  • Skapa en användare som mappats till en Microsoft Entra-inloggning i den virtuella master-databasen
  • Använd syntaxen WITH OBJECT_ID för icke-anpassade visningsnamn
  • Bevilja serverroller till en Microsoft Entra-användare
  • Inaktivera Microsoft Entra-inloggning

Notera

Microsoft Entra-serverhuvudkonton (inloggningar) är för närvarande i offentlig förhandsversion för Azure SQL Database. Azure SQL Managed Instance och SQL Server 2022 och senare kan redan använda Microsoft Entra-inloggningar i allmän tillgänglighet.

Förutsättningar

  • En SQL Database eller SQL Managed Instance med en databas. Se snabbstart: Skapa en enkel Azure SQL Database-databas om du inte redan har skapat en Azure SQL Database eller snabbstart: Skapa en Azure SQL Managed Instance-.
  • Microsoft Entra-autentisering konfigurerad för SQL Database eller SQL Managed Instance. Mer information finns i Konfigurera och hantera Microsoft Entra-autentisering med Azure SQL.
  • Den här artikeln beskriver hur du skapar en Microsoft Entra-inloggning och användare i den virtuella master-databasen. Endast en Microsoft Entra-administratör kan skapa en användare i den virtuella master-databasen, så vi rekommenderar att du använder Microsoft Entra-administratörskontot när du går igenom den här självstudien. Ett Microsoft Entra-huvudnamn med rollen loginmanager kan skapa en inloggning, men inte en användare i den virtuella master-databasen.

Notera

För organisationer som hanterar icke-unika visningsnamn i Microsoft Entra-ID (särskilt för tjänstens huvudnamn) ser du till att du har objekt-ID-informationen tillgänglig för alla tjänsthuvudnamn som du planerar att skapa inloggningar för. Syntaxtillägget WITH OBJECT_ID kan hjälpa dig att lösa dessa scenarier.

Skapa Microsoft Entra-inloggning

  1. Skapa en Azure SQL Database-inloggning för ett Microsoft Entra-konto. I vårt exempel använder vi bob@contoso.com som finns i vår Microsoft Entra-domän med namnet contoso. En inloggning kan också skapas från en Microsoft Entra-grupp eller tjänstens huvudnamn (program). Till exempel mygroup som är en Microsoft Entra-grupp som består av Microsoft Entra-konton som är medlemmar i den gruppen. Mer information finns i CREATE LOGIN (Transact-SQL).

    Notera

    Den första Microsoft Entra-inloggningen måste skapas av Microsoft Entra-administratören. Microsoft Entra-administratören kan vara en Microsoft Entra-användare eller grupp. En SQL-inloggning kan inte skapa Microsoft Entra-inloggningar.

    Tips

    Om du stöter på problem med icke-anpassade visningsnamn i Microsoft Entra-ID kan du använda syntaxtillägget WITH OBJECT_ID . Den här funktionen är särskilt användbar för tjänstens huvudnamn med dubbla visningsnamn. Till exempel:

    CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
    

    Mer information finns i Microsoft Entra-inloggningar och användare med icke-unika visningsnamn.

  2. Med hjälp av SQL Server Management Studio (SSMS)loggar du in på din SQL Database med microsoft Entra-administratörskontot konfigurerat för servern.

  3. Expandera Databaser>Systemdatabaser. Högerklicka på master-databasen och välj Ny fråga för att öppna ett nytt frågefönster i kontexten för master-databasen.

  4. Kör följande fråga:

    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  5. Kontrollera den skapade inloggningen i sys.server_principals. Kör följande fråga:

    SELECT name, type_desc, type, is_disabled
    FROM sys.server_principals
    WHERE type_desc like 'external%'
    

    Du skulle se utdata som liknar följande:

    Name                            type_desc       type   is_disabled
    bob@contoso.com                 EXTERNAL_LOGIN  E      0
    
  6. Inloggningen bob@contoso.com har skapats i den virtuella master databasen.

Skapa användare från en Microsoft Entra-inloggning

  1. Nu när vi har skapat en Microsoft Entra-inloggning kan vi skapa en Microsoft Entra-användare på databasnivå som är mappad till Microsoft Entra-inloggningen i den virtuella master-databasen. Vi fortsätter att använda vårt exempel bob@contoso.com för att skapa en användare i den virtuella master-databasen, eftersom vi vill visa hur du lägger till användaren i särskilda roller. Endast en Microsoft Entra-administratör eller SQL Server-administratör kan skapa användare i den virtuella master databasen.

  2. Vi använder fortfarande den virtuella master databasen, men du kan återansluta till valfri databas om du vill skapa användare i andra databaser. Kör följande fråga.

    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    Tips

    Även om det inte krävs att använda Microsoft Entra-användaralias (till exempel bob@contoso.com), är det en rekommenderad metod att använda samma alias för Microsoft Entra-användare och Microsoft Entra-inloggningar.

    Om du behöver skapa en användare direkt från en extern provider med ett specifikt objekt-ID (till exempel för att lösa problem med icke-anpassade visningsnamn) kan du också använda:

    CREATE USER [user_name] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'objectid'
    
  3. Kontrollera den skapade användaren i sys.database_principals. Kör följande fråga:

    SELECT name, type_desc, type
    FROM sys.database_principals
    WHERE type_desc like 'external%'
    

    Du skulle se utdata som liknar följande:

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

Notera

Den befintliga syntaxen för att skapa en Microsoft Entra-användare utan Microsoft Entra-inloggning stöds fortfarande. Om du kör följande syntax skapas en databas som innehåller en användare i den specifika databas som du är ansluten till. Det är viktigt att den här användaren inte är kopplad till någon inloggning, även om det finns en inloggning med samma namn i den virtuella master databasen.

Till exempel CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER.

Du kan skapa en Microsoft Entra-inloggning med ett tjänstens huvudkonto med ett icke-unikt visningsnamn. Mer information finns i Microsoft Entra-inloggningar och användare med icke-unika visningsnamn

Bevilja roller på servernivå till Microsoft Entra-inloggningar

Du kan lägga till inloggningar i fasta roller på servernivå, till exempel ##MS_DefinitionReader##, ##MS_ServerStateReader##eller ##MS_ServerStateManager## roll i master-databasen.

Notera

De roller på servernivå som nämns här stöds inte för Microsoft Entra-grupper.

ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];

Behörigheter gäller inte förrän användaren återansluter. Töm DBCC-cachen också:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Kör följande fråga för att kontrollera vilka Microsoft Entra-inloggningar som ingår i roller på servernivå:

SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
       server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
       FROM sys.server_role_members AS server_role_members
       INNER JOIN sys.server_principals AS roles
       ON server_role_members.role_principal_id = roles.principal_id
       INNER JOIN sys.server_principals AS members
       ON server_role_members.member_principal_id = members.principal_id;

Bevilja särskilda roller för Microsoft Entra-användare

Specialroller för SQL Database kan tilldelas till användare i den virtuella master databasen.

För att kunna bevilja en av de särskilda databasrollerna till en användare måste användaren finnas i den virtuella master databasen.

Om du vill lägga till en användare i en roll kan du köra följande fråga:

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]

Om du vill ta bort en användare från en roll kör du följande fråga:

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]

AzureAD_object kan vara microsoft entra-användare, grupp eller tjänstens huvudnamn i Microsoft Entra-ID.

I vårt exempel skapade vi användaren bob@contoso.com. Låt oss ge användaren dbmanager- och loginmanager- rollerna.

  1. Kör följande fråga:

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. Kontrollera databasrolltilldelningen genom att köra följande fråga:

    SELECT DP1.name AS DatabaseRoleName,
      isnull (DP2.name, 'No members') AS DatabaseUserName
    FROM sys.database_role_members AS DRM
    RIGHT OUTER JOIN sys.database_principals AS DP1
      ON DRM.role_principal_id = DP1.principal_id
    LEFT OUTER JOIN sys.database_principals AS DP2
      ON DRM.member_principal_id = DP2.principal_id
    WHERE DP1.type = 'R'and DP2.name like 'bob%'
    

    Du skulle se utdata som liknar följande:

    DatabaseRoleName       DatabaseUserName
    dbmanager              bob@contoso.com
    loginmanager           bob@contoso.com
    

Valfritt – Inaktivera en inloggning

ALTER LOGIN (Transact-SQL) DDL-syntax kan användas för att aktivera eller inaktivera en Microsoft Entra-inloggning i Azure SQL Database.

ALTER LOGIN [bob@contoso.com] DISABLE

För att DISABLE- eller ENABLE ändringarna ska börja gälla omedelbart måste autentiseringscacheminnet och TokenAndPermUserStore cache rensas med hjälp av följande T-SQL-kommandon:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Kontrollera att inloggningen har inaktiverats genom att köra följande fråga:

SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1

Ett användningsfall för detta skulle vara att tillåta skrivskydd på geo-replika, men neka anslutning på den primära servern.