Sdílet prostřednictvím


Role serveru Azure SQL Database pro správu oprávnění

Platí pro: Azure SQL Database

Tento článek popisuje pevné role na úrovni serveru ve službě Azure SQL Database.

Poznámka:

Pevné role na úrovni serveru v tomto článku jsou ve verzi Public Preview pro Azure SQL Database. Tyto role na úrovni serveru jsou také součástí vydání sql Serveru 2022.

Přehled

Ve službě Azure SQL Database je server logický koncept a oprávnění se nedají udělit na úrovni serveru. Pro zjednodušení správy oprávnění poskytuje Azure SQL Database sadu pevných rolí na úrovni serveru, které vám pomůžou spravovat oprávnění na logickém serveru. Role jsou objekty zabezpečení, které seskupují přihlášení.

Poznámka:

Koncept rolí v tomto článku se podobá skupinám v operačním systému Windows.

Tyto speciální pevné role na úrovni serveru používají předponu ##MS_ a příponu ## k rozlišení od ostatních běžných objektů zabezpečení vytvořených uživatelem.

Stejně jako místní SQL Server jsou oprávnění k serveru uspořádaná hierarchicky. Oprávnění, která jsou uložená těmito rolemi na úrovni serveru, se můžou rozšířit na oprávnění databáze. Aby byla oprávnění efektivně užitečná na úrovni databáze, musí být přihlášení členem role ##MS_DatabaseConnector##na úrovni serveru, která uděluje CONNECT všem databázím, nebo mít uživatelský účet v jednotlivých databázích. To platí také pro virtuální master databázi.

Například role ##MS_ServerStateReader## na úrovni serveru obsahuje oprávnění VIEW SERVER STATE. Pokud přihlašovací jméno, které je členem této role, má v databázích master uživatelský účet a WideWorldImporterstento uživatel má v těchto dvou databázích oprávnění VIEW DATABASE STATE .

Poznámka:

V uživatelských databázích je možné odepřít všechna oprávnění, a to v důsledku přepsání udělení na úrovni serveru prostřednictvím členství v rolích. V hlavním systémovém databázovém serveru ale nelze udělit ani odepřít oprávnění.

Azure SQL Database v současné době poskytuje sedm pevných rolí serveru. Oprávnění udělená pevným rolím serveru se nedají změnit a tyto role nemůžou mít jiné pevné role jako členy. Přihlášení na úrovni serveru můžete přidat jako členy do rolí na úrovni serveru.

Důležité

Každý člen pevné role serveru může do stejné role přidat další přihlášení.

Další informace o přihlášeních a uživatelích azure SQL Database najdete v tématu Autorizace přístupu k databázi SQL Database, SQL Managed Instance a Azure Synapse Analytics.

Oprava rolí na úrovni serveru

Následující tabulka ukazuje pevné role na úrovni serveru a jejich možnosti.

Pevná role na úrovni serveru Popis
##MS_DatabaseConnector## ##MS_DatabaseConnector## Členové pevné role serveru se můžou připojit k jakékoli databázi bez nutnosti připojení k uživatelskému účtu v databázi.

Aby uživatelé odepřeli CONNECT oprávnění ke konkrétní databázi, mohou pro toto přihlášení v databázi vytvořit odpovídající uživatelský účet a pak DENY CONNECT oprávnění pro uživatele databáze. Toto DENY oprávnění přerušuje GRANT CONNECT oprávnění pocházející z této role.
##MS_DatabaseManager## ##MS_DatabaseManager## Členové pevné role serveru mohou vytvářet a odstraňovat databáze. Členem ##MS_DatabaseManager## role, která vytváří databázi, se stane vlastníkem této databáze, což uživateli umožní připojit se k této databázi jako dbo uživatel. Uživatel dbo má v databázi všechna oprávnění k databázi. ##MS_DatabaseManager## Členové role nemusí mít nutně oprávnění pro přístup k databázím, které nevlastní. Tuto roli serveru byste měli použít pro roli na úrovni databáze dbmanager , která existuje v mastersouboru .
##MS_DefinitionReader## ##MS_DefinitionReader## Členové pevné role serveru mohou číst všechna zobrazení katalogu, na která se vztahuje VIEW ANY DEFINITION, v VIEW DEFINITION libovolné databázi, na které má člen této role uživatelský účet.
##MS_LoginManager## ##MS_LoginManager## Členové pevné role serveru můžou vytvářet a odstraňovat přihlášení. Tuto roli serveru byste měli použít pro roli na úrovni databáze loginmanager , která existuje v mastersouboru .
##MS_SecurityDefinitionReader## ##MS_SecurityDefinitionReader## Členové pevné role serveru mohou číst všechna zobrazení katalogu, na která se vztahuje VIEW ANY SECURITY DEFINITION, a v uvedeném pořadí má VIEW SECURITY DEFINITION oprávnění k jakékoli databázi, na které má člen této role uživatelský účet. Jedná se o malou podmnožinu toho, ##MS_DefinitionReader## k čemu má role serveru přístup.
##MS_ServerStateManager## ##MS_ServerStateManager## Členové pevné role serveru mají stejná oprávnění jako role##MS_ServerStateReader##. Také obsahuje ALTER SERVER STATE oprávnění, které umožňuje přístup k několika operacím správy, například: DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE ('ALL'), DBCC SQLPERF();
##MS_ServerStateReader## ##MS_ServerStateReader## Členové pevné role serveru mohou číst všechna zobrazení dynamické správy (DMV) a funkce, které jsou pokryty VIEW SERVER STATE, v VIEW DATABASE STATE libovolné databázi, na které má člen této role uživatelský účet.

Oprávnění pro pevné role serveru

