C# - A syspermissions rendszertábla

MS SQL Server rendszertáblái 10. rész

forráskód letöltése
Cikkünkben a felhasználói adatbázisokban is megjelenő syspermissions rendszertáblával foglalkozunk, melynek kapcsán ejtünk néhány szót a MS SQL Server jogosultsági rendszeréről, valamint bemutatunk néhány olyan rendszerfüggvényt, melyek kapcsolatba hozhatók a rendszertáblával. Ezek felhasználásával modellezzük a syspermissions és más rendszertáblák kapcsolatát.
A példához szükséges a SampleDatabase10 adatbázis, melyet a mellékelt SampleDatabase10.sql lefuttatásával hozhatunk létre. A SampleDatabase10.sql script 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
A syspermissions rendszertábla arra vonatkozóan tartalmaz adatokat, hogy az adatbázis objektumaihoz az egyes felhasználóknak milyen természetű jogosultsága van. Minden objektum minden jogosultágához egy bejegyzést tartalmaz.
A bejegyzések másik típusa a tiltások, vagyis hogy az egyes objektumokhoz mely felhasználók milyen joggal nem rendelkeznek. Erre azért van szükség, mert az egyes objektumok létrehozásakor alapértelmezett módon járnak bizonyos jogok. Az utóbbi típusú bejegyzések a szűkítő értelmű jogosultságokat tartalmazzák.
Ahhoz, hogy eligazodjunk a syspermissions rendszertábla adatain, vagyis hogy milyen felhasználói objektumokat jelentenek az egyes oszlopokban található értékek, ejtsünk pár szót a MS SQL Server felhasználóiról.
Elindítva a MS SQL Server Enterprise Manager segédalkalmazását, és megkeresve az aktív szerverünket láthatjuk, hogy a Security mappa Logins alkönyvtárában van néhány felhasználó. Ezek az objektumok jelentik a szerverhez valamilyen szintű hozzáférési jogosultsággal rendelkező felhasználói „profilokat”.
Ezeket az objektumokat a szerver ’master’ nevű rendszeradatbázisának sysxlogins rendszertábláján keresztül érhetjük el. Az Enterprise Manager alkalmazással létrehozott új profilokkal kapcsolatos információk is ide kerülnek.
Ezen profilok létrehozáskor kapnak alapértelmezett jogosultságokat, melyeket az egyes adatbázisok szintjén felüldefiniálhatunk. Ezt olyan módon tesszük, hogy a vizuális eszköz, vagy a Query Analyzer alkalmazás segítségével megadjuk őket az adatbázis felhasználóiként valamilyen jogokkal.
Az egyes adatbázisok felhasználóit az Enterprise Manager-ben az adatbázis mappájának Users almappájában találjuk meg. Ezen a szinten már akár táblák oszlopainak szintjéig is finomíthatjuk a hozzáadott felhasználók jogait.
A fent említett műveletekhez természetesen rendszerfüggvényeket is használhatunk, melyeket programjainkból is elérhetünk. Ezeket használjuk a mellékelt példánkban is, saját tárolt eljárásainkba ágyazva őket. A rendszerfüggvények rendre: sp_addlogin, sp_droplogin, sp_adduser, sp_dropuser. Vizsgáljuk meg ezeket:
sp_adduser
A rendszerfüggvénnyel felhasználói profilt adhatunk a szerverhez.
Szintaxisa:
sp_addlogin [ @loginname = ] 'login' 
            [ , [ @passwd = ] 'password' ] 
            [ , [ @defdb = ] 'database' ]
Paraméterek:
Paraméter Típus Leírás
@loginname sysname A szerver-szinten létrehozandó felhasználó profil felhasználóneve.
@passwd sysname Esetlegesen megadandó jelszó.
@defdb sysname Alapértelmezett adatbázis, melyet a felhasználó elérhet.
Példa:
EXEC sp_addlogin ’Visitor’,’Visitor’,’SampleDatabase10’
sp_droplogin
A felhasználói profilok valamelyikének törlésére szolgál.
Szintaxisa:
sp_droplogin [ @loginname = ] 'login'
Paramétere értelemszerűen egy létező profil neve.
Példa:
EXEC sp_droplogin ’Visitor’
sp_adduser
Segítségével hozzáadhatunk egy profil, vagy más szóval biztonságos hozzáférést (hiszen más rendszerszinten létező felhasználóról van szó) az adott adatbázishoz. Az ily módon megadott felhasználóval kapcsolatos információ az adatbázis sysusers rendszertáblájában jelenik meg.
Szintaxisa:
sp_adduser [ @loginname = ] 'login' 
           [ , [ @name_in_db = ] 'user' ] 
           [ , [ @grpname = ] 'group' ]
