Weboldal keresés

Nyilvános szerepkör az SQL Serverben


Az adatbázis-szerepkörök hasonlóak a Windows-csoportokhoz - ahelyett, hogy az egyes felhasználókat külön vonnák meg vagy biztosítanák a hozzáférést, az adminisztrátorok a szerepkörök engedélyeinek megadásával vagy visszavonásával, valamint a szerepkör-tagság megváltoztatásával kezelik a hozzáférést. A szerepkörök használata megkönnyíti az adatbázis-felhasználók jogosultságainak pontos megadását és visszavonását. És mivel több felhasználó is tagja lehet egy SQL-adatbázis-szerepkörnek, könnyedén kezelheti egyszerre a felhasználók egész csoportjának jogait.

Ebben a bejegyzésben elmagyarázzuk a Microsoft SQL Server nyilvános szerepét és a hozzá kapcsolódó bevált módszereket. (Itt szándékosan kisbetűket használunk, mivel az SQL Server világában így írják le a nyilvános szerepkört, ellentétben az Oracle világgal.)

A szerepkörök típusai az SQL Serverben

A Microsoft SQL Server többféle előre elkészített szerepkört kínál:

  • Rögzített kiszolgálói szerepkörök - „Rögzített” kiszolgálói szerepköröknek nevezzük őket, mivel a nyilvános szerepkör kivételével nem módosíthatók vagy nem ejthetők el.
  • Rögzített adatbázis szerepek
  • Alkalmazásszerep - Egy egyszerű adatbázis, amelyet egy alkalmazás futtathat saját engedélykészletével (alapértelmezés szerint le van tiltva)
  • Felhasználó által meghatározott szerepkörök (az SQL Server 2012-től kezdve) - Csak szerverszintű engedélyek adhatók hozzá a felhasználó által meghatározotthoz

Ahol a közéleti szerep illik

Minden adatbázisplatform rendelkezik egy előre meghatározott, nyilvános nevű szereppel, de ennek a szerepnek a megvalósítása platformonként eltérő. Az SQL Serverben a nyilvános szerepkör a rögzített kiszolgálói szerepkör része, és engedélyeket lehet adni, megtagadni vagy visszavonni az SQL Server nyilvános szerepkör-engedélyeiből.

Az SQL Server bejelentkezés létrehozásakor a nyilvános szerepkör hozzá van rendelve a bejelentkezéshez, és nem vonható vissza. Ha az egyszerű kiszolgálónak nincs megadva vagy megtagadva bizonyos engedélyeket egy biztonságos objektumhoz, a bejelentkezés automatikusan örökli a nyilvános szerepkör számára biztosított engedélyeket az adott objektumhoz.

Nyilvános szerepkörhöz rendelt engedélyek

Az SQL Server biztonságának fenntartásához és számos előírásnak való megfeleléshez, beleértve a PCI DSS-t és a HIPAA-t, ismernie kell az egyes felhasználókhoz rendelt összes szerver- és adatbázis-szintű szerepkört. Tekintsük át a nyilvános szerepkörhöz rendelt szerverszintű engedélyeket a Management Studio tranzakciós SQL lekérdezésével:

SELECT sp.state_desc as "Permission State", sp.permission_name as "Permission",
sl.name "Principal Name",sp.class_desc AS "Object Class", ep.name "End Point"
FROM sys.server_permissions AS sp
  JOIN sys.server_principals AS sl
    ON sp.grantee_principal_id = sl.principal_id
  LEFT JOIN sys.endpoints AS ep
    ON sp.major_id = ep.endpoint_id
WHERE sl.name = 'public';

Ahogy a fenti táblázat mutatja, csak öt szerverszintű engedély van hozzárendelve a nyilvános szerepkörhöz. Vegye figyelembe, hogy a VIEW ANY DATABASE engedély nem ad hozzáférést a felhasználóknak egyetlen adatbázis-objektumhoz sem; csak az SQL Server-példány összes adatbázisának felsorolását teszi lehetővé. Ezért ha új bejelentkezést hoz létre, és nem rendel hozzá más szerepkört vagy engedélyt, a felhasználó csak bejelentkezhet a példányba, és nem tud mást tenni.

Engedélyek, ha egy SQL Server-bejelentkezéshez alapértelmezett adatbázis van hozzárendelve

Most hozzunk létre egy SQL Server bejelentkezést, amely SQL hitelesítést használ azáltal, hogy alapértelmezett adatbázist rendel hozzá a felhasználóhoz.

USE [master]
GO
CREATE LOGIN [SQTest] WITH PASSWORD=N'nhggLboBn6SHolSWfipjzO/7GYw8M2RMbCt1LsCTK5M=', DEFAULT_DATABASE=[SBITS], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