Každá pevná role na úrovni serveru má přiřazená určitá oprávnění. Následující tabulka uvádí oprávnění přiřazená k rolím na úrovni serveru. Zobrazuje také oprávnění na úrovni databáze, která se dědí, pokud se uživatel může připojit k jednotlivým databázím.

Pevná role na úrovni serveru Oprávnění na úrovni serveru Oprávnění na úrovni databáze (pokud existuje uživatel databáze odpovídající přihlášení)
##MS_DatabaseConnector## CONNECT ANY DATABASE CONNECT
##MS_DatabaseManager## CREATE ANY DATABASE, ALTER ANY DATABASE ALTER
##MS_DefinitionReader## VIEW ANY DATABASE, , VIEW ANY DEFINITIONVIEW ANY SECURITY DEFINITION VIEW DEFINITION, VIEW SECURITY DEFINITION
##MS_LoginManager## CREATE LOGIN, ALTER ANY LOGIN
##MS_SecurityDefinitionReader## VIEW ANY SECURITY DEFINITION VIEW SECURITY DEFINITION
##MS_ServerStateManager## ALTER SERVER STATE, VIEW SERVER STATE, , VIEW SERVER PERFORMANCE STATEVIEW SERVER SECURITY STATE VIEW DATABASE STATE, , VIEW DATABASE PERFORMANCE STATEVIEW DATABASE SECURITY STATE
##MS_ServerStateReader## VIEW SERVER STATE, , VIEW SERVER PERFORMANCE STATEVIEW SERVER SECURITY STATE VIEW DATABASE STATE, , VIEW DATABASE PERFORMANCE STATEVIEW DATABASE SECURITY STATE

Oprávnění

Jiné přihlašovací údaje nebo role serveru můžou přidávat nebo odebírat pouze účet správce Microsoft Entra nebo účet správce Microsoft Entra (což může být skupina Microsoft Entra). To je specifické pro Azure SQL Database.

Poznámka:

ID Microsoft Entra se dříve označovalo jako Azure Active Directory (Azure AD).

Práce s rolemi na úrovni serveru

Následující tabulka vysvětluje systémová zobrazení a funkce, které můžete použít k práci s rolemi na úrovni serveru ve službě Azure SQL Database.

Funkce Typ Popis
IS_SRVROLEMEMBER Metadata Určuje, jestli je přihlášení SQL členem zadané role na úrovni serveru.
sys.server_role_members Metadata Vrátí jeden řádek pro každého člena každé role na úrovni serveru.
sys.sql_logins Metadata Vrátí jeden řádek pro každé přihlášení SQL.
ALTER SERVER ROLE Příkaz Změní členství v roli serveru.

Příklady

Příklady v této části ukazují, jak pracovat s rolemi na úrovni serveru ve službě Azure SQL Database.

A. Přidání přihlášení SQL k roli na úrovni serveru

Následující příklad přidá přihlášení Jiao SQL k roli ##MS_ServerStateReader##na úrovni serveru . Tento příkaz musí být spuštěn ve virtuální master databázi.

ALTER SERVER ROLE ##MS_ServerStateReader##
    ADD MEMBER Jiao;
GO

B. Výpis všech objektů zabezpečení (ověřování SQL), které jsou členy role na úrovni serveru

Následující příkaz vrátí všechny členy jakékoli pevné role na úrovni serveru pomocí sys.server_role_members zobrazení katalogu a sys.sql_logins zobrazení. Tento příkaz musí být spuštěn ve virtuální master databázi.

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. Úplný příklad: Přidání přihlášení k roli na úrovni serveru, načtení metadat pro členství v roli a oprávnění a spuštění testovacího dotazu

Část 1: Příprava členství v rolích a uživatelský účet

Spusťte tento příkaz z virtuální master databáze.

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

Tady je sada výsledků.

MemberPrincipalID MemberPrincipalName RolePrincipalID RolePrincipalName
------------- ------------- ------------------ -----------
6         Jiao      11            ##MS_ServerStateReader##

Spusťte tento příkaz z uživatelské databáze.

-- Create a database-User for 'Jiao'
CREATE USER Jiao
FROM LOGIN Jiao;
GO

Část 2: Testování členství v rolích

Přihlaste se jako přihlášení Jiao a připojte se k uživatelské databázi použité v příkladu.

-- 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. Kontrola rolí na úrovni serveru pro přihlášení Microsoft Entra

Spuštěním tohoto příkazu ve virtuální master databázi zobrazíte všechna přihlášení Microsoft Entra, která jsou součástí rolí na úrovni serveru ve službě SQL Database. Další informace o přihlášeních k serveru Microsoft Entra naleznete v tématu Instanční objekty serveru Microsoft Entra.

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. Kontrola konkrétních přihlašovacích údajů v rolích virtuální master databáze

Spuštěním tohoto příkazu ve virtuální master databázi zkontrolujte, jestli bob role mají, nebo změňte hodnotu tak, aby odpovídala vašemu objektu zabezpečení.

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%';

Omezení rolí na úrovni serveru

  • Platnost přiřazení rolí může trvat až 5 minut. U existujících relací se změny přiřazení rolí serveru neprojeví, dokud se připojení nezavře a znovu neotevře. Důvodem je distribuovaná architektura mezi master databází a dalšími databázemi na stejném logickém serveru.

    • Částečné alternativní řešení: Pokud chcete zkrátit dobu čekání a zajistit, aby přiřazení rolí serveru byla aktuální v databázi, správci serveru nebo správci Microsoft Entra, může běžet DBCC FLUSHAUTHCACHE v uživatelských databázích, na kterých má přihlášení přístup. Aktuální přihlášení uživatelé se musí po spuštění DBCC FLUSHAUTHCACHE změn členství znovu připojit, aby se na ně projevily.
  • IS_SRVROLEMEMBER() není v master databázi podporována.