Megosztás a következőn keresztül:


Azure SQL Database-kiszolgálói szerepkörök engedélykezeléshez

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 master adatbá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 FLUSHAUTHCACHE azon felhasználói adatbázisokban, amelyeken a bejelentkezés hozzáfér. Az aktuálisan bejelentkezett felhasználóknak a DBCC FLUSHAUTHCACHE futtatása után is újra csatlakozniuk kell ahhoz, hogy a tagság módosításai érvénybe léphessenek rajtuk.
  • IS_SRVROLEMEMBER() nem támogatott az master adatbázisban.