Privilegii

     Privilegiile reprezinta dreptul de a executa  o anumita instructiune SQL.
    Administratorul bazei de date (DBA) este un utilizator  de nivel inalt care are abilitatea de a  acorda  utilizatorilor dreptul de a accesa baza de date si obiectele acesteia.
        Privilegiile pot include dreptul:
- de a se conecta la baza de date
- de a crea un tabel in propria schema
- de a selecta randuri  din tabelele schemei altcuiva
- de a executa procedurile stocate ale altcuiva, etc.
    Utilizatorii  au nevoie de  privilegii sistem pentru a avea acces la baza de date si   privilegii obiect pentru  a manipula  continutul obiectelor din  baza de date.
De asemenea, utilizatorii pot  avea privilegiul de a acorda  privilegii aditionale  altor utilizatori sau  unor roluri.

Privilegii sistem
    Permit utilizatorilor sa  execute gama specificata de actiuni sistem sau sau o anumita actiune  asupra unui tip particular de  obiecte schemã. (privilegiul de  a crea un spatiu de tabele sau de a sterge randuri din orice tabel).
    Exista  disponibile mai mult de 100 de privilegii sistem distincte.  Acestea pot fi acordate de  DBA. Se pot distinge doua  categorii generale de privilegii sistem: privilegii DBA si privilegii utilizator. La nivelul bazei de date nu se face ditinctie intre cele doua tipuri de privilegii sistem.

In mod obisnuit DBA  are  urmatoarele privilegii:
Privilegii sistem Operatii autorizate  prin acestea
CREATE  USER
Exemplu
DROP USER
se pot crea alti utilizatori Oracle (privilegiu necesar rolului DBA)
poate elimina alt utilizator
AUDIT ANY activeaza sau dezactiveaza  auditul pentru baza de date
CREATE ANY TABLE
DROP ANY TABLE
SELECT  ANY TABLE
poate crea tabele in orice schema
poate elimina orice tabel din schema
poate  interoga  tabele sau vederi in orice schema 
BACKUP ANY TABLE poate arhiva orice tabel din schema cu utilitarele de  export
CREATE  TABLESPACE  poate crea un nou spatiu de tabele
DROP ANY  INDEX sterge un index din orice schema

Un utilizator   poate avea  urmatoarele privilegii
Privilegii sistem Operatii permise 
CREATE  SESSION conectarea la baza de date
CREATE  TABLE crearea tabelelor in schema utilizatorului
CREATE  SEQUENCE crearea secventelor in schema utilizator
CREATE  VIEW crearea  unei vederi inschema utilizatorului
CREATE  PROCEDURE crearea  de proceduri stocate, functii sau pachete in schema utilizatorului