Ha bejelentkezünk az adott felhasználóként, és felsoroljuk az összes adatbázis szintű engedélyt a felhasználó alapértelmezett SBITS adatbázisához, akkor láthatjuk, hogy milyen jogosultságokkal rendelkezik. Amint az alább látható, a Stealth felhasználónak nincs engedélye az SBITS adatbázishoz, bár ez a felhasználó alapértelmezett adatbázisa. Más szóval, csak azért, mert egy alapértelmezett felhasználói adatbázis van hozzárendelve a felhasználói bejelentkezéshez, ez nem jelenti azt, hogy a felhasználó látni fogja az adatbázis objektumokat vagy adatokat.

Ennek ellenőrzésére a következő szkriptet használhatjuk:

EXECUTE AS LOGIN= 'SQTest';
GO
USE SBITS
GO
SELECT dp.state_desc AS "Class Description", dp.permission_name AS "Permission Name",
SCHEMA_NAME(ao.schema_id) AS "Schema Name", ao.name AS "Object Name"
FROM sys.database_permissions dp
 LEFT JOIN sys.all_objects ao
  ON dp.major_id = ao.object_id
 JOIN sys.database_principals du
  ON dp.grantee_principal_id = du.principal_id
WHERE du.name = 'TestLoginPerms'
 AND ao.name IS NOT NULL
ORDER BY ao.name;
REVERT

A törzsadatbázis nyilvános szerepköre által örökölt engedélyek

Mivel a lopakodó felhasználói bejelentkezés alapértelmezés szerint a nyilvános szerepkör része, lássuk a nyilvános szerepkör által örökölt engedélyeket a fő adatbázisban.

USE master;
GO
 SELECT sp.state_desc AS "Permission State", sp.permission_name AS "Permission",
 SCHEMA_NAME(ao.schema_id) AS 'Schema', ao.name AS "Object Name"
 FROM sys.database_permissions sp
  LEFT JOIN sys.all_objects ao
     ON sp.major_id = ao.object_id
   JOIN sys.database_principals dp
     ON sp.grantee_principal_id = dp.principal_id
 WHERE dp.name = 'public'
 AND ao.name IS NOT NULL
 ORDER BY ao.name

Az SQL Server 2016-ban 2089 engedélyt tárolnak a főadatbázisban, amelyek a nyilvános szerepkör számára biztosítottak. Bár ijesztőnek tűnhet, ezek mind SELECT engedélyek, és nem teszik lehetővé a Stealth felhasználó számára, hogy változtatásokat hajtson végre a fő adatbázisban. Jó gyakorlat azonban néhány engedély visszavonása a szervezet biztonsági szabályzata alapján. Legyen azonban körültekintő a visszavonásuk során, mert bizonyos körülmények között ezekre a felhasználóknak szükségük van a normál működéshez.

A szerepkör áttekintése és irányítása egyszerűsítése

Ahelyett, hogy összetett egyéni szkriptekhez folyamodna a nyilvános szereppel kapcsolatos problémák egy-egy példányának kiderítéséhez, fontolja meg a StealthAUDIT használatát. Ez az adathozzáférés-irányítási platform felsorolja az SQL Server összes szerepkörét és jogosultságát, beleértve az SQL Server nyilvános szerepköreit és az SQL Server nyilvános adatbázis-szerepköreit, és részletes jogosultsági jelentéseket készíthet. Egyetlen üvegtábla nézetet biztosít a nyilvános szerepkörről a vállalat összes SQL-kiszolgálóján, és segít egy gombnyomással orvosolni a problémákat.

Az SQL Server nyilvános szerepének bevált gyakorlatai

A következő bevált módszereket ajánljuk az SQL Server nyilvános szerepvállalására vonatkozóan:

  • Semmilyen körülmények között ne adjon további jogosultságokat a nyilvános szerepkörnek az alapértelmezett jogosultságokon kívül. Ha szükséges, használjon egy felhasználó által meghatározott szerepet.
  • Ne módosítsa a nyilvános szerepkör kiszolgálószintű engedélyeit, mert ezzel megakadályozhatja, hogy a felhasználók csatlakozzanak az adatbázishoz.
  • Minden alkalommal ellenőrizze a nyilvános engedélyeket, amikor frissíti az SQL Servert, mivel a Microsoft gyakran módosítja a nyilvános szerepkört.

GYIK

Mi a nyilvános adatbázis szerepe?

A nyilvános adatbázis-szerepkörhöz adott engedélyeket minden adatbázis-felhasználó örökli.

Milyen engedélyekkel rendelkezik a nyilvános szerepkör az SQL Serverben?

Minden SQL Server bejelentkezés a nyilvános kiszolgálói szerepkörhöz tartozik. Ha egy egyszerű kiszolgálónak nincs megadva vagy megtagadva adott engedélye egy biztonságos objektumhoz, a felhasználó örökli az adott objektumhoz adott engedélyeket a nyilvános szerepkör számára.

Kapcsolódó cikkek