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:
GRANT: a jogokat ad a felhasználónak
REVOKE: visszavonja a jogokat a felhasználótól
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:
Központi adminisztrációt: ekkor a központi adminisztrátor feladata a jogokat kiosztani. Rajta kívül más nem adhat jogosultságokat. A központi adminisztrációt általában könnyebb adminisztrálni, de az adatbázis-adminisztrátorra sokkal több feladat hárul.
Nem központi adminisztrációt: A felhasználók jogokat adhatnak, illetve továbbadhatnak más felhasználók számára. A nem központi adminisztrációt általában könnyebb létrehozni, de sokkal nehezebb felügyelni. Minél több felhasználó adhat tovább jogot, annál nehezebb lesz a jogosultságokat kezelni, nyomon követni.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.