Role serwera usługi Azure SQL Database na potrzeby zarządzania uprawnieniami
Dotyczy: Azure SQL Database
W tym artykule opisano stałe role na poziomie serwera w usłudze Azure SQL Database.
Uwaga
Stałe role na poziomie serwera w tym artykule są w publicznej wersji zapoznawczej usługi Azure SQL Database. Te role na poziomie serwera są również częścią wydania programu SQL Server 2022.
Omówienie
W usłudze Azure SQL Database serwer jest koncepcją logiczną i nie można udzielić uprawnień na poziomie serwera. Aby uprościć zarządzanie uprawnieniami, usługa Azure SQL Database udostępnia zestaw stałych ról na poziomie serwera, które ułatwiają zarządzanie uprawnieniami na serwerze logicznym. Role to podmioty zabezpieczeń, które grupują identyfikatory logowania.
Uwaga
Koncepcja ról w tym artykule jest podobna do grup w systemie operacyjnym Windows.
Te specjalne stałe role na poziomie serwera używają prefiksu i sufiksu ##MS_
##
, aby odróżnić się od innych zwykłych podmiotów zabezpieczeń utworzonych przez użytkownika.
Podobnie jak w przypadku lokalnego programu SQL Server, uprawnienia serwera są zorganizowane hierarchicznie. Uprawnienia przechowywane przez te role na poziomie serwera mogą być propagowane do uprawnień bazy danych. Aby uprawnienia były skutecznie przydatne na poziomie bazy danych, identyfikator logowania musi być członkiem roli ##MS_DatabaseConnector##
na poziomie serwera, która przyznaje CONNECT
wszystkim bazom danych, lub mieć konto użytkownika w poszczególnych bazach danych. Dotyczy to również wirtualnej master
bazy danych.
Na przykład rola ##MS_ServerStateReader##
na poziomie serwera zawiera uprawnienie VIEW SERVER STATE
. Jeśli identyfikator logowania, który jest członkiem tej roli, ma konto użytkownika w bazach danych master
i WideWorldImporters
, ten użytkownik ma uprawnienia VIEW DATABASE STATE
w tych dwóch bazach danych.
Uwaga
Wszelkie uprawnienia mogą zostać odrzucone w bazach danych użytkowników, w efekcie, przesłaniając przyznawanie na całym serwerze za pośrednictwem członkostwa w rolach. Jednak w systemie master bazy danych nie można udzielić ani odmówić uprawnień.
Usługa Azure SQL Database obecnie udostępnia siedem stałych ról serwera. Nie można zmienić uprawnień przyznanych stałych ról serwera, a te role nie mogą mieć innych stałych ról jako członków. Identyfikatory logowania na poziomie serwera można dodawać jako elementy członkowskie do ról na poziomie serwera.
Ważne
Każdy członek stałej roli serwera może dodać inne identyfikatory logowania do tej samej roli.
Aby uzyskać więcej informacji na temat identyfikatorów logowania i użytkowników usługi Azure SQL Database, zobacz Autoryzowanie dostępu bazy danych do usługi SQL Database, wystąpienia zarządzanego SQL i usługi Azure Synapse Analytics.
Stałe role na poziomie serwera
W poniższej tabeli przedstawiono stałe role na poziomie serwera i ich możliwości.
Naprawiono rolę na poziomie serwera | opis |
---|---|
##MS_DatabaseConnector## |
Członkowie stałej ##MS_DatabaseConnector## roli serwera mogą łączyć się z dowolną bazą danych bez konieczności nawiązywania połączenia z kontem użytkownika w bazie danych.Aby odmówić CONNECT uprawnień do określonej bazy danych, użytkownicy mogą utworzyć zgodne konto użytkownika dla tego identyfikatora logowania w bazie danych, a następnie DENY CONNECT uprawnienia do użytkownika bazy danych. To DENY uprawnienie powoduje zastąpienie GRANT CONNECT uprawnienia pochodzącego z tej roli. |
##MS_DatabaseManager## |
Członkowie stałej ##MS_DatabaseManager## roli serwera mogą tworzyć i usuwać bazy danych. Członek roli tworzącej ##MS_DatabaseManager## bazę danych staje się właścicielem tej bazy danych, co pozwala temu użytkownikowi na łączenie się z bazą dbo danych jako użytkownik. Użytkownik dbo ma wszystkie uprawnienia bazy danych w bazie danych. ##MS_DatabaseManager## Członkowie roli nie muszą mieć uprawnień dostępu do baz danych, których nie posiadają. Należy użyć tej roli serwera w roli na poziomie bazy danych dbmanager , która istnieje w programie master . |
##MS_DefinitionReader## |
Członkowie stałej ##MS_DefinitionReader## roli serwera mogą odczytywać wszystkie widoki wykazu, które są objęte VIEW ANY DEFINITION programem , odpowiednio VIEW DEFINITION w dowolnej bazie danych, w której członek tej roli ma konto użytkownika. |
##MS_LoginManager## |
Członkowie stałej ##MS_LoginManager## roli serwera mogą tworzyć i usuwać identyfikatory logowania. Należy użyć tej roli serwera na poziomie bazy danych loginmanager , która istnieje w systemie master . |
##MS_SecurityDefinitionReader## |
Członkowie stałej ##MS_SecurityDefinitionReader## roli serwera mogą odczytywać wszystkie widoki wykazu, które są objęte VIEW ANY SECURITY DEFINITION usługą , i mają uprawnienia do dowolnej bazy danych, w której członek tej roli ma VIEW SECURITY DEFINITION konto użytkownika. Jest to niewielki podzbiór tego, do czego ##MS_DefinitionReader## ma dostęp rola serwera. |
##MS_ServerStateManager## |
Członkowie stałej ##MS_ServerStateManager## roli serwera mają takie same uprawnienia jak ##MS_ServerStateReader## rola. Ponadto posiada ALTER SERVER STATE uprawnienie, które umożliwia dostęp do kilku operacji zarządzania, takich jak: DBCC FREEPROCCACHE , , DBCC FREESYSTEMCACHE ('ALL') ; DBCC SQLPERF() |
##MS_ServerStateReader## |
Członkowie stałej ##MS_ServerStateReader## roli serwera mogą odczytywać wszystkie dynamiczne widoki zarządzania (DMV) i funkcje objęte VIEW SERVER STATE programem , odpowiednio VIEW DATABASE STATE w dowolnej bazie danych, w której członek tej roli ma konto użytkownika. |
Uprawnienia stałych ról serwera
Każda stała rola na poziomie serwera ma przypisane pewne uprawnienia. W poniższej tabeli przedstawiono uprawnienia przypisane do ról na poziomie serwera. Przedstawia również uprawnienia na poziomie bazy danych, które są dziedziczone, o ile użytkownik może łączyć się z poszczególnymi bazami danych.
Naprawiono rolę na poziomie serwera | Uprawnienia na poziomie serwera | Uprawnienia na poziomie bazy danych (jeśli użytkownik bazy danych pasujący do identyfikatora logowania istnieje) |
---|---|---|
##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 |
Nie dotyczy |
##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 |
Uprawnienia
Tylko konto administratora serwera lub konto administratora firmy Microsoft Entra (które może być grupą Microsoft Entra) może dodawać lub usuwać inne identyfikatory logowania do ról serwera lub z nich. Jest to specyficzne dla usługi Azure SQL Database.
Uwaga
Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).
Praca z rolami na poziomie serwera
W poniższej tabeli opisano widoki systemowe i funkcje, których można użyć do pracy z rolami na poziomie serwera w usłudze Azure SQL Database.
Funkcja | Type | Opis |
---|---|---|
IS_SRVROLEMEMBER | Metadane | Wskazuje, czy identyfikator logowania SQL jest członkiem określonej roli na poziomie serwera. |
sys.server_role_members | Metadane | Zwraca jeden wiersz dla każdego elementu członkowskiego każdej roli na poziomie serwera. |
sys.sql_logins | Metadane | Zwraca jeden wiersz dla każdego identyfikatora logowania SQL. |
ALTER SERVER ROLE | Polecenie | Zmienia członkostwo roli serwera. |
Przykłady
W przykładach w tej sekcji pokazano, jak pracować z rolami na poziomie serwera w usłudze Azure SQL Database.
Odp. Dodawanie identyfikatora logowania SQL do roli na poziomie serwera
Poniższy przykład dodaje identyfikator logowania Jiao
SQL do roli ##MS_ServerStateReader##
na poziomie serwera . Ta instrukcja musi być uruchamiana w wirtualnej master
bazie danych.
ALTER SERVER ROLE ##MS_ServerStateReader##
ADD MEMBER Jiao;
GO
B. Wyświetlanie listy wszystkich podmiotów zabezpieczeń (uwierzytelnianie SQL), które są członkami roli na poziomie serwera
Poniższa instrukcja zwraca wszystkie elementy członkowskie dowolnej stałej roli na poziomie serwera przy użyciu sys.server_role_members
widoków katalogu i sys.sql_logins
. Ta instrukcja musi być uruchamiana w wirtualnej master
bazie danych.
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. Kompletny przykład: Dodawanie identyfikatora logowania do roli na poziomie serwera, pobieranie metadanych dla członkostwa w rolach i uprawnień oraz uruchamianie zapytania testowego
Część 1. Przygotowywanie członkostwa w roli i konta użytkownika
Uruchom to polecenie z wirtualnej master
bazy danych.
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
Oto zestaw wyników.
MemberPrincipalID MemberPrincipalName RolePrincipalID RolePrincipalName
------------- ------------- ------------------ -----------
6 Jiao 11 ##MS_ServerStateReader##
Uruchom to polecenie z bazy danych użytkownika.
-- Create a database-User for 'Jiao'
CREATE USER Jiao
FROM LOGIN Jiao;
GO
Część 2. Testowanie członkostwa w roli
Zaloguj się jako identyfikator logowania Jiao
i połącz się z bazą danych użytkownika użytą w przykładzie.
-- 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. Sprawdzanie ról na poziomie serwera dla logowań firmy Microsoft
Uruchom to polecenie w wirtualnej master
bazie danych, aby wyświetlić wszystkie identyfikatory logowania firmy Microsoft, które są częścią ról na poziomie serwera w usłudze SQL Database. Aby uzyskać więcej informacji na temat identyfikatorów logowania do serwera Entra firmy Microsoft, zobacz Microsoft Entra server principals (Podmioty zabezpieczeń serwera 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. Sprawdzanie ról wirtualnej master
bazy danych pod kątem określonych identyfikatorów logowania
Uruchom to polecenie w wirtualnej master
bazie danych, aby sprawdzić, czy role bob
ma, lub zmień wartość tak, aby była zgodna z podmiotem zabezpieczeń.
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%';
Ograniczenia ról na poziomie serwera
Czas podejmowania przypisań ról może potrwać do 5 minut. Ponadto w przypadku istniejących sesji zmiany przypisań ról serwera nie zostaną zastosowane, dopóki połączenie nie zostanie zamknięte i ponownie otwarte. Jest to spowodowane architekturą rozproszoną między bazą
master
danych a innymi bazami danych na tym samym serwerze logicznym.- Obejście częściowe: aby zmniejszyć czas oczekiwania i upewnić się, że przypisania ról serwera są aktualne w bazie danych, administrator serwera lub administrator firmy Microsoft Entra może działać
DBCC FLUSHAUTHCACHE
w bazach danych użytkowników, na których ma dostęp. Bieżący zalogowanych użytkowników nadal musi ponownie nawiązać połączenie po uruchomieniuDBCC FLUSHAUTHCACHE
, aby zmiany członkostwa zaczęły obowiązywać na nich.
- Obejście częściowe: aby zmniejszyć czas oczekiwania i upewnić się, że przypisania ról serwera są aktualne w bazie danych, administrator serwera lub administrator firmy Microsoft Entra może działać
IS_SRVROLEMEMBER()
nie jest obsługiwanamaster
w bazie danych.