Tutorial: Erstellen und verwenden Sie Microsoft Entra-Server-Logins

Dieser Artikel führt Sie durch das Erstellen und die Nutzung von Logins, die von Microsoft Entra ID (früher Azure Active Directory) unterstützt werden, innerhalb der virtuellen master Datenbank eines Azure Synapse Analytics dedizierten SQL-Pools (früher SQL DW). Dedizierte SQL-Pools in Azure Synapse Analytics-Arbeitsbereichen verwenden keine logischen SQL-Server.

Hinweis

Microsoft Entra Server Principals befinden sich derzeit in der Vorschauversion für Azure Synapse Analytics.

In diesem Tutorial erfahren Sie, wie:

  • Erstellen Sie einen Microsoft Entra-Login in der virtuellen master Datenbank
  • Erstellen eines Benutzers, der einer Microsoft Entra-Anmeldung in der virtuellen master-Datenbank zugeordnet ist
  • Verwenden Sie die WITH OBJECT_ID Syntax für nicht eindeutige Anzeigenamen
  • Gewähren von Serverrollen für einen Microsoft Entra-Benutzer
  • Deaktivieren einer Microsoft Entra-Anmeldung

Prerequisites

  • Ein Azure Synapse Analytics dedizierter SQL-Pool und eine Datenbank.
  • Microsoft Entra-Authentifizierung für Azure Synapse Analytics konfiguriert. Weitere Informationen finden Sie unter Microsoft Entra-Authentifizierung mit Azure Synapse Analytics konfigurieren und verwalten.
  • In diesem Artikel wird erläutert, wie Sie eine Microsoft Entra-Anmeldung und einen Benutzer in der virtuellen master-Datenbank erstellen. Nur Microsoft Entra-Administrator*innen können Benutzer*innen in der virtuellen master-Datenbank erstellen. Daher wird empfohlen, das Microsoft Entra-Administratorkonto zu verwenden, wenn Sie dieses Tutorial durchführen. Ein Microsoft Entra-Prinzipal mit der Rolle loginmanager kann zwar eine Anmeldung erstellen, aber keine Benutzer innerhalb der virtuellen master-Datenbank.

Hinweis

Stellen Sie sicher, dass für Organisationen, die mit nicht eindeutigen Anzeigenamen in Microsoft Entra ID umgehen (insbesondere für Dienstprinzipale), die Objekt-ID-Informationen für jeden Dienstprinzipal verfügbar sind, für den Sie Logins erstellen möchten. Die WITH OBJECT_ID Syntaxerweiterung kann dazu beitragen, diese Szenarien zu beheben.

Erstellen einer Microsoft Entra-Anmeldung

  1. Erstelle einen Login für ein Microsoft Entra-Konto. Verwenden Sie in diesem Beispiel bob@contoso.com, das in der Microsoft Entra-Domäne contoso vorhanden ist. Sie können auch einen Login aus einer Microsoft Entra-Gruppe oder einem Service Principal (Anwendungen) erstellen. Weitere Informationen finden Sie unter CREATE LOGIN (Transact-SQL).

    Hinweis

    Die erste Microsoft Entra-Anmeldung muss vom Microsoft Entra-Administrator erstellt werden. Der Microsoft Entra-Administrator kann ein Microsoft Entra-Benutzer oder eine -Gruppe sein. Ein SQL-Authentifizierungslogin kann keine Microsoft Entra-Logins erstellen.

    Tip

    Wenn Sie Probleme mit nicht-eindeutigen Anzeigenamen in Microsoft Entra ID haben, verwenden Sie die SyntaxerweiterungWITH OBJECT_ID. Dieses Feature ist besonders nützlich für Dienstprinzipale mit doppelten Anzeigenamen. Beispiele:

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

    Für weitere Informationen siehe Überlegungen zur Benennung.

  2. Mit SQL Server Management Studio (SSMS) melden Sie sich mit dem Microsoft Entra-Administratorkonto in Ihrem dedizierten SQL-Pool an.

  3. Erweitern Sie Datenbanken>Systemdatenbanken. Klicken Sie mit der rechten Maustaste auf die master-Datenbank und wählen Sie Neue Abfrage aus, um ein neues Abfragefenster im Kontext der master-Datenbank zu öffnen.

  4. Führen Sie die folgende Abfrage aus:

    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  5. Überprüfen Sie die erstellte Anmeldung in sys.server_principals. Führen Sie die folgenden Abfrage aus:

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

    Du siehst ein ähnliches Ergebnis wie das folgende:

    Name                            type_desc       type   is_disabled
    bob@contoso.com                 EXTERNAL_LOGIN  E      0
    
  6. Der Login bob@contoso.com wird in der virtuellen master Datenbank erstellt.

