Azure SQL-Datenbank-Serverrollen für die Berechtigungsverwaltung
Gilt für: Azure SQL-Datenbank
In diesem Artikel werden feste Rollen auf Serverebene in Azure SQL-Datenbank beschrieben.
Hinweis
Die festen Rollen auf Serverebene in diesem Artikel befinden sich in der öffentlichen Vorschauversion für Azure SQL-Datenbank. Diese Rollen auf Serverebene sind ebenfalls Teil des Releases für SQL Server 2022.
Übersicht
In Azure SQL-Datenbank ist der Server ein logisches Konzept, und auf Serverebene können keine Berechtigungen gewährt werden. Zur Vereinfachung der Berechtigungsverwaltung verfügt Azure SQL-Datenbank über eine Gruppe fester Rollen auf Serverebene, die Sie zum Verwalten der Berechtigungen auf einem logischen Server verwenden können. Bei Rollen handelt es sich um Sicherheitsprinzipale, unter denen Anmeldenamen gruppiert sind.
Hinweis
In diesem Artikel können Rollen wie Gruppen im Windows-Betriebssystem angesehen werden.
Für diese speziellen festen Rollen auf Serverebene werden das Präfix ##MS_
und das Suffix ##
genutzt, um eine Unterscheidung gegenüber anderen regulären Prinzipalen zu ermöglichen, die von Benutzern erstellt werden.
Serverberechtigungen sind hierarchisch strukturiert, wie dies auch bei einer lokalen SQL Server-Instanz der Fall ist. Die Berechtigungen, über die diese Rollen auf Serverebene verfügen, können auf Datenbankberechtigungen übertragen werden. Damit die Berechtigungen auf Datenbankebene effektiv genutzt werden können, muss eine Anmeldung entweder Mitglied der ##MS_DatabaseConnector##
-Rolle auf Serverebene sein, die die Berechtigung CONNECT
für alle Datenbanken gewährt, oder über ein Benutzerkonto in den einzelnen Datenbanken verfügen. Dies gilt auch für die virtuelle master
-Datenbank.
Beispielsweise enthält die Rolle ##MS_ServerStateReader##
auf Serverebene die Berechtigung VIEW SERVER STATE
. Wenn für einen Anmeldenamen, der Mitglied dieser Rolle ist, ein Benutzerkonto in den Datenbanken master
und WideWorldImporters
vorhanden ist, verfügt dieser Benutzer in diesen beiden Datenbanken über die Berechtigung VIEW DATABASE STATE
.
Hinweis
Da in Benutzerdatenbanken jede Berechtigung verweigert werden kann, wird die serverweite Gewährung per Rollenmitgliedschaft quasi außer Kraft gesetzt. In der Systemdatenbank master können Berechtigungen aber nicht gewährt oder verweigert werden.
Azure SQL-Datenbank verfügt derzeit über sieben feste Serverrollen. Die Berechtigungen, die den festen Serverrollen gewährt werden, können nicht geändert werden, und diese Rollen können keine anderen festen Rollen als Mitglieder haben. Sie können Anmeldenamen auf Serverebene den Rollen auf Serverebene als Mitglieder hinzufügen.
Wichtig
Jedes Mitglied einer festen Serverrolle kann der gleichen Rolle andere Anmeldenamen hinzufügen.
Weitere Informationen zu Azure SQL-Datenbank-Anmeldenamen und -Benutzern finden Sie unter Autorisieren des Datenbankzugriffs für Azure SQL-Datenbank, SQL Managed Instance und Azure Synapse Analytics.
Feste Rollen auf Serverebene
In der folgenden Tabelle werden die festen Rollen auf Serverebene und deren Möglichkeiten angezeigt.
Feste Rolle auf Serverebene | Beschreibung |
---|---|
##MS_DatabaseConnector## |
Mitglieder der festen Serverrolle ##MS_DatabaseConnector## können sich mit jeder Datenbank verbinden, ohne dass dafür ein Benutzerkonto in der Datenbank erforderlich ist.Um die CONNECT -Berechtigung für eine bestimmte Datenbank zu verweigern, können Benutzer*innen ein entsprechendes Benutzerkonto für diese Anmeldung in der Datenbank erstellen und dann die DENY -Berechtigung für den*die Datenbankbenutzer*in mit CONNECT überschreiben. Diese DENY -Berechtigung hebt die GRANT CONNECT -Berechtigung dieser Rolle auf. |
##MS_DatabaseManager## |
Mitglieder der festen Serverrolle ##MS_DatabaseManager## können Datenbanken erstellen und löschen. Ein Mitglied der Rolle ##MS_DatabaseManager## , das eine Datenbank erstellt, wird zum Besitzer bzw. der Besitzerin der betreffenden Datenbank. Diese*r Benutzer*in kann dann als dbo -Benutzer*in eine Verbindung mit der Datenbank herstellen. Der*Die dbo -Benutzer*in verfügt über alle Datenbankberechtigungen in der Datenbank. Mitglieder der Rolle ##MS_DatabaseManager## verfügen nicht zwangsweise über die Berechtigung für den Zugriff auf Datenbanken, die sie nicht besitzen. Sie sollten diese Serverrolle anstelle der dbmanager-Rolle auf Datenbankebene verwenden, die in master vorhanden ist. |
##MS_DefinitionReader## |
Mitglieder der festen Serverrolle ##MS_DefinitionReader## können alle Katalogsichten lesen, die von VIEW ANY DEFINITION abgedeckt werden, bzw. von VIEW DEFINITION für alle Datenbanken, für die das Mitglied dieser Rolle über ein Benutzerkonto verfügt. |
##MS_LoginManager## |
Mitglieder der festen Serverrolle ##MS_LoginManager## können Anmeldungen erstellen oder löschen. Sie sollten diese Serverrolle anstelle der loginmanager-Rolle auf Datenbankebene zu verwenden, die in master vorhanden ist. |
##MS_SecurityDefinitionReader## |
Mitglieder der festen Serverrolle ##MS_SecurityDefinitionReader## können alle Katalogsichten lesen, die von VIEW ANY SECURITY DEFINITION abgedeckt werden, und haben die Berechtigung VIEW SECURITY DEFINITION auf jeder Datenbank, auf der das Mitglied dieser Rolle ein Benutzerkonto hat. Dies ist eine kleine Teilmenge dessen, worauf die Serverrolle ##MS_DefinitionReader## Zugriff hat. |
##MS_ServerStateManager## |
Mitglieder der festen Serverrolle ##MS_ServerStateManager## verfügen über die gleichen Berechtigungen, die für die Rolle ##MS_ServerStateReader## gelten. Darüber hinaus ist auch die Berechtigung ALTER SERVER STATE vorhanden, die den Zugriff auf mehrere Verwaltungsvorgänge ermöglicht, z. B. DBCC FREEPROCCACHE , DBCC FREESYSTEMCACHE ('ALL') und DBCC SQLPERF() ; |
##MS_ServerStateReader## |
Mitglieder der festen Serverrolle ##MS_ServerStateReader## können alle dynamischen Verwaltungssichten (Dynamic Management Views, DMVs) und Funktionen lesen, die von VIEW SERVER STATE abgedeckt werden, bzw. von VIEW DATABASE STATE für alle Datenbanken, für die das Mitglied dieser Rolle über ein Benutzerkonto verfügt. |
Berechtigungen von festen Serverrollen
Jede feste Rolle auf Serverebene besitzt bestimmte Berechtigungen. In der folgenden Tabelle sind die Berechtigungen angegeben, die den Rollen auf Serverebene zugewiesen sind. Außerdem werden Berechtigungen auf Datenbankebene angezeigt, die geerbt werden, solange der Benutzer eine Verbindung mit einzelnen Datenbanken herstellen kann.
Feste Rolle auf Serverebene | Berechtigungen auf Serverebene | Berechtigungen auf Datenbankebene (wenn ein dem Login entsprechender Datenbankbenutzer existiert) |
---|---|---|
##MS_DatabaseConnector## |
CONNECT ANY DATABASE |
CONNECT |
##MS_DatabaseManager## |
CREATE ANY DATABASE , ALTER ANY DATABASE |
ALTER |
##MS_DefinitionReader## |
VIEW ANY DATABASE , VIEW ANY DEFINITION , VIEW ANY SECURITY DEFINITION |
VIEW DEFINITION , VIEW SECURITY DEFINITION |
##MS_LoginManager## |
CREATE LOGIN , ALTER ANY LOGIN |
N/V |
##MS_SecurityDefinitionReader## |
VIEW ANY SECURITY DEFINITION |
VIEW SECURITY DEFINITION |
##MS_ServerStateManager## |
ALTER SERVER STATE , VIEW SERVER STATE , VIEW SERVER PERFORMANCE STATE , VIEW SERVER SECURITY STATE |
VIEW DATABASE STATE , VIEW DATABASE PERFORMANCE STATE , VIEW DATABASE SECURITY STATE |
##MS_ServerStateReader## |
VIEW SERVER STATE , VIEW SERVER PERFORMANCE STATE , VIEW SERVER SECURITY STATE |
VIEW DATABASE STATE , VIEW DATABASE PERFORMANCE STATE , VIEW DATABASE SECURITY STATE |
Berechtigungen
Nur das Server-Administratorkonto oder das Microsoft Entra-Administratorkonto (welches eine Microsoft Entra-Gruppe sein kann) kann andere Anmeldungen zu oder von Serverrollen hinzufügen oder entfernen. Dies gilt nur für Azure SQL-Datenbank.
Hinweis
Microsoft Entra ID war zuvor als Azure Active Directory (Azure AD) bekannt.
Verwenden Sie Rollen auf Serverebene
In der folgenden Tabelle sind die Systemsichten und Funktionen aufgeführt, die Sie beim Verwenden von Rollen auf Serverebene in Azure SQL-Datenbank nutzen können.
Funktion | type | Beschreibung |
---|---|---|
IS_SRVROLEMEMBER | Metadaten | Gibt an, ob ein SQL-Anmeldename Mitglied der angegebenen Rolle auf Serverebene ist. |
sys.server_role_members | Metadaten | Gibt eine Zeile für jedes Mitglied jeder Rolle auf Serverebene zurück. |
sys.sql_logins | Metadaten | Gibt eine Zeile für jeden SQL-Anmeldenamen zurück. |
ALTER SERVER ROLE | Get-Help | Ändert die Mitgliedschaft einer Serverrolle. |
Beispiele
Anhand der Beispiele in diesem Abschnitt wird veranschaulicht, wie Sie Rollen auf Serverebene in Azure SQL-Datenbank verwenden.
A. Fügen Sie einen SQL-Anmeldenamen zu einer Rolle auf Serverebene hinzu
Im folgenden Beispiel wird die SQL-Anmeldung Jiao
der Serverrolle ##MS_ServerStateReader##
hinzugefügt. Diese Anweisung muss in der virtuellen master
-Datenbank ausgeführt werden.
ALTER SERVER ROLE ##MS_ServerStateReader##
ADD MEMBER Jiao;
GO
B. Listen Sie alle Prinzipale (SQL-Authentifizierung) auf, die Mitglieder einer Rolle auf Serverebene sind
Mit der folgenden Anweisung werden alle Mitglieder aller festen Rollen auf Serverebene zurückgegeben, indem die Katalogsichten sys.server_role_members
und sys.sql_logins
verwendet werden. Diese Anweisung muss in der virtuellen master
-Datenbank ausgeführt werden.
SELECT sql_logins.principal_id AS MemberPrincipalID,
sql_logins.name AS MemberPrincipalName,
roles.principal_id AS RolePrincipalID,
roles.name AS RolePrincipalName
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.sql_logins AS sql_logins
ON server_role_members.member_principal_id = sql_logins.principal_id;
GO
C. Vollständiges Beispiel: Fügen Sie einen Anmeldenamen zu einer Rolle auf Serverebene, rufen Sie Metadaten für die Rollenmitgliedschaft und Berechtigungen ab und Führen Sie eine Testabfrage aus
Teil 1: Vorbereiten der Rollenmitgliedschaft und des Benutzerkontos
Führen Sie diesen Befehl in der virtuellen master
-Datenbank aus.
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER Jiao;
-- check membership in metadata:
SELECT IS_SRVROLEMEMBER('##MS_ServerStateReader##', 'Jiao');
--> 1 = Yes
SELECT sql_logins.principal_id AS MemberPrincipalID,
sql_logins.name AS MemberPrincipalName,
roles.principal_id AS RolePrincipalID,
roles.name AS RolePrincipalName
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.sql_logins AS sql_logins
ON server_role_members.member_principal_id = sql_logins.principal_id;
GO
Hier sehen Sie das Ergebnis.
MemberPrincipalID MemberPrincipalName RolePrincipalID RolePrincipalName
------------- ------------- ------------------ -----------
6 Jiao 11 ##MS_ServerStateReader##
Führen Sie diesen Befehl aus einer Benutzerdatenbank aus.
-- Create a database-User for 'Jiao'
CREATE USER Jiao
FROM LOGIN Jiao;
GO
Teil 2: Testen der Rollenmitgliedschaft
Melden Sie sich mit dem Anmeldenamen Jiao
an, und stellen Sie eine Verbindung mit der im Beispiel verwendeten Benutzerdatenbank her.
-- retrieve server-level permissions of currently logged on User
SELECT * FROM sys.fn_my_permissions(NULL, 'Server');
-- check server-role membership for `##MS_ServerStateReader##` of currently logged on User
SELECT USER_NAME(), IS_SRVROLEMEMBER('##MS_ServerStateReader##');
--> 1 = Yes
-- Does the currently logged in User have the `VIEW DATABASE STATE`-permission?
SELECT HAS_PERMS_BY_NAME(NULL, 'DATABASE', 'VIEW DATABASE STATE');
--> 1 = Yes
-- retrieve database-level permissions of currently logged on User
SELECT * FROM sys.fn_my_permissions(NULL, 'DATABASE');
GO
-- example query:
SELECT * FROM sys.dm_exec_query_stats;
--> will return data since this user has the necessary permission
D: Überprüfen von Rollen auf Serverebene für Microsoft Entra-Anmeldungen
Führen Sie diesen Befehl in der virtuellen master
-Datenbank aus, um Microsoft Entra-Anmeldungen anzuzeigen, die Teil von Rollen auf Serverebene in SQL-Datenbank sind. Weitere Informationen zu Microsoft Entra-Serveranmeldungen finden Sie unter Microsoft Entra-Serverprinzipale.
SELECT member.principal_id AS MemberPrincipalID,
member.name AS MemberPrincipalName,
roles.principal_id AS RolePrincipalID,
roles.name AS RolePrincipalName
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 member
ON server_role_members.member_principal_id = member.principal_id
LEFT JOIN sys.sql_logins AS sql_logins
ON server_role_members.member_principal_id = sql_logins.principal_id
WHERE member.principal_id NOT IN (
-- prevent SQL Logins from interfering with resultset
SELECT principal_id
FROM sys.sql_logins AS sql_logins
WHERE member.principal_id = sql_logins.principal_id
);
E. Überprüfen der Rollen der virtuellen master
-Datenbank auf bestimmte Anmeldungen
Führen Sie diesen Befehl in der virtuellen master
-Datenbank aus, um zu überprüfen, ob Rollen in bob
vorhanden sind, oder ändern Sie den Wert so, dass er mit Ihrem Prinzipal übereinstimmt.
SELECT DR1.name AS DbRoleName,
ISNULL(DR2.name, 'No members') AS DbUserName
FROM sys.database_role_members AS DbRMem
RIGHT JOIN sys.database_principals AS DR1
ON DbRMem.role_principal_id = DR1.principal_id
LEFT JOIN sys.database_principals AS DR2
ON DbRMem.member_principal_id = DR2.principal_id
WHERE DR1.type = 'R'
AND DR2.name LIKE 'bob%';
Einschränkungen von Rollen auf Serverebene
Es kann bis zu fünf Minuten dauern, bis Rollenzuweisungen wirksam werden. Auch für vorhandene Sitzungen werden Änderungen an Serverrollenzuweisungen erst wirksam, nachdem die Verbindung getrennt und wiederhergestellt wurde. Der Grund ist die verteilte Architektur zwischen der
master
und den anderen Datenbanken auf demselben logischen Server.- Partielle Problemumgehung: Ein Serveradministrator oder ein Microsoft Entra-Administrator kann in den Benutzerdatenbanken, auf die für den Anmeldenamen Zugriff besteht,
DBCC FLUSHAUTHCACHE
ausführen, um die Wartezeit zu verringern und sicherzustellen, dass Serverrollenzuweisungen in einer Datenbank aktuell sind. Auch gerade angemeldete Benutzer müssen nach dem Ausführen vonDBCC FLUSHAUTHCACHE
eine neue Verbindung herstellen, damit die Mitgliedschaftsänderungen wirksam werden.
- Partielle Problemumgehung: Ein Serveradministrator oder ein Microsoft Entra-Administrator kann in den Benutzerdatenbanken, auf die für den Anmeldenamen Zugriff besteht,
IS_SRVROLEMEMBER()
wird in dermaster
-Datenbank nicht unterstützt.