Paraméterek:
Paraméter Típus Leírás
@loginname sysname A szerver-szinten létező felhasználónév.
@name_in_db sysname Az adott adatbázisban használni kívánt felhasználói név.
@grpname sysname Csoport vagy szerep neve, melyhez a hozzáadott felhasználó automatikusan tartozni fog.
Példa:
EXEC sp_adduser ’Visitor’,’sampleuser’
sp_dropuser
Az adatbázishoz adott felhasználó törlése adatbázis szinten.
Szintaxisa:
sp_dropuser [ @name_in_db = ] 'user'
Paraméterként az adatbázisban használt nevet kell használni.
Példa:
EXEC sp_dropuser ’sampleuser’
Az adott adatbázis sysusers rendszertáblájában minden bekerült felhasználó kap egy azonosítót, mellyel más táblákban azonosítható. Ezzel az azonosítóval kerül be többek közt a syspermissions táblába is. Az adott objektum, melyhez jogosultságokat kaphat szintén azonosítóval jelenik meg a táblában.
Az egyes jogosultságok hozzárendelésére használható az Enterprise Manager vizuális eszköz csakúgy, mint néhány SQL-parancs. A vizuális eszközben az adott felhasználóra kattintva megjelenik egy ablak, melyben a ’Permissions’ gombot kell választani ahhoz, hogy elérjük a beállító ablakot, mely igen részletes.
Az említett SQL-parancsok sem bonyolultabbak. Erre a célra a GRANT és REVOKE parancsok használhatók, melyek esetén is meg kell adni, hogy milyen jogot adunk mely felhasználónak, mely objektum vonatkozásában.
A GRANT szintaxisa:
GRANT [jogosultság neve]
ON    [objektum neve]
TO    [felhasználó neve]
Példánkban ezt a következőképpen használtuk:
GRANT SELECT
ON Table1
TO sampleuser
A REVOKE alig tér el ettől:
REVOKE SELECT
ON   Table1
FROM sampleuser
Vizsgáljuk meg a syspermissions rendszertábla oszlopait:
Oszlop neve Típusa Leírás
id int Az objektum azonosítója (sysobjects táblából).
grantee smallint A jogosultságot kapó felhasználó azonosítója.
grantor smallint A jogosultságot adó/elvonó felhasználó azonosítója (általában az objektum tulajdonosa).
actadd smallint Belső használatra.
actmod smallint Belső használatra.
seladd varbinary(4000) Belső használatra.
selmod varbinary(4000) Belső használatra.
updadd varbinary(4000) Belső használatra.
updmod varbinary(4000) Belső használatra.
refadd varbinary(4000) Belső használatra.
refmod varbinary(4000) Belső használatra.
A parancsállomány lefuttatása után egy Table1 tábla és három tárolt eljárás kerül az adatbázisba (AddLogin, AddUser, DropUser).
Mellékelt példánkban a Form ’Felhasználók kezelése’ fül alatt követhetjük nyomon a ’master’ adatbázis sysxlogins rendszertáblájának adatait, melybe induláskor bekerül egy bejegyzés, ugyanis létrehoztunk egy felhasználói profilt ’Visitor’ néven.
A fül alsó táblája a SampleDatabase10 adatbázis sysusers rendszertáblájának adatait tartalmazza. A gombokkal hozzáadhatjuk, valamint törölhetjük a ’Visitor’ felhasználót ’sampleuser’ névvel az adatbázisból.
A Form ’SYSPERMISSIONS rendszertábla’ füle alatt adhatunk, vagy vehetünk el egy SELECT jogosultságot a Table1 tábla vonatozásában a ’sampleuser’ felhasználótól. A felületen megjelenik a Table1 adattábla azonosítója, hogy könnyebb legyen megtalálni a bekerült bejegyzést.

MS SQL Server rendszertáblái cikksorozat