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 bezpečnostní entity, které seskupují přihlašovací údaje.

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 má přihlašovací jméno, které je členem této role, uživatelský účet v databázích master a WideWorldImporters, má tento uživatel 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 jakákoli oprávnění, čímž fakticky přepíšete udělení na úrovni serveru prostřednictvím členství v rolích. Ale v systémové databázi master 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.

Opravené role 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 DENYCONNECT 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 místo role na úrovni databáze dbmanager, která existuje v master.
##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í. Měli byste použít tuto roli serveru namísto role na úrovni databáze loginmanager, která existuje v master.
##MS_SecurityDefinitionReader## ##MS_SecurityDefinitionReader## Členové pevné role serveru mohou číst všechna zobrazení katalogu, která jsou pokrytá VIEW ANY SECURITY DEFINITION, a mají odpovídající oprávnění VIEW SECURITY DEFINITION k jakékoli databázi, na které má člen této role uživatelský účet. Jedná se o malou podmnožinu toho, k čemu má role serveru ##MS_DefinitionReader## 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, respektive VIEW DATABASE STATE, na 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 DEFINITION, VIEW ANY SECURITY DEFINITION VIEW DEFINITION, VIEW SECURITY DEFINITION
##MS_LoginManager## CREATE LOGIN, ALTER ANY LOGIN Nepoužitelné
##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 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

Oprávnění

Pouze účet správce serveru nebo účet správce Microsoft Entra (který může být skupinou Microsoft Entra) může přidávat nebo odebírat ostatní přihlašovací údaje k rolím serveru nebo z nich. 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.
ZMĚNIT SERVEROVOU ROLI 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á SQL přihlášení Jiao 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 principálů (ověřování SQL), kteří patří do role na úrovni serveru

Následující příkaz vrátí všechny členy jakékoli fixní role na úrovni serveru pomocí katalogových zobrazení sys.server_role_members a sys.sql_logins. 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 rámci rolí

Přihlaste se jako uživatel Jiao a připojte se k databázi uživatelů 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 Principály 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. Zkontrolujte role ve virtuální master databázi při konkrétních přihlášeních

Spusťte tento příkaz ve virtuální master databázi, abyste zkontrolovali, jaké role má bob, nebo změňte hodnotu tak, aby odpovídala vašemu hlavnímu subjektu.

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

  • Přiřazení rolí může trvat až 5 minut, než se stanou účinnými. 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 jsou aktuální v databázi, může správce serveru nebo správce Microsoft Entra 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í znovu připojit po spuštění DBCC FLUSHAUTHCACHE, aby se na ně projevily změny v členství.
  • IS_SRVROLEMEMBER() není v master databázi podporována.