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


Az adatbázismotor érvényes engedélyeinek meghatározása

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

Ez a cikk azt ismerteti, hogyan állapítható meg, hogy ki rendelkezik engedélyekkel az SQL Server adatbázismotor különböző objektumaihoz. Az SQL Server két engedélyezési rendszert implementál az adatbázismotorhoz. A rögzített szerepkörök régebbi rendszere előre konfigurált engedélyekkel rendelkezik. Az SQL Server 2005 -től kezdve (9.x) rugalmasabb és pontosabb rendszer érhető el.

Note

A cikkben szereplő információk az SQL Server 2005 (9.x) és újabb verzióira vonatkoznak. Bizonyos típusú engedélyek nem érhetők el az SQL Server egyes verzióiban.

Mindig tartsa szem előtt a következő szempontokat:

  • Az érvényes engedélyek mindkét engedélyrendszer összesítése.
  • Az engedélyek megtagadása felülírja az engedélyek megadását.
  • Ha egy felhasználó tagja a sysadmin rögzített kiszolgálói szerepkörnek, a rendszer nem ellenőrzi tovább az engedélyeket, így a rendszer nem kényszeríti a megtagadásokat.
  • A régi és az új rendszer hasonlóságokkal rendelkezik. A sysadmin rögzített kiszolgálói szerepkör tagsága például hasonló a CONTROL SERVER engedélyhez. De a rendszerek nem azonosak. Ha például egy bejelentkezés csak CONTROL SERVER engedéllyel rendelkezik, és egy tárolt eljárás ellenőrzi a sysadmin rögzített kiszolgálói szerepkör tagságát, akkor az engedélyellenőrzés sikertelen lesz. A fordítottja is igaz.
  • A Fabric SQL-adatbázisban az adatbázis-felhasználók Microsoft Entra-azonosítója az egyetlen támogatott hitelesítési módszer. A kiszolgálószintű szerepkörök és engedélyek nem érhetők el, csak adatbázisszintűek. További információ: Engedélyezés az SQL-adatbázisban a Microsoft Fabric.

Summary

  • A kiszolgálószintű engedély a rögzített kiszolgálói szerepkörökben vagy a felhasználó által definiált kiszolgálói szerepkörökben való tagságból származhat. Mindenki a public rögzített kiszolgálói szerepkörhöz tartozik, és megkapja az ott hozzárendelt engedélyeket.
  • A kiszolgálószintű engedélyek a bejelentkezésekhez vagy a felhasználó által definiált kiszolgálói szerepkörökhöz adott engedélyekből származhatnak.
  • Az adatbázisszintű engedély a rögzített adatbázis-szerepkörök tagságából vagy az egyes adatbázisok felhasználó által definiált adatbázis-szerepköreiből származhat. Mindenki a public rögzített adatbázis-szerepkörhöz tartozik, és megkapja az ott hozzárendelt engedélyeket.
  • Az adatbázisszintű engedélyek az egyes adatbázisok felhasználóinak vagy felhasználó által meghatározott adatbázis-szerepköröknek nyújtott engedélyekből származhatnak.
  • Engedélyeket kaphat a guest bejelentkezési vagy guest adatbázis-felhasználótól, ha engedélyezve van. A guest bejelentkezés és a felhasználók alapértelmezés szerint le vannak tiltva.
  • A Windows-felhasználók olyan Windows-csoportok tagjai lehetnek, amelyeknek lehetnek bejelentkezései. Az SQL Server megismeri a Windows-csoporttagságokat, amikor egy Windows-felhasználó csatlakozik, és egy Windows-jogkivonatot jelenít meg egy Windows-csoport biztonsági azonosítójával. Mivel az SQL Server nem kezeli vagy fogadja a Windows-csoporttagságok automatikus frissítéseit, az SQL Server nem tudja megbízhatóan jelenteni a Windows-csoporttagságból kapott Windows-felhasználók engedélyeit.
  • Az engedélyek egy alkalmazásszerepkörre való váltással és a jelszó megadásával szerezhetők be.
  • Az engedélyek a EXECUTE AS záradékot tartalmazó tárolt eljárás végrehajtásával szerezhetők be.
  • Az engedélyeket a bejelentkezések vagy a IMPERSONATE engedéllyel rendelkező felhasználók szerezhetik be.
  • A helyi számítógép-rendszergazdai csoport tagjai mindig megemelhetik a jogosultságaikat a sysadminszintre, ha szükséges. (Nem vonatkozik az SQL Database-re.)
  • A securityadmin rögzített kiszolgálói szerepkör tagjai számos jogosultságukat növelhetik, és bizonyos esetekben, emelhetik a jogosultságokat sysadmin-re. (Nem vonatkozik az SQL Database-re.)
  • Az SQL Server rendszergazdái megtekinthetik az összes bejelentkezéssel és felhasználóval kapcsolatos információkat. A kevésbé kiemelt felhasználók általában csak a saját identitásukkal kapcsolatos információkat látják.

