A legtöbb adatbázis-biztonságot az adatbázis-kezelő rendszer belső biztonságának használatával valósítja meg az adatbázis-adminisztrátor. Lehetséges egyszerűsíteni az adatbázis-biztonságot, úgy hogy az adatok védelmére nézeteket hozunk létre.
Ha a cégünknek van egy DOLGOZO nevű táblája, amely a dolgozók minden adatát tartalmazza, és ha egy felhasználónak lekérdezési jogot adunk rá, akkor a felhasználó természetesen nem csak a saját magára vonatkozó adatokat érheti el, hanem a tábla összes adatát.
Azonban létrehozhatunk egy olyan nézetet, amely a DOLGOZO nevű tábla kényes információit kihagyja. Ha a tábla helyett a nézetre adunk a felhasználóknak lekérdezési jogot, akkor így a felhasználók a táblának csak a nézetben meghatározott részét kérdezhetik le. Például:
CREATE VIEW MINDEN_DOLGOZO AS
SELECT VEZETEKNEV, KERESZTNEV, IRANYITOSZAM, HELYSEG, UTCA
FROM DOLGOZO;
Ez az egyszerű példa egy nézetet mutat be, amely az alaptábla csak bizonyos oszlopait kérdezi le. Ha a felhasználó csak a nézetre kapja meg a lekérdezési jogot, akkor csak a nézetben meghatározott információkat nyerheti ki. Vertikális megszorításnak nevezzük, ha egy nézet kihagyja az alaptábla bizonyos oszlopait.
Horizontális megszorításnak nevezzük, amikor a nézet az alaptáblának csak bizonyos sorait kérdezi le. Ezt úgy adhatjuk meg, hogy a nézet definíciójában használt lekérdezésben WHERE feltételt adunk meg. Például:
CREATE VIEW DOLGOZO_RESZLEG20 AS
SELECT VEZETEKNEV, KERESZTNEV, IRANYITOSZAM, HELYSEG, UTCA
FROM DOLGOZO
WHERE RESZLEG_AZON=20
WITH CHECK OPTION;
Ha a felhasználók lekérdezik a nézetet, csak a feltételnek megfelelő sorokat kapják meg.
Ha a WITH CHECK OPTION záradék nincs megadva és a nézeten frissítést vagy törlést hajtunk végre, akkor olyan értékek is változhatnak, amelyek a nézetben nem látszanak. Például ha olyan dolgozókat törlünk az adatbázisól akiknek a vezetékneve 'A' betűvel kezdődik, akkor nem csak a 20-as azonosítójú részleg megfelelő dolgozóit törölnénk, hanem a táblában található összes dolgozó közül választanánk ki az 'A' betűvel kezdődőeket.
Ha viszont megadjuk a WITH CHECK OPTION záradékot, akkor frissítéskor és törléskor biztosak lehetünk abban, hogy azok az adatok, amelyek a nézet WHERE feltételét nem elégítik ki, nem fognak módosulni vagy törlődni.
A nézet segítségével biztosítani tudjuk, hogy egy felhasználó pontosan azokhoz (és csak azokhoz) az adatokhoz férjen hozzá, amelyekhez jogosultsága van, anélkül, hogy ismerné a mögöttes üzleti logikát és táblakezelést.
Egy tárolt eljárás futtatásának a jogát explicit módon kell megadni a felhasználónak, illetve visszavonni tőle. A tárolt eljárás futtatásához a felhasználónak nincs szüksége más jogra. Azaz, ha a tárolt eljárás egy tábla tartalmát törli, akkor a felhasználónak nincs szüksége olyan jogosultságra, amellyel az adott tábla tartalmát törölheti. A tárolt eljárásnak kell olyan felhasználó nevében futnia, amelynek van joga törölni a tábla tartalmát.
A tárolt eljárásokat meg lehet úgy valósítani, hogy egy tábla adatainak csak sor vagy oszlopszintű részhalmazát érjék el. A tárolt eljárás futtatásának a jogát a felhasználókhoz lehet rendelni úgy, hogy az a tárolt eljárás tulajdonosának a jogosultságaival fusson. Ha a felhasználónak nincs joga a tárolt eljárás által módosított táblának a frissítésére, a felhasználó a tárolt eljáráson keresztül akkor is képes elérni az adatokat. Ezzel a módszerrel a szükséges biztonság is elérhető és ha megfelelően van kódolva, akkor akár jobb teljesítményt is biztosíthat.
Egy cég életében előfordulhat olyan eset is, amikor a felhasználó a napnak csak egy bizonyos részében használhatja egy tábla adatait, más időszakban viszont nem tekintheti meg. Az ilyen és ehhez hasonló esetekben a biztonságot tárolt eljárással lehet megoldani. A tárolt eljárás elindításakor az eljárás ellenőrzi, hogy az eljárást futtató felhasználónak van-e joga az adatokkal dolgozni a napnak annak az időszakában.