CATEGORII DOCUMENTE |
Baza de date Oracle contine propriul ei sistem de securitate care previne accesul neautorizat la baza de date. Sistemul de securitate al bazei de date Oracle este realizat prin intermediul utilizatorilor bazei de date. Serverul bazei de date solicita numele utilizatorului si parola pentru fiecare accesare la baza de date; indiferent de utilitarul folosit pentru interfata, serverul bazei de date nu permite accesul la baza de date daca nu este utilizat un nume si o parola corecta.
Nota: Asa cum am mai mentionat, in contextul bazei de date Oracle, un utilizator inseamna de fapt un cont de utilizator si nu o persoana care acceseaza baza de date. Evident, o persoana poate accesa baza de date folosind unul sau mai multi utilizatori Oracle, iar mai multe persoane pot accesa baza de date folosind acelasi utilizator Oracle (acesta este cazul de obicei in practica)
O schema este o colectie de obiecte disponibile unui utilizator. Obiectele schemei sunt structuri logice ce se refera efectiv la datele unei baze de date precum tabele, vederi, secvente, indecsi, sinonime, etc.
Fiecarui utilizator al bazei de date ii sunt acordate anumite drepturi, cunoscute sub numele de privilegii. Un privilegiu este permisiunea de a executa o actiune sau de a accesa un obiect apartinand unui alt utilizator. In Oracle, un utilizator nu poate executa nici un fel de actiune fara a avea privilegiul sa o faca. In acest sens unui utilizator ii pot fi acordate sau revocate privilegii.
Accesul unui utilizator la baza de date este administrat printr-un numar de drepturi numite privilegii de sistem, sau privilegii la nivelul bazei de date, care permit utilizatorului sa efectueze operatii precum conectarea la baza de date si crearea de obiecte. Odata ce utilizatorul a creat obiecte ale bazei de date, el este apoi responsabil de a acorda drepturi altor utilizatori pentru obiectele care sunt proprietatea lui. Aceste drepturi sunt numite privilegii la nivel de obiect.
Rolurile sunt utilizate pentru a simplifica administrarea privilegiilor. Astfel, in loc de a acorda un anumit privilegiu direct unui utilizator, privilegiile sunt acordate unui rol, iar un rol este acordat la randul lui unui utilizator. Cu alte cuvinte, rolurile reprezinta un grup de privilegii.
Acest capitol prezinta modul in care se realizeaza securitatea unei baze de date Oracle, referindu-se la fiecare dintre conceptele mentionate mai sus.
Actiunile pe care un utilizator le poate efectua asupra bazei de date sunt administrate prin privilegiile de sistem acordate acestuia. In Oracle exista peste 80 de privilegii de sistem, denumirea lor fiind inspirata de actiunile pe care le permit. Ele variaza de la permisiunea de a se conecta la o baza de date (create session) la dreptul de a crea un tabel (create any table) sau index (create any index) sau de a distruge un tabel (DROP ANY TABLE) sau index (drop any index) din schema oricarui utilizator. O lista a tuturor privilegiilor de sistem este prezentata in Anexa 4A.
Securitatea obiectelor unei baze de date este administrata ca un numar de privilegii la nivel de obiect, care determina ce acces au utilizatorii la obiectele bazei de date. Privilegiile la nivel de obiect existente in Oracle sunt rezumate in tabelul din figura 5.1. Tabelul din figura 5.2 indica obiectele asupra carora poate fi acordat fiecare privilegiu in parte.
Fiecare privilegiu la nivel de obiect este permis independent de celelalte, adica un privilegiu de obiect este acordat numai pentru un obiect.
Privilegiul de obiect |
Descrierea permisiunii |
select |
Selectarea randurilor dintr-un tabel, vedere sau instantaneu si extragerea numerelor dintr-un generator de secvente |
insert |
Inserarea inregistrarilor intr-un tabel sau vedere |
update |
Actualizarea inregistrarilor dintr-un tabel sau vedere |
delete |
Stergerea inregistrarilor dintr-un tabel sau vedere |
alter |
Modificarea structurii si parametrilor unui tabel sau a unei secvente |
references |
Referirea unui tabel utilizand chei straine |
execute |
Executarea unei proceduri functii, pachet sau proceduri externe si accesarea obiectelor declarate in specificatia pachetului: in plus, pentru optiunea obiect din Oracle8 (vezi capitolul 10), acest privilegiu se poate acorda si asupra unui tip de date creat de utilizator, in acest caz acest tip de date putand fi folosit la crearea unor tabele, la definirea unor coloane din tabele si la declararea unor variabile sau parametrii |
index |
Crearea indecsilor tabelului |
READ |
Citirea unui BFILE din directorul specificat (vezi Anexa 3) |
Figura 5.1.
Privilegiul de obiect |
Tabel |
Vedere |
Secventa |
Procedura functie pachet |
Instantaneu |
Director |
Biblioteca |
SELECT |
X |
X |
X |
X | |||
INSERT |
X |
X | |||||
UPDATE |
X |
X | |||||
DELETE |
X |
X | |||||
ALTER |
X |
X | |||||
REFERENCES |
X | ||||||
EXECUTE |
X |
X |
|||||
INDEX |
X |
| |||||
READ |
X |
Figura 5.2.
Fiecare obiect al bazei de date este proprietatea unui utilizator al bazei de date - se spune ca obiectul face parte din schema respectivului utilizator. Proprietarul unui obiect are control deplin asupra acestuia. El poate efectua orice actiune asupra unui obiect detinut fara sa aiba privilegii la nivel de obiect deoarece aceste privilegii sunt implicite. In plus, proprietarul unui obiect poate acorda privilegii asupra obiectului respectiv si altor utilizatori.
Prin urmare, pentru a efectua o actiune asupra unui obiect (interogare, actualizare, distrugere, etc.), un utilizator trebuie sa se gaseasca in unul din urmatoarele cazuri:
sa fie proprietarul acelui obiect;
sa aiba acordat privilegiul la nivelul obiectului respectiv de efectua acea actiune ;
sa aiba acordat privilegiul de sistem care sa ii permita acest lucru.
De exemplu, pentru a putea interoga (select) un tabel, un utilizator trebuie sa fie proprietarul acelui tabel, sa posede privilegiul select pe acel tabel sau sa posede privilegiul de sistem select any table. Privilegiile necesare pentru efectuarea diverselor actiuni asupra obiectelor bazei de date sunt sintetizate pe categorii de obiecte in Anexa 4B.
Pentru a simplifica modul de administrare, privilegiile pot fi grupate in roluri (roles). Un grup de privilegii pot fi acordate unui rol, iar un rol poate fi acordat la randul lui unui utilizator, acordandu-se astfel utilizatorului in mod implicit privilegiile asociate cu acel rol. De asemenea, este posibila acordarea unui rol altui rol, putandu-se crea astfel ierarhii de roluri. In plus, unui rol ii poate fi revocat un privilegiu dupa cum si unui utilizator ii poate fi revocat un rol. In general, rolurile se folosesc atunci cand exista utilizatori care au nevoie de acelasi seturi de privilegii.
Rolurile permit simplificarea gestionarii privilegiilor: in loc de a acorda mai multe privilegii unui utilizator, acestuia ii poate fi acordat rolul care contine aceste privilegii. Pe langa simplificarea modului de administrare a privilegiilor, rolurile au avantajul de a putea fi administrate dinamic: atunci cand privilegiile unui rol se modifica, aceste modificari se reflecta automat in privilegiile acordate utilizatorilor care detin rolul respectiv. In plus, un rol poate fi activat sau dezactivat in cadrul aceleiasi sesiuni, aceasta avand ca efect acordarea sau retragerea privilegiilor respective utilizatorului. De asemenea un rol poate fi protejat cu o parola care va trebui introdusa in momentul in care se doreste activarea acestuia.
Oracle ofera un set de roluri predefinite cu privilegii incluse care sunt create odata cu baza de date (vezi Anexa 4C). Acestea sunt urmatoarele:
CONNECT ofera privilegiile de baza pentru utilizatorul unei aplicatii.
RESOURCE ofera privilegiile de baza pentru programatorul unei aplicatii.
DBA ofera toate privilegiile de sistem cu posibilitatea de a acorda aceste privilegii altor utilizatori sau roluri (cu alte cuvinte are optiunea WITH ADMIN OPTION, vezi sectiunea 5.8).
EXP_FULL_DATABASE si IMP_FULL_DATABASE sunt pentru utilizatorii utilitarelor Export si Import (vezi Anexa 1), adica ofera privilegiile necesare operatiilor de export si respectiv import ale bazei de date.
DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROLE si SELECT_CATALOG_ROLE ofera privilegiile de accesare a vederilor dictionarului de date si a pachetelor.
Alte roluri: AQ_ADMINISTRATION_ROLE AQ_USER_ROLE RECOVERY_CATALOG_OWNER si SNMPAGENT
Odata cu crearea unei baze de date sunt creati si doi utilizatori ai bazei de date: SYS si SYSTEM. Utilizatorul SYS este proprietarul tuturor tabelelor interne ale bazei de date, pachetelor si procedurilor predefinite etc. El este de asemeni proprietarul vederilor si tabelelor dictionarului de date si are atribuite toate rolurile predefinite - printre care si cel de DBA SYS constituie temelia bazei de date Oracle. Din acest motiv, trebuie evitat pe cat posibil folosirea acestui utilizator; o simpla comanda gresita facuta de cineva conectat la baza de date ca SYS poate avea efect devastator.
Utilizatorul SYS este singurul care poate avea acces la anumite tabele ale dictionarului de date. Datorita faptului ca acesta este proprietarul tuturor structurilor dictionarului de date, pentru a acorda privilegii asupra obiectelor dictionarului de date este necesara conectarea ca SYS. Parola initiala pentru utilizatorul SYS este CHANGE_ON_INSTALL, dar, datorita importantei acestui utilizator, este recomandata schimbarea acesteia imediat dupa instalare.
Utilizatorul SYSTEM este de asemenea creat odata cu crearea bazei de date si, in mod normal, este utilizat initial pentru crearea altor utilizatori si pentru administrarea bazei de date. Ca si SYS, si SYSTEM are drepturi depline asupra tuturor obiectelor bazei de date, avand acordat rolul de DBA si, de aceea, de multe ori contul SYSTEM se utilizeaza pentru a administra baza de date. Totusi, este preferabil ca pentru administrarea bazei de date sa se creeze un utilizator separat cu privilegiile de DBA. Parola initiala pentru utilizatorul SYSTEM este MANAGER si se recomanda schimbarea ei imediat dupa crearea bazei de date.
Utilizatorii SYS si SYSTEM nu trebuie in nici un caz folositi pentru a crea sau interoga obiecte specifice aplicatiilor sau pentru a interactiona direct cu aplicatiile.
Pentru baza de date exemplu, se creeaza automat mai multi utilizatori prezentati in tabelul de mai jos:
Nume cont utilizator |
Parola |
Descriere |
INTERNAL |
ORACLE (daca baza de date a fost instalata folosind optiunea Custom, parola se specifica in timpul instalarii) |
Numele administratorului bazei de date cu care se realizeaza anumite operatii precum pornirea si oprirea bazei de date. INTERNAL nu este cu adevarat un utilizator, el este de fapt un alias al utilizatorului SYS cu privilegiul suplimentar SYSDBA |
SYS |
CHANGE_ON_INSTALL |
Numele administratorului bazei de date ce are urmatoarele roluri: CONNECT RESOURCE DBA EXP_FULL_DATABASE IMP_FULL_DATABASE DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROLE SELECT_CATALOG_ROLE AQ_ADMINISTRATION_ROLE AQ_USER_ROLE RECOVERY_CATALOG_OWNER SNMPAGENT |
SYSTEM |
MANAGER |
Numele utilizatorului bazei de date ce detine numai rolul DBA |
SCOTT |
TIGER |
Numele utilizatorului bazei de date ce detine rolurile CONNECT si RESOURCE |
DEMO |
DEMO |
Numele utilizatorului bazei de date ce detine rolurile CONNECT si RESOURCE. Este recomandata stergerea acestui cont in cazul in care nu este folosit. |
DBSNMP |
DBSNMP |
Numele utilizatorului bazei de date ce detine rolurile CONNECT RESOURCE si SNMPAGENT |
Figura 5.3
Schema reprezinta o colectie de obiecte care sunt proprietatea unui utilizator. Un utilizator poate avea o singura schema, care va avea acelasi nume cu acesta. O schema este creata pentru a administra o aplicatie, avand drepturi depline asupra tuturor obiectelor aplicatiei. Acest lucru are anumite avantaje dintr-o serie de motive: separa in general administrarea obiectelor bazei de date de administrarea obiectelor aplicatiei si permite ca toate datele aplicatiei sa poata fi exportate sau mutate de catre proprietarul acestora.
Intre spatiile tabel si schema unei baze de date nu exista nici o legatura; obiectele unei scheme se pot gasi in spatii tabel diferite, dupa cum si intr-un spatiu tabel se pot gasi obiecte din mai multe scheme.
Pentru a accesa un obiect din propria schema, un utilizator poate folosi doar numele acestuia. Pentru a accesa un obiect din schema altui utilizator, trebuie specificat atat numele obiectului cat si schema din care face parte, folosind sintaxa:
schema.obiect
De exemplu, un utilizator, sa-l numim costel, va putea crea in schema proprie un tabel numit persoana, folosind comanda:
CREATE TABLE persoana;
Daca insa un alt utilizator doreste crearea tabelului persoana in schema utilizatorului costel, va trebui sa foloseasca comanda:
CREATE TABLE costel.persoana ;
Pentru interogarea tabelului, utilizatorul costel va folosi comanda:
SELECT * FROM persoana;
In schimb, pentru a interoga tabelul, orice alt utilizator va folosi comanda:
SELECT * FROM costel.persoana;
In plus, pentru a accesa un obiect din schema altui utilizator, un utilizator va trebui sa posede privilegiile necesare respectivului tip de acces. De exemplu, pentru interogarea tabelului persoana, orice alt utilizator va trebui sa posede privilegiul SELECT pe tabelul persoana sau privilegiul de sistem SELECT ANY TABLE
In general, trebuie sa existe macar trei tipuri de acces la o aplicatie: administratorul bazei de date, dezvoltatorul si utilizatorul:
Administratorul bazei de date va trebui sa administreze structurile si obiectele bazei de date (cum ar fi fisierele, spatiile tabel si tabelele). Administratorul bazei de date este de fapt proprietarul aplicatiei si al bazei de date. El trebuie sa detina o varietate de privilegii de sistem.
Dezvoltatorul va trebui sa poata efectua atat operatii de interogare, cat si de manipulare (DML) si definire (DDL) a datelor. Pentru aplicatiile de dimensiuni reduse, proprietarul aplicatiei este de obicei utilizat si pentru dezvoltare. In general insa, pentru dezvoltare se foloseste o alta schema decat cea care detine obiectele aplicatiei, deci un dezvoltator trebuie sa detina in principal privilegii la nivel de obiect.
Utilizatorul, pe de alta parte, va putea efectua doar operatii de interogare si manipulare a datelor, fara a avea insa permisiunea de a efectua operatii de definire a datelor.
Schema care detine obiectele aplicatiei va acorda privilegiile necesare fiecarui tip de acces la aplicatie.
5.6 Crearea, modificarea si distrugerea utilizatorilor
Utilizatorii bazei de date pot fi creati folosind comanda SQL create user, avand sintaxa urmatoare:
CREATE USER nume_utilizator
IDENTIFIED
[DEFAULT TABLESPACE nume_spatiu_tabel
[TEMPORARY TABLESPACE nume_spatiu_tabel
[QUOTA nume_spatiu_tabel
[PROFILE nume_profil
[PASSWORD EXPIRE]
[ACCOUNT ]
unde
IDENTIFIED indica modul in care Oracle permite accesul utilizatorului: prin parola, cand Oracle mentine in mod intern o parola pentru utilizator, pe care acesta o va utiliza pentru accesarea bazei de date; EXTERNALLY, cand verificarea accesului utilizatorului este facuta de catre sistemul de operare - in acest caz utilizatorul trebuie sa fie identic cu cel definit in sistemul de operare.
DEFAULT TABLESPACE indica spatiul tabel folosit in mod implicit de obiectele create de catre utilizator. Daca aceasta clauza este omisa, spatiul tabel implicit este SYSTEM.
TEMPORARY TABLESPACE indica spatiul tabel pentru segmentele temporare ale utilizatorului. Daca aceasta clauza este omisa, spatiul tabel implicit pentru segmentele temporare este SYSTEM
QUOTA permite utilizatorului sa aloce spatiu pe un spatiu tabel; la folosirea acestei clauze poate fi specificat spatiul maxim alocat (in bytes, Kbytes (K) sau Mbytes (M)) sau poate fi folosita optiunea UNLIMITED pentru a permite utilizatorului sa aloce oricat de mult spatiu pe spatiul tabel.
PROFILE atribuie utilizatorului un profil. Un profil este un set de limitari pentru resursele bazei de date (de exemplu, numarul maxim de sesiuni concurente, timpul maxim al unei sesiuni, etc.). Daca profilul este atribuit unui utilizator, atunci utilizatorul nu poate depasi limitele specificate de profil. Un profil poate fi creat folosind comanda SQL CREATE PROFILE. Daca aceasta clauza este omisa, Oracle atribuie in mod implicit utilizatorului profilul DEFAULT
PASSWORD EXPIRE forteaza ca parola initiala sa fie schimbata de catre utilizator in momentul in care acesta se va conecta pentru prima data la baza de date.
ACCOUNT LOCK|UNLOCK blocheaza sau deblocheaza contul permitand sau nu accesul utilizatorului la baza de date. Daca se foloseste optiunea de blocare (LOCK), contul utilizatorului este creat insa utilizatorul nu se va putea conecta pana cand nu se deblocheaza in mod explicit contul. Aceasta optiune se foloseste, de exemplu, in cazul in care se prefera crearea unui cont pentru un angajat nou dar nu i se permite accesul pana cand nu este pregatit sa-l foloseasca. Optiunea implicita este UNLOCK
Pentru a putea crea un alt utilizator, trebuie ca utilizatorul ce realizeaza acest lucru sa detina privilegiul de sistem CREATE USER
Exemplul urmator creeaza utilizatorul costel cu parola costica, avand ca spatiu tabel implicit ts_alfa, spatiu tabel temporar ts_temp si cota de spatiu nelimitata pe spatiile tabel ts_alfa ts_beta si ts_temp
CREATE USER costel
IDENTIFIED BY costica
DEFAULT TABLESPACE ts_alfa
TEMPORARY TABLESPACE ts_temp
QUOTA UNLIMITED ON ts_alfa
QUOTA UNLIMITED ON ts_beta
QUOTA UNLIMITED ON ts_temp;
Caracteristicile unui utilizator pot fi schimbate folosind comanda SQL ALTER USER. Folosind aceasta comanda se poate schimba, de exemplu, parola unui utilizator:
ALTER USER costel
IDENTIFIED BY costi;
Distrugerea unui utilizator se poate face folosind comanda SQL DROP USER. Daca exista obiecte in schema utilizatorului, atunci acestea trebuie distruse inainte de distrugerea utilizatorului. Aceasta pe poate face automat folosind optiunea CASCADE a acestei comenzi:
DROP USER costel CASCADE;
5.7 Crearea, modificarea si stergerea rolurilor
Un rol poate fi creat folosind comanda SQL CREATE ROLE, avand sintaxa urmatoare:
CREATE ROLE rol
[ NOT IDENTIFIED | IDENTIFIED ]
unde
NOT IDENTIFIED arata ca orice utilizator caruia ii va fi acordat rolul creat nu va trebui identificat in momentul cand activeaza rolul (comanda SET ROLE, vezi sectiunea 5.10)
IDENTIFIED arata ca orice utilizator caruia ii va fi acordat rolul creat va trebui verificat. Aceasta verificare poate fi facuta intern de catre Oracle prin parola sau extern de catre sistemul de operare (EXTERNALLY). In acest ultim caz, in functie de sistemul de operare, utilizatorul va trebui sa specifice o parola sistemului de operare la activarea rolului.
Daca ambele optiuni NOT IDENTIFIED si IDENTIFIED sunt omise, optiunea implicita este NOT IDENTIFIED
CREATE ROLE rol_costel;
CREATE ROLE tanta IDENTIFIED BY tantica;
Un utilizator poate crea un rol numai daca detine privilegiul de sistem CREATE ROLE
Schimbarea modului de identificare a unui rol poate fi facuta folosind comanda SQL ALTER ROLE
ALTER ROLE tanta NOT IDENTIFIED;
Distrugerea unui rol se poate face folosind comanda SQL DROP ROLE
DROP ROLE tanta;
5.8 Acordarea rolurilor si privilegiilor
Privilegiile de sistem, privilegiile la nivel de obiect sau rolurile pot fi acordate unui utilizator sau unui rol folosind comanda SQL GRANT. Totusi, sintaxa comenzii GRANT pentru acordarea de privilegii de sistem sau roluri difera de sintaxa pentru acordarea de privilegii la nivel de obiect.
Bineinteles, pentru a putea acorda un privilegiu sau un rol, utilizatorul respectiv trebuie sa aiba acest drept. De exemplu, pentru a acorda un privilegiu de sistem sau un rol, utilizatorul trebuie fie sa aiba privilegiul sau rolul respectiv acordat cu optiunea ADMIN OPTION sau sa aiba privilegiul GRANT ANY PRIVILEGE, respectiv GRANT ANY ROLE
Acordarea unui privilegiu de sistem sau a unui rol
Pentru acordarea de privilegii de sistem sau roluri sintaxa comenzii GRANT este urmatoarea:
GRANT
TO [,]
[WITH ADMIN OPTION]
unde
PUBLIC este folosit pentru a acorda privilegiile de sistem sau rolurile specificate tuturor rolurilor si utilizatorilor existenti.
WITH ADMIN OPTION permite utilizatorului (rolului) caruia ii este acordat rolul (privilegiul) sa acorde la randul lui rolul (privilegiul) altui utilizator (rol). De asemenea, daca unui utilizator sau rol ii este acordat un rol folosind WITH ADMIN OPTION, atunci utilizatorul sau rolul respectiv poate modifica (ALTER ROLE) sau distruge (DROP ROLE) rolul acordat.
Un rol nu se poate acorda lui insusi in mod direct sau printr-un set circular de atribuiri. Daca se incearca acest lucru, Oracle va genera un mesaj de eroare.
In continuare vom prezenta cateva exemple de acordare a privilegiilor de sistem sau a rolurilor.
Acordarea privilegiilor de sistem CREATE CLUSTER si CREATE TABLE pentru rolul rol_costel
GRANT CREATE CLUSTER, CREATE TABLE
TO rol_costel;
Acordarea privilegiului de sistem CREATE SESSION pentru utilizatorul costel, permitand acestuia conectarea la baza de date:
GRANT CREATE SESSION
TO costel;
Acordarea rolului rol_costel pentru utilizatorul costel
GRANT rol_costel
TO costel;
Acordarea unui privilegiu la nivel de obiect
Pentru acordarea de privilegii la nivel de obiect sintaxa comenzii GRANT este usor diferita deoarece este nevoie sa se identifice un obiect specific:
GRANT [(coloana coloana
coloana coloana
ON obiect
TO [,]
[WITH GRANT OPTION]
unde:
ALL este folosit pentru a acorda toate privilegiile pentru obiectul respectiv
coloana reprezinta coloana pentru care este acordat privilegiul. Coloanele pot fi specificate numai cand sunt acordate privilegiile INSERT REFERENCES UPDATE. Daca nu este listata nici o coloana, atunci privilegiul se acorda pe toate coloanele tabelei sau vederii in cauza.
WITH GRANT OPTION permite celui care ii sunt acordate privilegiile de a le acorda la randul lui altui utilizator sau rol.
Pentru o mai buna intelegere a acestei comenzi, vom prezenta in continuare cateva exemple:
Acordarea privilegiului SELECT (dreptul de interogare) asupra tabelului studenti pentru utilizatorul costel si rolul rol_costel
GRANT SELECT ON studenti
TO costel, rol_costel
WITH GRANT OPTION;
Acordarea privilegiului UPDATE (dreptul de actualizare) asupra coloanelor nume si prenume ale tabelului studenti pentru utilizatorul costel
GRANT UPDATE(nume, prenume) ON studenti
TO costel;
Acordarea privilegiului INSERT (dreptul de inserare a inregistrarilor) si a privilegiului DELETE (dreptul de stergere al inregistrarilor) asupra tabelului studenti pentru utilizatorul costel
GRANT INSERT, DELETE ON studenti
TO costel;
Acordarea tuturor privilegiilor (SELECT INSERT UPDATE DELETE, ALTER, REFERENCES, INDEX, vezi tabelul din figura 5.2) asupra tabelului studenti pentru utilizatorul costel
GRANT ALL ON studenti
TO costel.
Acordarea privilegiului SELECT (dreptul de interogare) asupra tabelului studenti pentru toti utilizatorii si pentru toate rolurile existente:
GRANT SELECT ON studenti
TO PUBLIC;
Trebuie mentionat ca utilizatorul care este proprietarul schemei din care face parte obiectul are automat toate privilegiile asupra obiectului cu optiunea WITH GRANT OPTION
5.9 Revocarea rolurilor si privilegiilor
Pentru a revoca un privilegiu sau un rol unui rol sau unui utilizator se poate folosi comanda SQL REVOKE. Comanda REVOKE trebuie folosita cu foarte mare atentie deoarece poate anula un privilegiu propriu. Ca si in cazul comenzii GRANT, si comanda REVOKE are o sintaxa pentru revocarea privilegiilor de sistem sau a rolurilor si alta sintaxa pentru revocarea privilegiilor la nivel de obiect.
Revocarea unui privilegiu de sistem sau a unui rol
Pentru revocarea de privilegii de sistem sau roluri, sintaxa comenzii REVOKE este urmatoarea:
REVOKE [,]
FROM
Daca se anuleaza un rol care contine alte roluri, intregul set de privilegii asociat cu fiecare rol va fi anulat. Daca oricare dintre rolurile si privilegiile continute de rolul anulat a fost acordat si in mod direct utilizatorului, atunci acesta va continua sa aiba privilegiile corespunzatoare.
Vom prezenta in continuare cateva exemple.
Revocarea privilegiului CREATE CLUSTER pentru rolul rol_costel
REVOKE CREATE CLUSTER
FROM rol_costel;
Revocarea rolului rol_costel pentru utilizatorul costel
REVOKE rol_costel
FROM costel;
Revocarea unui privilegiu la nivel de obiect
Pentru a revoca un privilegiu la nivel de obiect, sintaxa comenzii REVOKE este urmatoarea:
REVOKE coloana coloana
coloana coloana]
ON obiect
FROM
[CASCADE CONSTRAINTS]
[FORCE]
unde:
CASCADE CONSTRAINTS indica faptul ca se va sterge orice restrictie de integritate referentiala definita asupra tabelului de catre utilizatorul respectiv. Aceasta optiune trebuie sa fie folosita daca privilegiul revocat este REFERENCES sau ALL PRIVILEGES si daca cel caruia i se revoca privilegiul a definit o restrictie de integritate referentiala asupra tabelului.
FORCE forteaza revocarea privilegiul EXECUTE asupra unui tip de date definit de catre utilizator care are tabele dependente, aceste tabele devenind in acest caz invalide. In absenta aceste optiuni, daca exista tabele dependente, revocarea privilegiul EXECUTE asupra tipului de date va esua.
Pentru a revoca toate privilegiile utilizatorului costel detinute pe tabelul persoana, se va folosi urmatoarea comanda:
REVOKE ALL ON persoana FROM costel;
Pentru a revoca numai privilegiul SELECT detinut de toti utilizatorii si rolurile existente pentru tabelul persoana, se va folosi urmatoarea comanda:
REVOKE SELECT ON persoana FROM PUBLIC;
La conectarea unui utilizator, Oracle va activa toate rolurile implicite (default) ale utilizatorului. Rolurile implicite ale utilizatorului sunt toate rolurile acordate acestuia, cu exceptia situatiei in care rolurile implicite se definesc folosind clauza DEFAULT ROLE a comenzii SQL ALTER USER. Folosind comanda SQL ALTER USER cu clauza DEFAULT ROLE se pot identifica exact care din rolurile acordate utilizatorului sunt active si care sunt inactive atunci cand utilizatorul se conecteaza la baza de date. Orice modificare a listei de roluri implicite va avea efect incepand cu urmatoarea conectare a utilizatorului la baza de date.
In cadrul unei sesiuni, rolurile atribuite unui utilizator pot fi activate sau dezactivate folosind comanda SQL SET ROLE, avand sintaxa urmatoare:
SET ROLE
Asa cum se observa din sintaxa prezentata mai sus, exista trei optiuni alternative care au urmatoarea semnificatie:
Lista rolurilor specifica rolurile care sunt activate pentru sectiunea curenta. Toate rolurile care nu sunt listate vor fi dezactivate pentru sesiunea curenta (vezi primele doua exemple de mai jos). In cazul cand rolul are o parola, pentru activarea rolului este necesara specificarea acesteia.
ALL activeaza pentru sesiunea curenta toate rolurile acordate utilizatorului, mai putin cele enumerate in clauza EXCEPT, daca ea exista. Aceasta optiune nu poate fi folosita pentru activarea rolurilor cu parola.
NONE dezactiveaza toate rolurile pentru sesiunea curenta
In continuare vom prezenta cateva exemple de folosire a acestei comenzi:
Activarea rolului rol_costel
SET ROLE rol_costel;
Activarea rolului tanta identificat prin parola tantica
SET ROLE tanta IDENTIFIED BY tantica;
Activarea tuturor rolurilor pentru sesiunea curenta:
SET ROLE ALL;
Activarea tuturor rolurilor in afara de rolul tanta
SET ROLE ALL EXCEPT tanta;
Dezactivarea tuturor rolurilor pentru sesiunea curenta:
SET ROLL NONE;
Pentru a determina rolurile active din sesiunea curenta se poate examina vederea SESSION_ROLES din dictionarul de date (vezi Anexa 5). Numarul maxim de roluri care pot fi active la un anumit moment este specificat de catre parametrul de initializare MAX_ENABLED_ROLES
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2197
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved