Práca s oprávnenia patrí medzi základnu súčasť administrácie databáz. Oprávnenia sa prideľujú v závislosti od náplne práce, ktorú uživatelia databázy vykonávajú. Rovnako sú akýmsi databázovým bezpečnostným prvkom, ktorý predchádza iné softvérové bezpečnostné prvky.Je rozdiel či uživateľ potrebuje len čítať alebo aj zapisovať, alebo či potrebuje spravovať celú databázu alebo iba jej časť. Podľa toho sa oprávnenia prideľujú. V DB Oracle poznáme 3 druhy oprávnení:
Existuje viac ako 100 systémových oprávnení, ktoré možno udeliť jednému userovi resp. schéme ak rozprávame o iných DB jazykoch, najznámejšie sú create session, create table,create view, create sequence, create synonym...Rozdiel medzi systemovým a objektovým oprávnením je v tom, že systémové oprávnenia umožňuje pristupovať k objektu ako celku a objektové k jednotlivým častiam tzn mám napríklad celkový prístup ku všetkým tabuľkám s možnosťou zápisu alebo iba k jednej bez zápisu.Keď sa pri pridelení oprávnenia pridá slovo ANY, user môže napr. vytvoriť tabuľku v akejkoľvek schéme.Keď sa zas pridá slovo PUBLIC, všetci useri môže napr. vytvoriť tabuľku v akejkoľvek schéme čo je viacmenej oprávnenie hodné administrátora alebo system usera, ktorý je v Oracle default.Keď sa pridá WITH ADMIN OPTION, user môže pridelené oprávnenie prideľovať ďalším userom. POSTUP pre pridanie systemovych oprávnení:
"_ORACLE_SCRIPT"=true; !Ak sa odoberie oprávnenie (Revoke CREATE TABLE from user_name), neodoberie sa automaticky oprávnenie od iných userov , ktorým bolo pridelené!
Umožňujú pristupovať k jednotlivým častiam objektu.Vlastní ich automaticky user (schema), ktorý objekt vytvoril, on prideľuje oprávnenia ďalším userom / alebo system user prideľuje. Medzi tabuľkové oprávnenia patria: SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX, ALL.Tabuľkové oprávnenia možno definovať aj na úrovni stĺpcov (INSERT, UPDATE, REFERENCES).Keď sa pridá WITH GRANT OPTION, user môže pridelené oprávnenie prideľovať ďalším userom (Napr. Grant select on table_name to user_name WITH GRANT OPTION). Je dôležité spomenúť. že ak sa dropne tabuľka, všetky oprávnenia sa dropnu a ak sa dá recreate, znovu sa musia prideliť, keď sa však dá FLASHBACK TABLE ... BEFORE DROP , oprávnenia zostanú. Príklady objektových oprávnení:
!Na rozdiel od sys. oprávnení ak sa odoberie oprávnenie (revoke from..)od 1 usera, odoberie sa automaticky oprávnenie od iných userov, ktorým user oprávnenie pridelil!
Roly predstavujú organizovaný systém aby sme mohli zoskupiť inak roztrúsené oprávnenia (napríklad vytvoríme rolu na vytváranie DML v tabuľke-ách) Oprávnenie pridelené pre rolu existuje samostatne ako oprávnenie pridelené pre usera. Práve rola je dôležitým bezpečnostným prvkom v databáze a jej názov by mal odpovedať tomu, čo môže vykonať. Napr. keď máme systémom vytvorenú schému HR, vytvorením role napr. HR_USER dáme možnosť len čítať všetkým, kto dané oprávnenie má. Ak chceme nájsť všetky roly v databáze použijeme pod systemovym userom select * from role_sys_privs ; Historicky Oracle prideľuje nasledovné roly:
CONNECT
Zahŕňa nasledujúce systémové oprávnenia: ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW --> nagrantuje sa grant connect to user_name a user už môže všetko vytváraťRESOURCE
Zahŕňa nasledujúce systémové privilégiá: CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPEDBA Všetky systémové privilégiá S MOŽNOSŤOU ADMINISTRÁTORA--> nagrantuje sa grant dba to user_name a user už môže administrovať /s týmto opatrne! Ak sa odoberie oprávnenie od roly odoberie sa automaticky oprávnenie od všetkých userov, ktorým bolo pridelené (rovnako ako pri obj. oprávneniach)!
Zaujímavé: Názvy rolí existujú mimo názvov userov, a tak môžu byť rovnaké ako názvy objektov (tabuľky, pohľady...), to sa však neodporúča.Ak máme napr. tabuľkové oprávnenia (DML) pridelené pre rolu, ak sa dropne tabuľka a pridelíme znovu oprávnenia, nemusíme znovu oprávnenia pridávať pre usera, ani vytvárať rolu (tzn. 2 kroky vynecháme) Pozrime na nasledujúci príklad:
Takto pozrieme všetkych userov a nastavenia v databaze pod sys účtom
SELECT *
FROM (SELECT CONNECT_BY_ROOT grantee grantee,
privilege,
REPLACE(
REGEXP_REPLACE(SYS_CONNECT_BY_PATH(granteE, '/'),
'^/[^/]*'),
'/',
' --> ')
ROLES,
owner,
table_name,
column_name
FROM (SELECT PRIVILEGE,
GRANTEE,
OWNER,
TABLE_NAME,
NULL column_name
FROM DBA_TAB_PRIVS
WHERE owner NOT IN
('SYS','SYSTEM','WMSYS','SYSMAN','MDSYS','ORDSYS','XDB','WKSYS','EXFSYS','OLAPSYS','DBSNMP','DMSYS','CTXSYS','WK_TEST','ORDPLUGINS','OUTLN','ORACLE_OCM','APPQOSSYS')
UNION
SELECT PRIVILEGE,
GRANTEE,
OWNER,
TABLE_NAME,
column_name
FROM DBA_COL_PRIVS
WHERE owner NOT IN ('SYS','SYSTEM','WMSYS','SYSMAN','MDSYS','ORDSYS','XDB','WKSYS','EXFSYS','OLAPSYS','DBSNMP','DMSYS','CTXSYS','WK_TEST','ORDPLUGINS','OUTLN','ORACLE_OCM','APPQOSSYS')
UNION
SELECT GRANTED_ROLE,
GRANTEE,
NULL,
NULL,
NULL
FROM DBA_ROLE_PRIVS
WHERE GRANTEE NOT IN ('SYS','SYSTEM','WMSYS','SYSMAN','MDSYS','ORDSYS','XDB','WKSYS','EXFSYS','OLAPSYS','DBSNMP','DMSYS','CTXSYS','WK_TEST','ORDPLUGINS','OUTLN','ORACLE_OCM','APPQOSSYS')
) T
START WITH grantee IN (SELECT username FROM dba_users)
CONNECT BY PRIOR PRIVILEGE = GRANTEE)
WHERE table_name IS NOT NULL
AND grantee != OWNER
ORDER BY grantee,
owner,
table_name,
column_name,
privilege;
Na príkladoch sme si ukázali ako fungujú oprávnenia v Oracle. Zistili sme aký je rozdiel medzi systémovými a objektovými oprávneniami priraďovanim rolí. Na základe príkladov každý si môže vytvoriť vlastnú databázu s potrebnými grantmi.