7.2. Jogok adása és visszavonása

Az adatbázis-erőforrások használatának a feljogosítását felhasználói névhez lehet rendelni.

Az adatbázis-adminisztrátor az adatvezérlő nyelv (Data Control Language, DCL) segítségével felügyeli az adatbázis-biztonságot. A DCL utasításokkal lehet jogot adni a felhasználóknak az adatbázis-objektumok és parancsok használatára. A DCL nyelv két alap utasítást tartalmaz a jogosultságok kezelésére:

A GRANT utasítás két listából áll össze: az egyikben a jogosultságok vannak, a másikban a felhasználók. A két listát kell összerendelni. A GRANT utasítást az a felhasználó tudja kiadni, aki magas szintű csoportfeljogosítással rendelkezik (pl. DBA), vagy WITH GRANT OPTION záradékkal kapott valamilyen jogot, vagy az adatbázis-objektum tulajdonosa.

A WITH GRANT OPTION záradékkal kapott jogosultságot a felhasználó továbbadhatja más felhasználónak. Ez alapján megkülönböztethetünk:

A kétféle megközelítésből a központi adminisztráció a megfelelőbb. Természetesen a megfelelő dokumentáció itt sem maradhat el.

Az adatbázisjogok kiadására tervezett alkalmazói programokat annak a felhasználónak kell futtatni, akinek van megfelelő jogosultsága kiadni az alkalmazói programba kódolt GRANT és REVOKE utasításokat. Az olyan alkalmazói programokba, amelyeket nem kimondottan adatbázisjogok kiadására terveztek, kerüljük a GRANT és REVOKE utasítások használatát. Egyébként az adatbázisbeli feljogosítások követhetetlenek lesznek.

7.2.1. A jogok típusai

Minden adatbázis-kezelő rendszer biztosít alapvető jogtípusokat, mint jogosultság adatok elérésére, adatbázis-objektumok létrehozására, vagy különböző rendszerfunkciók teljesítésére. A különböző adatbázis-kezelő rendszereknek azonban lehetnek további jogtípusai is.

A következő jogtípusokat általában minden adatbázis-kezelő rendszer biztosítja:

  • táblajogok: annak a felügyeletére, hogy ki tudja lekérdezni és módosítani a táblában lévő adatokat

  • adatbázisobjektum-jogok: felügyelni, hogy ki hozhat létre új adatbázis-objektumokat és ki dobhat el létező adatbázis-objektumokat

  • tárolt-eljárás jogok vagy programjogok: felügyelni, hogy ki futtathatja a tárolt függvényt, vagy a tárolt eljárást, illetve az adatbázisbeli programokat

  • rendszerjogok: felügyelni, hogy ki hajthat végre adott rendszerszintű tevékenységet

7.2.1.1. Táblajogok

A táblajogok felügyelik, hogy a felhasználók mely táblákat, nézeteket és táblabeli oszlopokat érhetnek el, illetve módosíthatnak. A következő jogosultságokat lehet a táblákhoz és a nézetekhez adni:

  • SELECT: a felhasználó lekérdezhet a táblából vagy a nézetből

  • INSERT: a felhasználó sorokat szúrhat be a táblába vagy a nézetbe

  • UPDATE: a felhasználó módosíthatja a táblát vagy a nézetet

  • DELETE: a felhasználó sorokat törölhet a táblából vagy a nézetből

  • ALL: a felhasználó lekérdezhet, beszúrhat, módosíthat és törölhet a táblán vagy nézeten

Például a következő utasítás lehetővé teszi, hogy a FELHASZNALO7 nevű felhasználó a CIMEK táblából töröljön:

GRANT DELETE ON CIMEK TO FELHASZNALO7;

Néhány táblaprivilégium oszlop szinten is megadható. Ekkor a felhasználó a táblának csak a megadott oszlopát tudja módosítani, más oszlopokat nem. Például a következő utasítás a FELHASZNALO7 nevű felhasználónak azt a jogot adja, hogy a CIMEK táblának csak az IRANYITOSZAM nevű oszlopát módosítsa:

GRANT UPDATE ON CIMEK (IRANYITOSZAM) TO FELHASZNALO7;

A táblajogokat az adatbázis-adminisztrátor általában a fejlesztői és a tesztkörnyezetben a fejlesztőknek adja fejlesztési céllal.

A termelési rendszerben az adatok elérésének és módosításának a felügyeletét általában nem úgy oldják meg, hogy a különböző felhasználókhoz táblajogot rendelnek. Helyette inkább a felhasználók által használt alkalmazások, illetve a tárolt eljárások biztosítják az adatok elérésének a felügyeletét. A programozók és a végfelhasználók csak bizonyos esetekben kaphatnak táblajogokat a termelési környezetben.

7.2.1.2. Adatbázisobjektum-jogok

Az adatbázisobjektum-jogok felügyelik, hogy mely felhasználóknak van joguk létrehozni adatbázis-objektumokat, mint például indexeket, táblákat, nézeteket, tárolt eljárásokat, triggereket. Azt, hogy konkrétan milyen jogosultságokat lehet kiosztani, függ az adatbázis-kezelő rendszertől és az adott adatbázis-objektumoktól. A legtöbb adatbázis-kezelő rendszer esetén van CREATE jog, amelyet olyan adatbázis-objektumokra vonatkozóan lehet kiadni, mint például tábla, táblatér, index, trigger, vagy felhasználó által definiált típus. Például a következő utasítás jogot ad arra, hogy a FELHASZNALO5 és a FELHASZNALO9 nevű felhasználók táblákat és indexeket hozzanak létre:

GRANT CREATE INDEX, CREATE TABLE TO FELHASZNALO5, FELHASZNALO9;

Az adatbázis-adminisztrátor gyakran nem engedi, hogy rajta kívül más is hozhasson létre adatbázis-objektumokat az adatbázisban. Ennek az az oka, hogy ha más felhasználók is kapnak jogot valamilyen adatbázis-objektum létrehozására, akkor nehéz lenne felügyelni az adatbázis-objektumok számát, illetve azt, hogy mely objektumokat használják valójában és melyek azok, amelyekről elfeledkeztek. Továbbá ha tábla, index vagy táblatér létrehozásának a jogáról beszélünk, akkor az adatbázis-adminisztrátor nehezen tudná meghatározni a pontos tárigényt és tervezni az adatbázis számára szükséges tárterületet.

Azonban a fejlesztőknek gyakran kell a munkájuk miatt tárolt eljárásokat, tárolt függvényeket, triggereket létrehozni, amelyekhez a jogot természetesen a legtöbb esetben meg is kapják. A fejlesztők ezeket a jogokat gyakran egy szerepkör segítségével kapják meg.

7.2.1.3. Tárolt-eljárás jogok vagy programjogok

Az EXECUTE jogosultság segítségével adhatunk a felhasználóknak engedélyt egy program vagy tárolt eljárás futására. Például a következő parancs a FELHASZNALO1 nevű felhasználónak és FELHASZNALO9 nevű felhasználónak a PROC1 nevű tárolt eljárásra ad futtatási jogok:

GRANT EXECUTE ON PROC1 TO FELHASZNALO1, FELHASZNALO9;

A programjogokat és a tárolt-eljárás jogokat gyakran egyszerűbb felügyelni, mint a táblajogokat. Emiatt lehet az hasznos, ha a termelési adatokat csak a programokon vagy tárolt eljárásokon keresztül érjük el. A programban és az tárolt eljárásban lévő programlogika kezeli azt, hogy mely táblák és oszlopok módosíthatóak. Így az adatbázis-adminisztrátornak könnyebb lesz a termelési adatok integritását karbantartani.

7.2.1.4. Rendszerjogok

A rendszerjogok felügyelik, hogy a felhasználók melyik adatbázis-kezelő rendszerbeli eszközöket használhatják és milyen adatbázis-kezelő rendszerbeli parancsokat futtathatnak. A rendszer-privilégiumok elérhetősége adatbázis-kezelő rendszerről adatbázis-kezelő rendszerre változhat, de a legtöbb tartalmazza a következőket: az archív adatbázis-naplózás, az adatbázisszerver leállítása és újraindítása, nyomkövetés indítása a monitorozáshoz, a tárolás kezelése és a gyorsítótárak kezelése.

A következő példa a FELHASZNALO6 nevű felhasználónak ad nyomkövetési jogot:

GRANT TRACE TO FELHASZNALO6;

A rendszerjogokat óvatosan kell kezelni, és általában az adatbázis-adminisztrátor és a rendszer-adminisztrátor számára kell fenntartani.

7.2.2. Jogok adása PUBLIC-nak

Az adatbázis-kezelő rendszereknek általában létezik egy speciális „felhasználója”: a PUBLIC. Valójában a PUBLIC nem felhasználó, de jogot adhatunk neki, és jogok elvehetünk tőle. Ha a PUBLIC-nak adunk jogot, akkor a hozzárendelt jogot mindenki megkapja, aki az adatbázisba be tud jelentkezni. A PUBLIC-nak adott jogokat nem lehet WITH GRANT OPTION-nal adni, hiszen azt úgyis mindenki megkapja.