Régebbi rögzített szerepkör-jogosultsági rendszer

A rögzített kiszolgálói szerepkörök és a rögzített adatbázis-szerepkörök előre konfigurált engedélyekkel rendelkeznek, amelyek nem módosíthatók. Annak megállapításához, hogy ki tagja egy rögzített kiszolgálói szerepkörnek, hajtsa végre a következő lekérdezést:

Note

Nem vonatkozik az SQL Database-re vagy az Azure Synapse Analyticsre, ha a kiszolgálószintű engedély nem érhető el. A is_fixed_role oszlopot a sys.server_principals-hez az SQL Server 2012-ben (11.x) hozzáadták. Az SQL Server régebbi verzióihoz nincs szükség rá.

SELECT SP1.name AS ServerRoleName,
    ISNULL(SP2.name, 'No members') AS LoginName
FROM sys.server_role_members AS SRM
RIGHT JOIN sys.server_principals AS SP1
    ON SRM.role_principal_id = SP1.principal_id
LEFT JOIN sys.server_principals AS SP2
    ON SRM.member_principal_id = SP2.principal_id
WHERE SP1.is_fixed_role = 1 -- Remove for SQL Server 2008
ORDER BY SP1.name;

Note

Minden bejelentkezés a nyilvános szerepkör tagja, és nem távolítható el. A lekérdezés ellenőrzi a táblákat az master adatbázisban, de a helyszíni termék bármely adatbázisában végrehajtható.

Ha meg szeretné állapítani, hogy ki tagja egy rögzített adatbázis-szerepkörnek, hajtsa végre az alábbi lekérdezést az egyes adatbázisokban.

SELECT DP1.name AS DatabaseRoleName,
    ISNULL(DP2.name, 'No members') AS DatabaseUserName
FROM sys.database_role_members AS DRM
RIGHT JOIN sys.database_principals AS DP1
    ON DRM.role_principal_id = DP1.principal_id
LEFT JOIN sys.database_principals AS DP2
    ON DRM.member_principal_id = DP2.principal_id
WHERE DP1.is_fixed_role = 1
ORDER BY DP1.name;

Az egyes szerepkörökhöz kapott engedélyek megismeréséhez tekintse meg a szerepkör leírását a Books Online illusztrációiban (kiszolgálószintű szerepkörökés adatbázisszintű szerepkörök).

Újabb részletes jogosultsági rendszer

Ez a rendszer rugalmas, ami azt jelenti, hogy bonyolult lehet, ha a rendszer beállítói pontosak akarnak lenni. A dolgok egyszerűsítése érdekében érdemes szerepköröket létrehozni, hozzárendelni engedélyeket a szerepkörökhöz, majd hozzáadni a személyek csoportjait ezekhez a szerepkörökhöz. Egyszerűbb, ha az adatbázis-fejlesztési csapat sémák szerint választja el a tevékenységeket, majd szerepkör-engedélyeket ad egy egész sémának az egyes táblák vagy eljárások helyett. A valós forgatókönyvek összetettek, és az üzleti igények váratlan biztonsági követelményeket támaszthatnak.

Az alábbi képen az engedélyek és azok egymáshoz való viszonya látható. A magasabb szintű engedélyek némelyike (például CONTROL SERVER) sokszor szerepel a listán. Ebben a cikkben a plakát túl kicsi ahhoz, hogy elolvassa. Letöltheti a teljes méretű Adatbázis-motor jogosultságok plakátját PDF formátumban .

Képernyőkép az adatbázismotor engedélyeinek PDF-fájljáról.

Biztonsági osztályok

Az engedélyek a kiszolgáló szintjén, az adatbázis szintjén, a séma szintjén vagy az objektum szintjén stb. adhatóak meg. 26 szint (más néven osztályok) vannak. Az osztályok teljes listája betűrendben: APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEY, AVAILABILITY GROUP, CERTIFICATE, CONTRACT, DATABASE, DATABASESCOPED CREDENTIAL, ENDPOINT, FULLTEXT CATALOG, FULLTEXT STOPLIST, LOGIN, MESSAGE TYPE, OBJECT, REMOTE SERVICE BINDING, ROLE, ROUTE, SCHEMA, SEARCH PROPERTY LIST, SERVER, SERVER ROLE, SERVICE, SYMMETRIC KEY, TYPE, USER, XML SCHEMA COLLECTION. (Egyes osztályok nem érhetők el bizonyos SQL Server-típusok esetében.) Az egyes osztályokkal kapcsolatos teljes információk megadásához egy másik lekérdezésre van szükség.

Principals

Engedélyeket kapnak tagoknak. A főszereplők lehetnek kiszolgálói szerepkörök, bejelentkezések, adatbázis-szerepkörök vagy felhasználók. A bejelentkezések olyan Windows-csoportokat jelölhetnek, amelyek sok Windows-felhasználót tartalmaznak. Mivel a Windows-csoportokat az SQL Server nem tartja karban, az SQL Server nem mindig tudja, hogy ki tagja egy Windows-csoportnak. Amikor egy Windows-felhasználó csatlakozik az SQL Serverhez, a bejelentkezési csomag tartalmazza a felhasználó Windows-csoporttagsági jogkivonatait.

Ha egy Windows-felhasználó egy Windows-csoporton alapuló bejelentkezéssel csatlakozik, előfordulhat, hogy egyes tevékenységekhez az SQL Servernek létre kell hoznia egy bejelentkezést vagy egy felhasználót az egyes Windows-felhasználók megjelenítéséhez. Egy Windows-csoport (Mérnökök) például felhasználókat (Mary, Todd, Pat) tartalmaz, a Mérnökök csoport pedig adatbázis-felhasználói fiókkal rendelkezik. Ha Mary rendelkezik engedéllyel, és létrehoz egy táblát, létre lehet hozni egy felhasználót (Mary) a tábla tulajdonosának. Vagy ha Todd nem kap meg egy engedélyt, amelyet a többi mérnökcsoport tagjai megkapnak, akkor létre kell hozni a Todd felhasználót az engedély megtagadásának nyomon követésére.

Ne feledje, hogy egy Windows-felhasználó több Windows-csoportnak is tagja lehet (például mérnököknek és vezetőknek egyaránt). Az Engedélyek, amelyek az Mérnökök vagy a Kezelők bejelentkezésére vonatkoznak, amelyek a felhasználónak egyedileg meg vannak adva vagy meg vannak tagadva, valamint amelyek a felhasználó tagként szereplő szerepeihez kapcsolódnak, összesítve lesznek és kiértékelésre kerülnek a tényleges jogosultságok meghatározásához. A HAS_PERMS_BY_NAME függvény megmutatja, hogy egy felhasználó vagy bejelentkezés rendelkezik-e adott engedéllyel. Az engedély megadásának vagy megtagadásának forrását azonban nem lehet egyértelműen meghatározni. Tanulmányozza az engedélyek listáját, és esetleg próbálkozzon próbálgatás és hiba alapján.

Hasznos lekérdezések

Kiszolgálói engedélyek

Az alábbi lekérdezés a kiszolgáló szintjén megadott vagy elutasított engedélyek listáját adja vissza. Ezt a lekérdezést a master adatbázisban kell végrehajtani.

Note

Kiszolgálószintű engedélyek nem adhatóak meg vagy kérdezhetők le az SQL Database-ben vagy az Azure Synapse Analyticsben.

SELECT pr.type_desc,
    pr.name,
    ISNULL(pe.state_desc, 'No permission statements') AS state_desc,
    ISNULL(pe.permission_name, 'No permission statements') AS permission_name
FROM sys.server_principals AS pr
LEFT JOIN sys.server_permissions AS pe
    ON pr.principal_id = pe.grantee_principal_id
WHERE is_fixed_role = 0 -- Remove for SQL Server 2008
ORDER BY pr.name,
    type_desc;

Adatbázis-engedélyek

Az alábbi lekérdezés az adatbázis szintjén megadott vagy elutasított engedélyek listáját adja vissza. Ezt a lekérdezést minden adatbázisban végre kell hajtani.

SELECT pr.type_desc,
    pr.name,
    ISNULL(pe.state_desc, 'No permission statements') AS state_desc,
    ISNULL(pe.permission_name, 'No permission statements') AS permission_name
FROM sys.database_principals AS pr
LEFT JOIN sys.database_permissions AS pe
    ON pr.principal_id = pe.grantee_principal_id
WHERE pr.is_fixed_role = 0
ORDER BY pr.name,
    type_desc;

Az engedélytábla minden engedélyosztálya csatlakoztatható más rendszernézetekhez, amelyek a biztonságos osztálysal kapcsolatos információkat nyújtanak. Az alábbi lekérdezés például annak az adatbázis-objektumnak a nevét adja meg, amelyet az engedély érint.

SELECT pr.type_desc,
    pr.name,
    pe.state_desc,
    pe.permission_name,
    s.name + '.' + oj.name AS OBJECT,
    major_id
FROM sys.database_principals AS pr
INNER JOIN sys.database_permissions AS pe
    ON pr.principal_id = pe.grantee_principal_id
INNER JOIN sys.objects AS oj
    ON oj.object_id = pe.major_id
INNER JOIN sys.schemas AS s
    ON oj.schema_id = s.schema_id
WHERE class_desc = 'OBJECT_OR_COLUMN';

A HAS_PERMS_BY_NAME függvénnyel megállapíthatja, hogy egy adott felhasználó (ebben az esetben TestUser) rendelkezik-e engedéllyel. Például:

EXECUTE AS USER = 'TestUser';
SELECT HAS_PERMS_BY_NAME ('dbo.T1', 'OBJECT', 'SELECT');
REVERT;

A szintaxis részleteiért lásd: HAS_PERMS_BY_NAME.

Következő lépések