Privilegiile sunt acordate  utilizatorilor astfel incat acestia pot  accesa si  modifica  date in baza de date.  Un utilizator poate primi privilegii in doua moduri:
- explicit
- privilegiile pot fi atribuite unui  rol si apoi acesta poate fi atribuit unuia sau mai multor  utilizatori ( privilegiul de a insera inregistrari in tabelul employees poate fi atribuit rolului numit CCC, care apoi poate fi  atribuit utilizatorilor  SCOTT si BRIAN.

GRANT  privilegiu [privilegiu, ]
    TO USER [user / rol, PUBLIC...];

GRANT  create session, create table,  create sequence, create view
    TO scott;

Privilegii asupra obiectelor schema
Permite utilizatorilor sa execute  o anumita actiune asupra unui obiect schema specific (privilegiul de  a sterge randuri dintr-un anumit tabel)

Fiecare obiect are  un anumit set de privilegii care ii pot fi atasate (figura).
 
Privilegii obiect Tabel Vedere Secventa Procedura
ALTER * *
DELETE * *
EXECUTE *
INDEX *
INSERT * *
REFERENCES * *
SELECT * * *
UPDATE * *

Se poate observa ca privilegiile obiect variaza de la un obiect la altul. Unui utilizator  i se atribuie in mod automat  toate privilegiile obiect  pentru  obiectele schema din propria sa schema si poate  acorda orice  privilegiu asupra oricarui obiect schema  unui alt utilizator sau rol.

GRANT   privilegii_obiect [ALL] [(coloane)]
    ON  obiect
    TO  {utilizator | rol | PUBLIC}
    [WITH  GRANT  OPTION];

GRANT update( first_name, last_name) on employees to public;

ALL   - specifica toate privilegiile obiect
Coloane  - specifica acele coloane dintr-un tabel sau vedere  pentru care sunt acordate privilegii
ON  - specifica obiectele pentru care sunt acordate privilegii
TO – specifica cui vor fi acordate privilegiile
PUBLIC -  acorda privilegiile specificate  tuturor utilizatorlor
WITH  GRANT  OPTION – permite celui care a primit privilegiile sa le acorde la randul sau altor  utilizatori sau roluri

Observatii:
1. Pentru a avea  capacitatea de a acorda privilegii asupra unui obiect trebuie ca  acesta sa se afle in  schema proprie a utilizatorului sau  trebuie  ca privilegiile sa ii fi fost acordate cu optiunea WITH GRANT OPTION
2. proprietarul unui obiect poate  poate  transmite orice privilegiu asupra acelui obiect oricarui  alt utilizator sau  rol din baza de date.
3. proprietarul unui obiect primeste automat toate privilegiile asupra obiectului respectiv.
4. privilegiile  acordate  in virtutea clauzei  WITH GRANT  OPTION vor fi revocate daca au fost revocate  pentru  utilizatorul care le-a transmis
Exemple
 

Revocarea privilegiilor obiect

Privilegiile acordate utilizatorilor pot fi  inlaturate prin utilizarea  declaratiei REVOKE. Revocarea privilegiilor pentru un utilizator atrage dupa sine revocarea  privilegiilor respective pentru toti ceilalti utilizatori carora   privilegiile le-au fost acordate de acesta prin intermediul clauzei WITH  GRANT OPTION .

        REVOKE {privilegiu [, privilegiu...] | ALL}
            ON  obiect
                FROM  {utilizator [, utilizator...]| rol | PUBLIC }
                [CASCADE CONSTRAINTS]

CASCADE  CONSTRAINTS inlatura orice  constrangere de integritate referentiala   asupra obiectului  realizata prin intermediul  privilegiului REFERENCES

        REVOKE  select, insert
                ON  departments
                    FROM scott;

Confirmarea privilegiilor  acordate

    Daca un utilizator  incearca sa execute o  operatie neautorizata (ex. stergerea  unei inregistrari dintr-un tabel pentru care  nu  are privilegiul  DELETE) serverul Oracle  intoarce un mesaj de eroare.
    In situatia cand, ca raspuns la o operatie primiti mesajul „table or view does not exist” inseamna ca:
- fie tabelul sau vederea  adresata nu exista
- fie se incearca  o operatie  pe un obiect  pentru care utilizatorul nu are privilegiul corespunzator.
    Pentru a  vedea  ce privilegii are un utilizator se poate folosi  dictionarul de date. Tabelul de mai jos prezinta  diferitele vederi din dictionarul de date utilizate  in acest scop.
 
Vederea din dictionarul de date Descriere
ROLE_SYS_PRIVS Privilegii sistem  acordate rolurilor
ROLE_TAB_PRIVS Privilegii asupra tabelelor  acordate rolurilor
USER_ROLE_PRIVS Roluri accesibile utilizatorilor
USER_TAB_PRIVS_MADE Privilegii obiect acordate  utilizatorilor obiectelor
USER_TAB_PRIVS_RECD Privilegii obiect acordate  utilizatorilor
USER_COL_PRIVS_MADE Privilegii obiect asupra coloanelor acordate utilizatorului obiectului
USER_COL_PRIVS_RECD Privilegii obiect acordate  utilizatorilor  asupra  coloanelor specificate
USER_SYS_PRIVS Privilegiile sistem acordate  utilizatorului