Azure SQL Database-kiszolgálói szerepkörök engedélykezeléshez
A következőre vonatkozik: Azure SQL Database
Ez a cikk az Azure SQL Database-ben rögzített kiszolgálószintű szerepköröket ismerteti.
Megjegyzés:
A cikkben szereplő rögzített kiszolgálószintű szerepkörök nyilvános előzetes verzióban érhetők el az Azure SQL Database-hez. Ezek a kiszolgálószintű szerepkörök az SQL Server 2022 kiadásának részét képezik.
Áttekintés
Az Azure SQL Database-ben a kiszolgáló logikai fogalom, és az engedélyek nem adhatóak meg a kiszolgáló szintjén. Az engedélykezelés egyszerűsítése érdekében az Azure SQL Database rögzített kiszolgálószintű szerepköröket biztosít a logikai kiszolgálók engedélyeinek kezeléséhez. A szerepkörök olyan biztonsági tagok, amelyek a bejelentkezéseket csoportosítják.
Megjegyzés:
A cikkben szereplő szerepkörök fogalma olyan, mint a Windows operációs rendszer csoportjai .
Ezek a speciális rögzített kiszolgálószintű szerepkörök az előtagot ##MS_
és az utótagot ##
használják a többi normál, felhasználó által létrehozott egyszerűtől való megkülönböztetésére.
A helyszíni SQL Serverhez hasonlóan a kiszolgálói engedélyek hierarchikusan vannak rendszerezve. A kiszolgálószintű szerepkörök által birtokolt engedélyek adatbázis-engedélyekre propagálhatók. Ahhoz, hogy az engedélyek adatbázisszinten hatékonyan hasznosak legyenek, a bejelentkezésnek vagy a kiszolgálószintű szerepkör ##MS_DatabaseConnector##
tagjának kell lennie, amely minden adatbázisnak biztosít CONNECT
, vagy egy felhasználói fiókkal kell rendelkeznie az egyes adatbázisokban. Ez a virtuális master
adatbázisra is vonatkozik.
A kiszolgálószintű szerepkör ##MS_ServerStateReader##
például rendelkezik az engedéllyel VIEW SERVER STATE
. Ha egy ilyen szerepkörrel rendelkező bejelentkezés rendelkezik felhasználói fiókkal az adatbázisokban master
, és WideWorldImporters
ez a felhasználó rendelkezik a két adatbázis engedélyével VIEW DATABASE STATE
.
Megjegyzés:
Bármely engedély megtagadható a felhasználói adatbázisokban, ami lényegében felülírja a kiszolgáló egészére vonatkozó engedélyt a szerepkör-tagságon keresztül. A rendszeradatbázis főkiszolgálója azonban nem adhat meg vagy tagadhat meg engedélyeket.
Az Azure SQL Database jelenleg hét rögzített kiszolgálói szerepkört biztosít. A rögzített kiszolgálói szerepkörökhöz megadott engedélyek nem módosíthatók, és ezek a szerepkörök nem rendelkezhetnek más rögzített szerepkörök tagként. A kiszolgálószintű szerepkörökhöz kiszolgálószintű bejelentkezéseket adhat hozzá tagként.
Fontos
A rögzített kiszolgálói szerepkör minden tagja hozzáadhat más bejelentkezéseket ugyanahhoz a szerepkörhöz.
Az Azure SQL Database-bejelentkezésekkel és -felhasználókkal kapcsolatos további információkért lásd : Adatbázis-hozzáférés engedélyezése az SQL Database-hez, a felügyelt SQL-példányhoz és az Azure Synapse Analyticshez.
Kiszolgálószintű szerepkörök kijavítva
Az alábbi táblázat a rögzített kiszolgálószintű szerepköröket és azok képességeit mutatja be.
Kijavítottuk a kiszolgálószintű szerepkört | Leírás |
---|---|
##MS_DatabaseConnector## |
A ##MS_DatabaseConnector## rögzített kiszolgálói szerepkör tagjai bármilyen adatbázishoz csatlakozhatnak anélkül, hogy az adatbázisban felhasználói fiókra kellene csatlakozniuk.Egy adott adatbázis engedélyének megtagadásához a CONNECT felhasználók létrehozhatnak egy egyező felhasználói fiókot ehhez a bejelentkezéshez az adatbázisban, majd DENY az CONNECT adatbázis-felhasználó engedélyét. Ez az DENY engedély felülírja az ebből a GRANT CONNECT szerepkörből származó engedélyt. |
##MS_DatabaseManager## |
A ##MS_DatabaseManager## rögzített kiszolgálói szerepkör tagjai adatbázisokat hozhatnak létre és törölhetnek. Az adatbázist létrehozó szerepkör tagja ##MS_DatabaseManager## lesz az adatbázis tulajdonosa, amely lehetővé teszi, hogy a felhasználó felhasználóként csatlakozzon az dbo adatbázishoz. A dbo felhasználó minden adatbázis-engedéllyel rendelkezik az adatbázisban. A szerepkör tagjai ##MS_DatabaseManager## nem feltétlenül rendelkeznek engedéllyel a nem saját adatbázisaik eléréséhez. Ezt a kiszolgálói szerepkört a dbmanager adatbázisszintű szerepkör fölé kell használnia, amely a következőben master található: . |
##MS_DefinitionReader## |
A ##MS_DefinitionReader## rögzített kiszolgálói szerepkör tagjai minden olyan adatbázis katalógusnézetét VIEW ANY DEFINITION elolvashatják, VIEW DEFINITION amelyen a szerepkör tagja rendelkezik felhasználói fiókkal. |
##MS_LoginManager## |
A ##MS_LoginManager## rögzített kiszolgálói szerepkör tagjai létrehozhatnak és törölhetnek bejelentkezéseket. Ezt a kiszolgálói szerepkört a loginmanager adatbázisszintű szerepkör fölé kell használnia, amely a következőben master található: . |
##MS_SecurityDefinitionReader## |
A rögzített kiszolgálói szerepkör tagjai elolvashatják az ##MS_SecurityDefinitionReader## összes katalógusnézetet, amely VIEW ANY SECURITY DEFINITION lefedi, és rendelkezik VIEW SECURITY DEFINITION engedéllyel minden olyan adatbázishoz, amelyen a szerepkör tagja rendelkezik felhasználói fiókkal. Ez egy kis részhalmaza annak, amelyhez a ##MS_DefinitionReader## kiszolgálói szerepkörnek hozzáférése van. |
##MS_ServerStateManager## |
##MS_ServerStateManager## A rögzített kiszolgálói szerepkör tagjai ugyanazokkal az engedélyekkel rendelkeznek, mint a ##MS_ServerStateReader## szerepkör. Emellett rendelkezik az ALTER SERVER STATE engedéllyel, amely lehetővé teszi a hozzáférést több felügyeleti művelethez, például: DBCC FREEPROCCACHE , , DBCC FREESYSTEMCACHE ('ALL') ; DBCC SQLPERF() |
##MS_ServerStateReader## |
##MS_ServerStateReader## A rögzített kiszolgálói szerepkör tagjai minden dinamikus felügyeleti nézetet (DMV-t) és függvényt VIEW SERVER STATE elolvashatnak minden olyan adatbázison, VIEW DATABASE STATE amelyen a szerepkör tagja rendelkezik felhasználói fiókkal. |
A rögzített kiszolgálói szerepkörök engedélyei
Minden rögzített kiszolgálószintű szerepkörhöz bizonyos engedélyek vannak hozzárendelve. Az alábbi táblázat a kiszolgálószintű szerepkörökhöz rendelt engedélyeket mutatja be. Az adatbázisszintű engedélyeket is megjeleníti, amelyek mindaddig öröklődnek, amíg a felhasználó csatlakozni tud az egyes adatbázisokhoz.
Kijavítottuk a kiszolgálószintű szerepkört | Kiszolgálószintű engedélyek | Adatbázisszintű engedélyek (ha létezik a bejelentkezésnek megfelelő adatbázis-felhasználó) |
---|---|---|
##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/A |
##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 |
Permissions
Csak a kiszolgálói rendszergazdai fiók vagy a Microsoft Entra rendszergazdai fiók (amely lehet Microsoft Entra-csoport) adhat hozzá vagy távolíthat el más bejelentkezéseket a kiszolgálói szerepkörökbe vagy a kiszolgálói szerepkörökből. Ez az Azure SQL Database-hez tartozik.
Megjegyzés:
A Microsoft Entra ID az Azure Active Directory (Azure AD) új neve. Jelenleg frissítjük a dokumentációt.
Kiszolgálószintű szerepkörök kezelése
Az alábbi táblázat ismerteti azOkat a rendszernézeteket és függvényeket, amelyekkel kiszolgálószintű szerepkörökkel dolgozhat az Azure SQL Database-ben.
Funkció | Type | Description |
---|---|---|
IS_SRVROLEMEMBER | Metaadatok | Azt jelzi, hogy egy SQL-bejelentkezés tagja-e a megadott kiszolgálószintű szerepkörnek. |
sys.server_role_members | Metaadatok | Egy sort ad vissza az egyes kiszolgálószintű szerepkörök minden tagjára. |
sys.sql_logins | Metaadatok | Minden SQL-bejelentkezéshez egy sort ad vissza. |
ALTER Standard kiadás RVER SZEREPKÖR | Parancs | Módosítja a kiszolgálói szerepkör tagságát. |
Példák
Az ebben a szakaszban szereplő példák bemutatják, hogyan használható kiszolgálószintű szerepkörök az Azure SQL Database-ben.
A. SQL-bejelentkezés hozzáadása kiszolgálószintű szerepkörhöz
Az alábbi példa hozzáadja az SQL-bejelentkezést Jiao
a kiszolgálószintű szerepkörhöz ##MS_ServerStateReader##
. Ezt az utasítást a virtuális master
adatbázisban kell futtatni.
ALTER SERVER ROLE ##MS_ServerStateReader##
ADD MEMBER Jiao;
GO
B. A kiszolgálószintű szerepkört alkotó összes tag (SQL-hitelesítés) listázása
Az alábbi utasítás minden rögzített kiszolgálószintű szerepkör minden tagját visszaadja a katalógusnézetek és sys.sql_logins
a sys.server_role_members
katalógusnézetek használatával. Ezt az utasítást a virtuális master
adatbázisban kell futtatni.
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. Teljes példa: Bejelentkezés hozzáadása kiszolgálószintű szerepkörhöz, a szerepkör-tagság és -engedélyek metaadatainak lekérése, valamint teszt lekérdezés futtatása
1. rész: Szerepkör-tagság és felhasználói fiók előkészítése
Futtassa ezt a parancsot a virtuális master
adatbázisból.
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
Itt található az eredményhalmaz.
MemberPrincipalID MemberPrincipalName RolePrincipalID RolePrincipalName
------------- ------------- ------------------ -----------
6 Jiao 11 ##MS_ServerStateReader##
Futtassa ezt a parancsot egy felhasználói adatbázisból.
-- Create a database-User for 'Jiao'
CREATE USER Jiao
FROM LOGIN Jiao;
GO
2. rész: Szerepkör-tagság tesztelése
Jelentkezzen be bejelentkezésként Jiao
, és csatlakozzon a példában használt felhasználói adatbázishoz.
-- 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. Kiszolgálószintű szerepkörök ellenőrzése Microsoft Entra-bejelentkezésekhez
Futtassa ezt a parancsot a virtuális master
adatbázisban az SQL Database kiszolgálószintű szerepköreinek részét képező összes Microsoft Entra-bejelentkezés megtekintéséhez. A Microsoft Entra-kiszolgálói bejelentkezésekről további információt a Microsoft Entra-kiszolgálónevek című témakörben talál.
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. Adott bejelentkezések virtuális master
adatbázis-szerepköreinek ellenőrzése
Futtassa ezt a parancsot a virtuális master
adatbázisban a szerepkörök bob
ellenőrzéséhez, vagy módosítsa az értéket úgy, hogy megfeleljen az egyszerűnek.
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%';
A kiszolgálószintű szerepkörök korlátozásai
A szerepkör-hozzárendelések életbe lépése akár 5 percet is igénybe vehet. A meglévő munkamenetek esetében sem lépnek érvénybe a kiszolgálói szerepkör-hozzárendelések módosításai, amíg a kapcsolat be nem záródik és újra meg nem nyitódik. Ennek oka az adatbázis és az
master
ugyanazon logikai kiszolgálón található más adatbázisok közötti elosztott architektúra.- Részleges áthidaló megoldás: a várakozási idő csökkentése és annak biztosítása, hogy a kiszolgálói szerepkör-hozzárendelések aktuálisak legyenek egy adatbázisban, egy kiszolgálói rendszergazda vagy egy Microsoft Entra-rendszergazda futtatható
DBCC FLUSHAUTHCACHE
azon felhasználói adatbázisokban, amelyeken a bejelentkezés hozzáfér. Az aktuálisan bejelentkezett felhasználóknak a tagságiDBCC FLUSHAUTHCACHE
módosítások érvénybe léptetése után is újra csatlakozniuk kell.
- Részleges áthidaló megoldás: a várakozási idő csökkentése és annak biztosítása, hogy a kiszolgálói szerepkör-hozzárendelések aktuálisak legyenek egy adatbázisban, egy kiszolgálói rendszergazda vagy egy Microsoft Entra-rendszergazda futtatható
IS_SRVROLEMEMBER()
nem támogatott azmaster
adatbázisban.