Erstelleneines Benutzers aus einer Microsoft Entra-Anmeldung

  1. Nachdem Sie einen Microsoft Entra-Login erstellt haben, erstellen Sie einen Microsoft Entra-Benutzer auf Datenbankebene, der dem Microsoft Entra-Login in der virtuellen master Datenbank zugeordnet ist. Um zu zeigen, wie man den Benutzer zu Sonderrollen hinzufügt, verwenden Sie unser Beispiel bob@contoso.com, um einen Benutzer in der virtuellen master-Datenbank zu erstellen. Nur Microsoft Entra-Administrator*innen oder SQL-Serveradministrator*innen können Benutzer*innen in der virtuellen master-Datenbank erstellen.

  2. Nutze die virtuelle master Datenbank, aber du kannst dich wieder mit einer Datenbank deiner Wahl verbinden, wenn du Nutzer in anderen Datenbanken erstellen möchtest. Führen Sie die folgende Abfrage aus.

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

    Tip

    Obwohl es nicht erforderlich ist, Microsoft Entra-Benutzeraliasen (z. B. ) zu verwenden, empfiehlt es sich, bob@contoso.comdenselben Alias für Microsoft Entra-Benutzer und Microsoft Entra-Anmeldungen zu verwenden.

    Wenn Sie einen Benutzer direkt von einem externen Anbieter mit einer bestimmten Objekt-ID erstellen müssen (zum Beispiel um Probleme mit nicht-eindeutigen Anzeigenamen zu lösen), verwenden Sie folgende Syntax:

    CREATE USER [user_name] FROM EXTERNAL PROVIDER
      WITH OBJECT_ID = 'objectid'
    
  3. Überprüfen Sie den erstellten Benutzer in sys.database_principals. Führen Sie die folgenden Abfrage aus:

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

    Du siehst ein ähnliches Ergebnis wie das folgende:

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

Hinweis

Die vorhandene Syntax zum Erstellen eines Microsoft Entra-Benutzers ohne Microsoft Entra-Anmeldung wird weiterhin unterstützt. Wenn du die folgende Syntax ausführst, erstellst du einen datenbankenthaltenen Benutzer in der jeweiligen Datenbank, mit der du verbunden bist. Dieser Benutzer ist mit keinem Login verknüpft, selbst wenn ein Login mit demselben Namen in der virtuellen master Datenbank existiert.

Beispiel: CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER

Sie können einen Microsoft Entra-Login erstellen, indem Sie einen Service Principal mit einem nicht eindeutigen Anzeigenamen verwenden. Für weitere Informationen siehe Überlegungen zum Namen.

Gewähren von Rollen auf Serverebene für Microsoft Entra-Anmeldungen

Sie können Logins zu festen Server-Rollen hinzufügen, wie zum Beispiel die ##MS_DefinitionReader##-, ##MS_ServerStateReader##- oder ##MS_ServerStateManager##-Rolle in der master Datenbank.

Hinweis

Die hier erwähnten Rollen auf Serverebene werden für Microsoft Entra-Gruppen nicht unterstützt.

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];

Berechtigungen sind erst wirksam, wenn der Benutzer die Verbindung wiederhergestellt hat. Leeren Sie auch den DBCC-Cache:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Um zu überprüfen, welche Microsoft Entra Anmeldungen Teil von Rollen auf Serverebene sind, führen Sie die folgende Abfrage aus:

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;

Gewähren spezieller Rollen für Microsoft Entra-Benutzer

Du kannst spezielle Rollen für Azure Synapse Analytics Benutzern in der virtuellen master Datenbank zuweisen.

Um einem Benutzer eine der speziellen Datenbankrollen zuzuweisen, muss der Benutzer in der virtuellen master Datenbank existieren.

Um einen Benutzer zu einer Rolle hinzuzufügen, führen Sie folgende Abfrage aus:

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]

Führen Sie die folgende Abfrage aus, um einen Benutzer aus einer Rolle zu entfernen:

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]

AzureAD_object kann ein Microsoft Entra-Benutzer, eine Microsoft Entra-Gruppe oder ein Microsoft Entra-Dienstprinzipal in Microsoft Entra ID sein.

Im folgenden Beispiel erstellst du den Benutzer bob@contoso.com. Weise die Rollen dbmanager und loginmanager dem Benutzer zu.

  1. Führen Sie die folgende Abfrage aus:

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. Überprüfen Sie die Zuweisung der Datenbankrolle, indem Sie die folgende Abfrage ausführen:

    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 siehst ein ähnliches Ergebnis wie das folgende:

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

Optional: Deaktivieren einer Anmeldung

Verwenden Sie die ALTER LOGIN (Transact-SQL)-DDL-Syntax, um einen Microsoft Entra Login in einem dedizierten SQL-Pool zu aktivieren oder zu deaktivieren.

ALTER LOGIN [bob@contoso.com] DISABLE

Damit Änderungen an DISABLE oder ENABLE sofort wirksam werden, löschen Sie den Authentifizierungscache und den TokenAndPermUserStore-Cache mit den folgenden T-SQL-Befehlen:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Überprüfen Sie, ob der Login deaktiviert ist, indem Sie folgende Abfrage ausführen:

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