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


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 WideWorldImportersez 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 mastertalá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 DEFINITIONelolvashatjá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 mastertalá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 DEFINITIONlefedi, é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 STATEelolvashatnak 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 DEFINITIONVIEW 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 STATEVIEW SERVER SECURITY STATE VIEW DATABASE STATE, , VIEW DATABASE PERFORMANCE STATEVIEW DATABASE SECURITY STATE
##MS_ServerStateReader## VIEW SERVER STATE, , VIEW SERVER PERFORMANCE STATEVIEW SERVER SECURITY STATE VIEW DATABASE STATE, , VIEW DATABASE PERFORMANCE STATEVIEW 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ági DBCC FLUSHAUTHCACHE módosítások érvénybe léptetése után is újra csatlakozniuk kell.
  • IS_SRVROLEMEMBER() nem támogatott az master adatbázisban.