Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:Azure SQL Database
Ez a cikk az Azure SQL Database-ben rögzített kiszolgálószintű szerepköröket ismerteti.
Jegyzet
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 SQL Server 2022kiadá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, amelyek segítenek a logikai kiszolgálóiengedélyeinek kezelésében. A szerepkörök olyan biztonsági alapelvek, amelyek csoportosítják a bejelentkezéseket.
Jegyzet
A jelen cikkben szereplő szerepkörök fogalma olyan, mint a Windows operációs rendszer csoportok.
Ezek a speciális, rögzített kiszolgálószintű szerepkörök a ##MS_ előtagot és a ## utótagot használják, hogy megkülönböztessék őket az átlagos, felhasználó által létrehozott objektumoktól.
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##tagja kell lennie, amely CONNECT biztosít az összes adatbázisnak, vagy felhasználói fiókkal kell rendelkeznie az egyes adatbázisokban. Ez a virtuális master adatbázisra is vonatkozik.
Például a kiszolgálószintű szerepkör ##MS_ServerStateReader## rendelkezik az engedéllyel VIEW SERVER STATE. Ha a szerepkörhöz tartozó bejelentkezéshez felhasználói fiók tartozik az adatbázisokban master és WideWorldImporters, akkor a felhasználó rendelkezik a két adatbázis engedélyével VIEW DATABASE STATE.
Jegyzet
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ázisban masterazonban az engedélyek nem adhatóak meg és nem tagadhatók meg.
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.
További információ az Azure SQL Database-bejelentkezésekről és a felhasználókról: Adatbázis-hozzáférés engedélyezése az SQL Database-hez, a felügyelt SQL-példányhoz és az Azure Synapse Analytics-.
Kiszolgálószintű szerepkörök rögzítve
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.Ha meg szeretné tagadni egy adott adatbázis CONNECT engedélyét, a felhasználók létrehozhatnak egy megfelelő felhasználói fiókot ehhez a bejelentkezéshez az adatbázisban, majd DENY az adatbázis-felhasználónak CONNECT engedélyt. Ez a DENY engedély felülírja a szerepkörből származó GRANT CONNECT 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ó ##MS_DatabaseManager## szerepkör tagja lesz az adatbázis tulajdonosa, amely lehetővé teszi, hogy a felhasználó dbo felhasználóként csatlakozzon az adatbázishoz. A dbo felhasználó minden adatbázis-engedéllyel rendelkezik az adatbázisban. A ##MS_DatabaseManager## szerepkör tagjai nem feltétlenül rendelkeznek engedéllyel a nem saját adatbázisaik eléréséhez. A dbmanager adatbázisszintű szerepkör helyett ezt a kiszolgálói szerepkört érdemes használnia, amely a masteradatbázisban található. |
##MS_DefinitionReader## |
A ##MS_DefinitionReader## rögzített kiszolgálói szerepkör tagjai elolvashatják az VIEW ANY DEFINITIONáltal lefedett összes katalógusnézetet, illetve VIEW DEFINITION minden olyan adatbázisban, 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ön keresztül kell használnia, amely mastertalálható. |
##MS_SecurityDefinitionReader## |
A ##MS_SecurityDefinitionReader## rögzített kiszolgálói szerepkör tagjai elolvashatják az VIEW ANY SECURITY DEFINITIONáltal lefedett összes katalógusnézetet, és VIEW SECURITY DEFINITION engedéllyel rendelkezik minden olyan adatbázishoz, amelyen a szerepkör tagja rendelkezik felhasználói fiókkal. Ez a ##MS_DefinitionReader## kiszolgálói szerepkör hozzáférésének egy kis része. |
##MS_ServerStateManager## |
A ##MS_ServerStateManager## rögzített kiszolgálói szerepkör tagjai ugyanazokkal az engedélyekkel rendelkeznek, mint a ##MS_ServerStateReader## szerepkör. Emellett rendelkezik a ALTER SERVER STATE engedéllyel, amely több felügyeleti művelethez is hozzáférést biztosít, például: DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE ('ALL'), DBCC SQLPERF(); |
##MS_ServerStateReader## |
A ##MS_ServerStateReader## rögzített kiszolgálói szerepkör tagjai minden dinamikus felügyeleti nézetet (DMV-t) és VIEW SERVER STATEáltal lefedett függvényt elolvashatnak, illetve VIEW DATABASE STATE minden olyan adatbázison, amelyen a szerepkör tagja rendelkezik felhasználói fiókkal. |
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 DEFINITION, VIEW SECURITY DEFINITION |
##MS_LoginManager## |
CREATE LOGIN, ALTER ANY LOGIN |
Nincs adat. |
##MS_SecurityDefinitionReader## |
VIEW ANY SECURITY DEFINITION |
VIEW SECURITY DEFINITION |
##MS_ServerStateManager## |
ALTER SERVER STATE, VIEW SERVER STATE, VIEW SERVER PERFORMANCE STATEVIEW SERVER SECURITY STATE |
\ |
##MS_ServerStateReader## |
\ |
\ |
Engedélyek
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.
Jegyzet
Microsoft Entra ID korábban Azure Active Directory (Azure AD) néven ismert.
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ó | Típus | Leírás |
|---|---|---|
| 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. |
| SZERVER SZEREP MÓDOSÍTÁSA | 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.
Egy. SQL-bejelentkezés hozzáadása kiszolgálószintű szerepkörhöz
Az alábbi példa hozzáadja az SQL bejelentkezési Jiao-t 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 a rögzített kiszolgálószintű szerepkörök minden tagját visszaadja a sys.server_role_members és sys.sql_logins 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 vannak az eredmények.
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. További információ a Microsoft Entra-kiszolgáló bejelentkezéseiről: Microsoft Entra-kiszolgáló főnevek.
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. A meghatározott bejelentkezések virtuális master adatbázis-szerepköreinek ellenőrzése
Futtassa ezt a parancsot a virtuális master adatbázisban annak ellenőrzésére, hogy mely szerepkörökkel rendelkezik bob, vagy módosítsa az értéket úgy, hogy megfeleljen a fő elemé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
masteradatbázis és az 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ó rendszergazdája vagy egy Microsoft Entra-rendszergazda futtathat
DBCC FLUSHAUTHCACHEazon felhasználói adatbázisokban, amelyeken a bejelentkezés hozzáfér. Az aktuálisan bejelentkezett felhasználóknak aDBCC FLUSHAUTHCACHEfuttatása után is újra csatlakozniuk kell ahhoz, hogy a tagság módosításai érvénybe léphessenek rajtuk.
- 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ó rendszergazdája vagy egy Microsoft Entra-rendszergazda futtathat
IS_SRVROLEMEMBER()nem támogatott azmasteradatbázisban.