
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.