Például a következő utasítás minden felhasználó számára lehetővé teszi, hogy sorokat töröljön a CIMEK nevű táblából:

GRANT DELETE ON CIMEK TO PUBLIC;

Ha jogokat adunk a PUBLIC-nak, az adatbázis-adminisztrátor elvesztheti a kontrollt az adott adatbázis-objektum vagy erőforrás felett, mert mindenki elérheti vagy használhatja azt az objektumot vagy erőforrást, melyet a GRANT utasításban megadtunk. Bonyolultabb feladat, ha a jogokat felhasználónként osztjuk ki, de így az adatbázis-adminisztrátor az adatbázis-objektumok és erőforrások elérhetőségét nyomon tudja követni.

7.2.3. Jogok visszavonása

A REVOKE utasítást használjuk az olyan jogosultságok visszavonására, amelyeket előzőleg a GRANT utasítással odaadtunk. A REVOKE szintaktikája hasonló a GRANT szintaktikájához: megadjuk, hogy mely felhasználóktól milyen jogokat vonunk vissza. A privilégiumokat az adatbázis-kezelő rendszer automatikusan visszavonja, ha egy adatbázis-objektumot eldobnak.

Például a következő utasítás visszavonja a CIMEK tábla IRANYITOSZAM oszlopának módosítási jogosultságát a FELHASZNALO7 nevű felhasználótól:

REVOKE UPDATE ON CIMEK (IRANYITOSZAM) FROM FELHASZNALO7;

Ha egy felhasználó egy jogot kétféleképpen kapott meg: egyszer a saját jogán, egyszer pedig azért, mert a PUBLIC megkapta, és ha a PUBLIC-tól visszavonjuk a jogot, akkor természetesen a felhasználó a saját jogán továbbra is rendelkezik az adott jogosultsággal.

7.2.3.1. Kaszkádolt visszavonás

Ha egy jogot az adatbázis-adminisztrátor visszavon, akkor az adatbázis-kezelő rendszernek el kell döntenie, hogy szükség van-e további jogosultság visszavonására valamely felhasználótól. Ha egy jog visszavonása arra készteti az adatbázis-kezelő rendszert, hogy további jogokat vonjon vissza, azt kaszkádolt visszavonásnak nevezzük.

Ha Jánosnak X joga van és joga van továbbítani azt, és az X jogot továbbadta Károlynak és Gézának, és ha Jánostól elveszik az X jogot, akkor Károlynak és Gézának sem lesz a továbbiakban X joga.

Azért, hogy a kaszkádolt visszavonás hatását minimalizáljuk, kerüljük a WITH GRANT OPTION-nal adott jogokat. Minél kevesebb az olyan felhasználó, aki jogokat tud adni, annál könnyebb kezelni és adminisztrálni az adatbázis-kezelő rendszer biztonsági struktúráját.

7.2.4. Biztonsági riportok

Az adatbázis-adminisztrátornak monitorozni és riportolni kell a felhasználók jogait. Az adatbázis-biztonság a rendszerkatalógusban van karbantartva. Az adatbázis-adminisztrátor SQL utasítások segítségével kinyerheti a szükséges információkat a megfelelő rendszerkatalógus-táblákból. Néhány adatbázis-kezelő rendszer nézeteket és tárolt eljárásokat biztosít, amelyek leegyszerűsítik az adatbázis-biztonsági információk kinyerését.

Legyünk biztosak, hogy a rendszerkatalógus megfelelő védelmet kap a termelési rendszerben. Csak az adatbázis-adminisztrátornak, rendszer-adminisztrátornak és a biztonsági adminisztrátornak kell elérnie a rendszerkatalógusban tárolt, adatbázisra vonatkozó biztonsági információkat.

A felhasználói biztonsági követelmények és elvárások az idővel alakulnak. Ha új alkalmazásokra van szükség az üzleti követelmények változása miatt, az adatbázis-biztonságnak is változnia kell. Az adatbázis-adminisztrátornak szabályos időközönként biztonsági ellenőrzést kell végrehajtania, hogy biztosítsa azt, hogy a megvalósított adatbázis-biztonság megegyezik a jelenlegi felhasználói követelményekkel. A rendszerkatalógus tábláiból készült riportok lehetnek egy ilyen felülvizsgálat inputjai.