CATEGORII DOCUMENTE |
Notiuni introductive privind securitatea in baze de date
Securitatea in baze de date presupune limitarea accesului utilizatorilor neautorizati la baza de date sau componente ale ei.
Securitatea unei baze de date depinde si de securitatea sistemului de operare si a retelei.
Principale subiecte ce trebuiesc tratate atunci cand se vorbeste despre securitate in baze de date sunt:
accesul controlat la date (autorizarea);
restrangerea accesului la nivel de user autentificat (autentificare);
jurnalul tuturor operatiilor (auditing);
criptarea datelor (encryption);
securitatea la nivel de institutie (enterprise security);
Schema de prezentare a cursului este urmatoarea:
Autorizarea
Administrarea utilizatorilor
spatiu tabel temporar si implicit;
crearea unui utilizator;
modificarea unui utilizator;
stergerea unui utilizator.
Profile
crearea si utilizarea profilelor;
Gestiunea resurselor
Administrarea privilegiilor si a role-urilor .
1. Autorizarea
Administrarea utilizatorilor
Administratorul bazei de date (DBA) creeaza utilizatori ai acesteia si le aloca drepturi sau restrictii la diferite componente ale bazei de date. Administratorul limiteaza spatiul si resursele de care un utilizator dispune, folosind roluri si privilegii.
In momentul in care se creeaza o baza de date noua sunt creati automat user-i de sistem (de exemplu, SYS, DBA ) si cei ai schemei (de exemplu, HR). Ulterior sunt creati utilizatorii obisnuiti.
Principala preocupare a administratorului unei baze de date este:
a) alocarea de spatiu suficient si de privilegii pentru crearea de obiecte in baza de date pentru user-i sistem;
b) garantarea accesului la resurele detinute si limitarea utilizarii resurselor la care nu au drept de acces pentru utilizatorii obisnuiti.
1.1.1. Spatiu tabel temporar si implicit
Fiecare user necesita un spatiu tabel temporar in care sunt executate diferite operatii (de exemplu, sortarea datelor in timpul unei comenzi SQL). De asemenea, fiecare user necesita un spatiu tabel implicit, in care sunt salvate obiectele sale pentru care nu a fost specificat un spatiu tabel. Este posibila crearea unui spatiu tabel temporar si a unui spatiu tabel implicit pentru toti utilizatorii in timpul crearii bazei de date. Odata create aceste spatii, ele nu mai trebuie specificate in momentul crearii fiecarui user.
Daca nu se atribuie un spatiu tabel implicit, atunci spatiul tabel SYSTEM devine spatiu tabel implicit. Daca un utilizator creeaza obiecte foarte mari in spatiul SYSTEM, atunci se poate intampla ca utilizatorul SYS sa nu mai poata crea alte obiecte in acest spatiu tabel, cauzand oprirea bazei de date. Acesta este principalul motiv pentru care trebuie asociat intotdeauna un spatiu tabel temporar si un spatiu tabel implicit.
Informatii despre tabelele asociate unui utilizator se pot gasi in tabelul DBA_USERS.
1.1.2. Crearea unui nou utilizator
Pentru crearea unui nou utilizator se foloseste comanda CREATE USER. Sintaxa acestei comenzi este urmatoarea:
CREATE USER nume_utilizator
IDENTIFIED
DEFAULT TABLESPACE nume_spatiu_tabel
TEMPORARY TABLESPACE nume_spatiu_tabel
QUOTA ] | UNLIMITED} ON nume_spatiu_tabel
PROFILE nume_ profil
PASSWORD EXPIRE
ACCOUNT };
Numele unui utilizator trebuie sa fie unic. Modul de autentificare poate fi realizat prin baza de date (IDENTIFIED BY parola), extern (IDENTIFIED EXTERNALLY) sau prin protocolul SSL (IDENTIFIED GLOBALLY AS 'specificatie_identificare'). Sirul specificatie_identificare furnizeaza un mod de identificare la nivelul directorului de servicii
Cu scopul de a preveni consumul excesiv al spatiului bazei de date se pot preciza limite de folosire (cote) pentru spatiile tabel la care are acces utilizatorul. Aceste limite sunt specificate prin clauza QUOTA. Daca limita spatiului tabel este 0, atunci utilizatorul nu mai poate crea obiecte noi, iar pentru obiectele existente in spatiul tabel respectiv acesta nu mai poate aloca spatiu suplimentar. Optiunea UNLIMITED presupune folosirea nelimitata a spatiului tabel respectiv.
Privilegiul sistem UNLIMITED TABLESPACE permite utilizatorilor sa detina spatiu tabel nelimitat. Acest privilegiu are prioritate fata de toate limitele specificate pentru spatiile tabel alocate utilizatorului respectiv.
Informatii despre spatial alocat fiecarui utilizator se gasesc in vizualizarea DBA_TS_QUOTAS. Daca se omite optiunea de cota, user-ul poate folosi tot spatiul din tabelul sau implicit.
De asemenea, la crearea unui utilizator se poate specifica profilul acestuia. Profilurile faciliteaza administrarea parolelor si a limitelor de folosire a resurselor. Daca nu este specificat nici un profil, atunci se asociaza unul implicit.
Clauza PASSWORD EXPIRE presupune ca parola utilizatorului trebuie schimbata la prima conectare la baza de date.
Pentru blocarea sau deblocarea contului unui utilizator este folosita clauza ACCOUNT, cu optiunile LOCK, respectiv UNLOCK.
Exemplu
a) Sa se creeze userul informatica identificat prin parola parola_informatica.
CREATE USER informatica IDENTIFIED BY parola_informatica;
b) Sa se creeze un utilizator al bazei de date care sa fie autentificat extern, prin sistemul de operare. Contul corespunzator de la nivelul sistemului de operare este informatica.
CREATE USER ops$informatica
IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE informatica _tbs
QUOTA 10M ON informatica _tbs
PROFILE informatica _p;
c) Sa se creeze utilizatorul student, avand drept atribute de identificare seria(SR), grupa (GR) si curs (CR).
CREATE USER student
IDENTIFIED AS
'SR=33, GR=342, CR=SGBD'
DEFAULT TABLESPACE student_tbs
QUOTA 20M ON student_tbs
PROFILE student_p;
1.1.3. Modificarea unui utilizator
Pentru a modifica o optiune a domeniului de securitate al unui utilizator (modul de autentificare, limitele unui spatiul tabel, revocarea unui spatiu tabel, profilul) este necesar privilegiul sistem ALTER USER. De obicei, acesta este detinut doar de administratorul pentru securitate. Comanda folosita este ALTER USER, iar modificarile specificate prin aceasta nu afecteaza sesiunea curenta a utilizatorului.
Singura optiune pe care fiecare utilizator o poate modifica pentru propriul cont este parola. Pentru aceasta nu este necesar un privilegiu sistem special, altul decat cel de conectare la baza de date. Comanda folosita are urmatoarea sintaxa:
ALTER USER nume_utilizator IDENTIFIED BY parola;
Parola poate fi schimbata de catre titular, folosind una dintre comenzile ALTER USER sau PASSWORD, sau de catre un user din grupul DBA, folosind comanda ALTER USER. Chiar daca un user din grupul DBA poate schimba parola unui alt user, acesta nu poate afla care a fost vechea parola deoarece ea este stocata sub forma criptata.
1.1.4. Stergerea unui utilizator
Stergerea unui utilizator implica eliminarea acestuia si a schemei asociate, din dictionarul datelor, ceea ce determina stergerea imediata a tuturor obiectelor continute in schema. Daca se doreste pastrarea schemei unui utilizator, iar acesta trebuie sa piarda dreptul de a accesa baza de date, i se va revoca utilizatorului respectiv privilegiul CREATE SESSION.
Nu se poate elimina un utilizator care este conectat la baza de date. Pentru a putea elimina un utilizator este necesar privilegiul sistem DROP USER. Daca schema utilizatorului contine obiecte, trebuie folosita optiunea CASCADE pentru a sterge atat utilizatorul, cat si toate obiectele asociate, inclusiv cheile externe care refera tabelele detinute de utilizator. Daca utilizatorul are obiecte asociate si nu este utilizata aceasta clauza, atunci sistemul returneaza un mesaj de eroare, utilizatorul nefiind eliminat. Sintaxa comenzii folosite pentru stergerea unui utilizator este:
DROP USER nume_utilizator CASCADE ;
Oracle are implementat un Recycle Bin, care pastreaza tabelele dintr-o baza de date care au fost sterse prin comanda DROP TABLE. In felul acesta pot fi recuperate tabele care au fost sterse din greseala. In momentul cand se sterge un user folosind optiunea CASCADE, toate obiectele care apartin schemei utilizatorului sunt sterse permanent.
1.2. Profile
Un profil este un set de limitari de resurse care poate fi atribuit unui utilizator al bazei de date. Fiecare baza Oracle permite definirea unui numar nelimitat de profiluri. Acestea trebuie create si administrate doar daca politica de securitate a bazei de date cere ca utilizarea resurselor sa fie limitata. Pentru a putea folosi profilurile, mai intai se creeaza categorii de grupuri de utilizatori similari.
Profilurile pot fi atribuite fiecarui utilizator in parte (folosind comanda CREATE USER sau ALTER USER) sau se pot defini profiluri implicite care sunt asociate tuturor utilizatorilor care nu au un profil specific.
Crearea si utilizarea profilelor
Pentru a crea un profil este necesar privilegiul sistem CREATE PROFILE. In momentul crearii se pot explicita limitele folosirii unor resurse particulare sau parametrii pentru parole.
Comanda prin care se creeaza un profil este urmatoarea:
CREATE PROFILE nume LIMIT SESSIONS_PER_USER valoare]
[CPU_PER_SESSION valoare] [CPU_PER_CALL valoare]
[CONNECT_TIME valoare] [IDLE_TIME valoare]
[LOGICAL_READS_PER_SESSION valoare]
[LOGICAL_READS_PER_CALL valoare]
[PRIVATE_SGA valoare] [COMPOSITE_LIMIT valoare]
[FAILED_LOGIN_ATTEMPTS valoare]
[PASSWORD_LIFE_TIME valoare]
[PASSWORD_REUSE_TIME valoare]
[PASSWORD_REUSE_MAX valoare]
[PASSWORD_LOCK_TIME valoare]
[PASSWORD_GRACE_TIME valoare]
[PASSWORD_VERIFY_FUNCTION ];
Pentru fiecare parametru care apare in comanda se poate preciza o valoare intreaga sau optiunea UNLIMITED, respectiv DEFAULT. Optiunea UNLIMITED indica posibilitatea de folosire nelimitata a resursei respective. Daca se foloseste DEFAULT, atunci limita de folosire a resursei va fi preluata din profilul implicit.
Fiecare baza de date are un profil implicit. Toate limitarile de resurse nespecificate pentru profilurile particulare vor fi setate automat la valorile implicite. La crearea bazei de date server-ul Oracle defineste profilul implicit DEFAULT.
Prin parametrul FAILED_LOGIN_ATTEMPTS se precizeaza numarul de conectari care pot esua inainte de blocarea contului, iar prin parametrul PASSWORD_LOCK_TIME numarul de zile in care acesta va fi blocat.
Administratorul bazei de date poate bloca manual un cont, folosind comanda ALTER USER. In acest caz, contul nu mai poate fi deblocat automat, administratorul trebuind sa-l deblocheze explicit.
Prin parametrul PASSWORD_LIFE_TIME se poate specifica durata de viata a unei parole. Dupa aceasta perioada, parola expira si trebuie schimbata. La prima incercare de conectare dupa expirare, apare un mesaj prin care utilizatorul este atentionat ca trebuie sa-si schimbe parola intr-un anumit numar de zile (perioada in care are inca dreptul de conectare). Aceasta perioada este precizata prin parametrul PASSWORD_GRACE_TIME. Daca parola nu este schimbata pana la terminarea perioadei de gratie, atunci contul se blocheaza automat.
Se recomanda ca schimbarea parolelor sa nu se faca folosind comanda ALTER USER, deoarece aceasta nu realizeaza verificarea completa a complexitatii parolei. Este preferabil ca pentru schimbarea unei parole sa se utilizeze functia OCIPasswordChange().
Pentru a verifica daca o parola nou specificata nu a mai fost utilizata anterior este mentinuta o istorie a parolelor. Prin parametrul PASSWORD_ REUSE_TIME se poate preciza intervalul de timp (exprimat in numar de zile) in care utilizatorii nu pot reutiliza o parola. De asemenea, se permite si precizarea numarului de schimbari consecutive ale parolei pana se poate reutiliza o parola anterioara (PASSWORD_REUSE_MAX).
Fiecare parola trebuie sa aiba o complexitate minima pentru a asigura protectia sistemului impotriva eventualilor intrusi care incearca sa o descopere. In timpul executiei script‑ului utlpwdmg.sql, server-ul Oracle creeaza in schema SYS functia implicita verify_function_11g care asigura verificarea complexitatii unei parole. Aceasta verifica daca parola indeplineste urmatoarele conditii:
are lungimea de cel putin 4 caractere;
nu coincide cu username-ul;
include cel putin o litera, o cifra si un caracter special;
nu este un cuvant simplu din lista de notiuni interne (de exemplu, numele contului, al bazei de date sau al utilizatorului etc.);
difera de parola anterioara cu cel putin 3 caractere.
Rutina de verificare a complexitatii parolelor poate fi modificata sau se poate crea o rutina noua, in schema SYS. Comanda CREATE PROFILE permite, prin intermediul parametrului PASSWORD_VERIFY_FUNCTION, precizarea unei functii PL/SQL pentru verificarea complexitatii parolelor.
Pentru fiecare utilizator, sistemul permite specificarea unei limite de folosire a resurselor disponibile, in cadrul domeniului sau de securitate. Astfel, se controleaza consumul resurselor importante ale sistemului. Limitarea resurselor este o metoda deosebit de utila in cazul sistemelor multiuser, unde acestea sunt costisitoare. Consumul excesiv al resurselor, de catre unul sau mai multi utilizatori, poate fi in detrimentul celorlalti utilizatori ai bazei de date.
Sistemul poate controla utilizarea resurselor la nivel de sesiune (session level), la nivel de apel (call level) sau la ambele niveluri.
In momentul conexiunii unui utilizator la o baza de date se creeaza o sesiune. Fiecare sesiune consuma timp CPU (timp de incarcare al procesorului) si memorie. Daca utilizatorul depaseste limita de consum a resurselor, sistemul anuleaza comanda curenta si returneaza un mesaj prin care indica depasirea limitei de consum a resurselor. Toate comenzile anterioare tranzactiei curente raman intacte si sunt permise doar operatii de tip COMMIT, ROLLBACK sau deconectare. Toate celelalte operatii produc erori.
Sistemul permite si limitarea altor resurse la nivel de sesiune: numarul de sesiuni concurente pentru fiecare utilizator, timpul in care o sesiune poate ramane inactiva, timpul de conectare consumat pentru fiecare sesiune, spatiul SGA (folosit de zonele private SQL) al unei sesiuni etc.
Pentru procesarea comenzilor SQL sau a altor tipuri de apeluri catre sistem este necesar un timp CPU. In medie, apelurile nu sunt mari consumatoare de timp CPU. In schimb, o comanda SQL poate implica multe interogari care pot fi mari consumatoare ale acestei resurse. Pentru a preveni folosirea inadecvata a timpului CPU, se pot fixa limite pentru fiecare apel in parte sau pentru apelurile din cadrul unei anumite sesiuni.
Operatiile I/O sunt unele dintre cele mai costisitoare operatii intr-un sistem de baze de date. De aceea, sistemul permite limitarea citirilor blocurilor logice de date, la nivel de apel sau de sesiune. Citirea blocurilor logice de date include citirea blocurilor de date din memorie si de pe disc. Limitarile presupun numararea blocurilor citite in timpul unui apel sau pe parcursul unei sesiuni.
Principalul scop pentru care sunt folosite restrictii privind accesul la resurse este acela de a impiedica un utilizator sau un grup de utilizatori sa monopolizeze baza de date si/sau resursele serverului.
Cei mai importanti parametrii privind accesul la resurse sunt:
CONNECT_TIME - timpul (in minute) cat o sesiune este activa;
CPU_PER_CALL - limiteaza timpul cat o tranzactie poate folosi procesorul;
CPU_PER_SESSION - limiteaza timpul cat o sesiune poate folosi procesorul;
SESSION_PER_USER - numarul maxim de sesiuni pe care un user le poate deschide;
IDLE_TIME - timpul maxim de inactivitate pe care il poate avea o sesiune;
LOGICAL_READS_PER_SESSION (LOGICAL_READS_PER_CALL) - numarul maxim de blocuri pe care o sesiune (tranzactie) il poate folosi;
PRIVATE_SGA - spatiul maxim pe care o sesiune il poate ocupa in memoria shared pool;
COMPOSITE_LIMIT - o multime de restrictii dintre cele de mai sus, fiecare cu o anumita pondere care poate fi setata. Oracle ia in considerare patru parametri: CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION si PRIVATE_SGA.
Inainte de crearea profilurilor si specificarea limitelor de folosire a resurselor asociate lor, trebuie sa se determine valorile estimative pentru fiecare limita de resurse. Estimarea acestor limite se poate face evaluand tipul de operatii pe care le executa o categorie de utilizatori. De exemplu, daca o categorie de utilizatori, in mod normal, nu face un numar mare de citiri din blocurile logice de date, atunci valorile parametrilor referitori la acest tip de resursa pot fi mari. De obicei, cea mai buna cale de a determina valoarea aproximativa a limitei de folosire a resurselor pentru un profil al unui utilizator dat, este consultarea informatiilor istorice cu privire la ocuparea fiecarui tip de resurse.
Pentru a obtine statistici referitoare la folosirea resurselor se poate utiliza componenta de monitorizare a utilitarului OEM sau SQL*Plus. De exemplu, administratorul pentru securitate poate folosi clauza AUDIT SESSION pentru a obtine informatii despre limitele CONNECT_TIME, LOGICAL_READS_PER_ SESSION si LOGICAL_READS_PER_CALL.
Oracle ofera o mare varietate de parametri pentru gestiunea parolelor utilizatorilor, dintre care amintim:
FAILED_LOGIN_ATTEMPTS - numarul maxim de incercari de login esuate;
PASSWORD_LIFE_TIME - perioada maxima de timp cat o parola poate fi folosita;
PASSWORD_GRACE_TIME - perioada de timp cat un utilizator este avertizat sa isi schimbe parola;
PASSWORD_LOCK_TIME - numarul de zile cat un cont este blocat dupa ce s-a depasit numarul maxim de logari esuate;
PASSWORD_REUSE_TIME - numarul minim de zile dupa care o parola poate fi refolosita;
PASSWORD_REUSE_MAX - numarul de parole ce trebuie folosite pana se poate refolosi o anumita parola;
PASSWORD_VERIFY_FUNCTION - permite verificarea parolei cu un mecanism pus la dispozitie de Oracle.
Pentru ca profilurile sa aiba efect trebuie sa fie pornita optiunea de limitare a resurselor pentru baza de date. Activarea sau dezactivarea acestei optiuni se poate face inaintea pornirii bazei de date sau in timp ce aceasta este deschisa. In acest sens, este folosit parametrul de initializare RESOURCE_LIMIT (TRUE pentru activare, FALSE pentru dezactivare).
Exemplu
Sa se activeze optiunea de limitare a resurselor presupunand ca baza de date este deschisa.
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;
Comanda CREATE PROFILE permite limitarea costului total al resurselor. Astfel, utilizatorul poate folosi orice resurse doreste, dar suma cantitatilor resurselor consumate nu poate depasi aceasta limita. Un profil poate folosi limitari explicite de resurse, concomitent cu limitarea costului total al resurselor. Atingerea uneia dintre limite determina oprirea activitatii utilizatorului in sesiune. Folosirea limitarilor compuse permite mai multa flexibilitate. Valoarea corecta a unei limite compuse de resurse depinde de cantitatea totala de resurse folosita in medie de un utilizator.
Limitarile de resurse la nivel de apel (LOGICAL_READS_PER_CALL CPU_PER_CALL) sunt impuse fiecarui apel initiat in timpul executiei unei comenzi SQL. Depasirea uneia dintre aceste limite determina intreruperea procesarii comenzii si anularea acesteia, sesiunea utilizatorului fiind mentinuta.
Dupa ce profilul a fost creat, el poate fi asociat utilizatorilor bazei de date. Nu este posibil ca un utilizator sa aiba concomitent mai multe profiluri. Daca un profil este atribuit unui utilizator care are deja unul, noul profil il va inlocui pe cel vechi. Asocierea profilurilor nu afecteaza sesiunea curenta. Profilurile pot fi atribuite numai utilizatorilor, si nu unui role sau unui alt profil.
Exemplu
Sa se creeze profilul informatica_profil, specificand parametrii in mod corespunzator.
CREATE PROFILE informatica_profil LIMIT
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL 1000
CONNECT_TIME 50
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT
PRIVATE_SGA 25K
COMPOSITE_LIMIT DEFAULT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LIFE_TIME 50
PASSWORD_REUSE_TIME 50
PASSWORD_REUSE_MAX DEFAULT
PASSWORD_VERIFY_FUNCTION DEFAULT
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 15;
Daca se creeaza un utilizator si nu ii este asignat un profil care sa aiba setati anumiti parametri de tipul celor prezentati, atunci noul user va mosteni un profil implicit.
Exemplu:
Sa se determine profilul asociat userului informatica.
SELECT profile FROM dba_users
WHERE username='INFORMATICA';
PROFILE
DEFAULT
Din pacate, profilul default nu este restrictiv - toate resursele sunt setate ca fiind nelimitate. Acest lucru se poate vedea si din interogarea urmatoare:
Exemplu:
Sa se verifice care sunt limitarile profilului default.
SQL> SELECT DISTINCT resource_name, limit
2 FROM dba_profiles
3 WHERE profile='DEFAULT';
RESOURCE_NAME LIMIT
----- ----- ---------
PASSWORD_LOCK_TIME 1
IDLE_TIME UNLIMITED
CONNECT_TIME UNLIMITED
PASSWORD_GRACE_TIME 7
LOGICAL_READS_PER_SESSION UNLIMITED
PRIVATE_SGA UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME 180
PASSWORD_VERIFY_FUNCTION NULL
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
COMPOSITE_LIMIT UNLIMITED
CPU_PER_CALL UNLIMITED
Daca unui user nu i se atribuie un profil, Oracle ii atribuie in mod automat profilul default. Deoarece acest profil are setata valoarea UNLIMITED pentru mai multi parametri, utilizatorii creati cu acest tip de profil pot ridica o serie de probleme.
Stergerea unui profil necesita privilegiul sistem DROP PROFILE. Comanda SQL folosita pentru stergerea unui profil are urmatoarea sintaxa:
DROP PROFILE nume_profil [CASCADE];
Optiunea CASCADE se foloseste daca profilul este asociat mai multor utilizatori. Aceasta determina disocierea profilului respectiv de toti utilizatorii care il aveau alocat. In mod automat, sistemul va atribui acestora profilul implicit.
Gestiunea resurselor
Pentru o baza de date cu un numar ridicat de utilizatori problema gestiunii resurselor devine o cerinta esentiala. Resursele serverului sunt intotdeauna limitate si de aceea se impune o partajare a resurselor intre utilizatori.
Administrarea privilegiilor si a role-urilor
Un privilegiu este dreptul de a executa anumite comenzi SQL. Privilegiile pot include dreptul de: conectare la baza de date, creare de tabele, selectare a liniilor din tabelul altui utilizator, executie a procedurilor stocate create de alt utilizator etc. Privilegiile trebuie sa fie acordate utilizatorilor numai daca sunt absolut necesare in activitatea acestora. Acordarea excesiva de privilegii poate compromite securitatea bazei de date. Privilegiile pot fi de tip sistem sau obiect!
Un privilegiu sistem reprezinta dreptul de a executa anumite actiuni asupra bazei de date sau de a grupa aceste actiuni. De exemplu, privilegiul de a crea spatii tabel sau de a sterge linii din orice tabel al bazei sunt privilegii sistem. Exista peste 100 de privilegii sistem distincte.
Privilegiile sistem pot fi clasificate astfel:
privilegii specifice sistemului (de exemplu, CREATE SESSION, DROP TABLESPACE, ALTER TABLESPACE);
privilegii pentru gestiunea obiectelor create de utilizator (de exemplu, CREATE TABLE, SELECT VIEW, EXECUTE PROCEDURE);
privilegii pentru gestiunea obiectelor din orice schema (de exemplu, CREATE ANY TABLE, DROP ANY INDEX).
Deoarece privilegiile sistem sunt puternice, se recomanda sa nu se acorde utilizatorilor obisnuiti privilegii de tip ANY asupra tabelelor dictionarului datelor (de exemplu, UPDATE ANY TABLE). Privilegiile sistem acordate utilizatorilor vor permite accesul la obiectele din alte scheme, dar nu la cele din schema SYS.
Pentru administratorii bazei de date exista doua privilegii sistem speciale, SYSOPER si SYSDBA. Aceste privilegii permit accesul la instanta bazei de date, chiar daca baza nu este deschisa. Atunci cand un utilizator avand privilegiul SYSOPER sau SYSDBA se conecteaza la baza de date ii este asociata o schema implicita, nu cea corespunzatoare username-ului sau. Pentru SYSDBA aceasta schema este SYS, iar pentru SYSOPER este PUBLIC. Privilegiul SYSOPER permite folosirea comenzilor de baza, dar fara posibilitatea de a vizualiza datele utilizatorilor (STARTUP, SHUTDOWN, ALTER DATABASE, CREATE SPFILE etc.). Privilegiul SYSDBA permite utilizatorului sa execute orice tip de operatie asupra bazei de date si a obiectelor sale.
Privilegiile obiect sunt drepturi de a executa anumite actiuni asupra unui obiect specific al schemei: tabel, vizualizare, secventa, procedura, functie, pachet. De exemplu, ALTER TABLE, DELETE TABLE, SELECT TABLE si UPDATE TABLE sunt privilegii obiect. Unele obiecte, ca de exemplu indecsii, declansatorii, legaturile de baze de date, nu au asociate privilegii obiect. Folosirea lor este controlata de privilegiile sistem. De exemplu, pentru a modifica o grupare utilizatorul trebuie sa fie proprietarul gruparii sau sa detina privilegiul sistem ALTER ANY CLUSTER.
In ceea ce priveste respectarea privilegiilor, obiectul schemei este echivalent cu sinonimul sau. Daca se acorda un privilegiu pentru un obiect, acesta este valabil si pentru sinonimul sau si reciproc. Daca sinonimul este eliminat, toate privilegiile obiectului au in continuare efect, chiar daca privilegiile au fost acordate doar pentru sinonimul sau.
Un role este un grup de privilegii inrudite care pot fi acordate sau revocate simultan utilizatorilor sau altor role-uri. Folosirea role-urilor permite:
simplificarea administrarii privilegiilor (in loc sa se acorde mai multe privilegii in mod explicit unui grup de utilizatori inruditi, se poate crea un role care sa contina toate privilegiile necesare si apoi sa se acorde acest role fiecarui membru al grupului);
administrarea dinamica a privilegiilor (daca privilegiile unui grup de utilizatori trebuie schimbate, modificarea lor se va face la nivelul role‑ului care le contine si aceasta se propaga automat pentru fiecare utilizator care are asociat role-ul respectiv);
activarea selectiva a privilegiilor (role-urile pot fi activate sau dezactivate selectiv, astfel incat se permite un control ridicat al privilegiilor acordate utilizatorilor);
Se pot crea aplicatii care sa interogheze dictionarul datelor si sa activeze/dezactiveze automat unele role-uri, in functie de utilizatorul care incearca sa execute aplicatia respectiva.
Role-urile au urmatoarele caracteristici:
pot fi acordate sau revocate utilizatorilor folosind aceleasi comenzi ca si in cazul privilegiilor sistem;
pot cuprinde atat privilegii sistem, cat si privilegii obiect;
pot fi protejate prin folosirea parolelor;
trebuie sa aiba un nume unic, diferit de conturile utilizatorilor si de celelalte role-uri din baza de date;
nu sunt continute in schema nici unui utilizator;
caracteristicile lor pot fi regasite in dictionarul datelor.
La crearea bazei de date Oracle se definesc automat role-uri predefinite. Acestora li se pot acorda sau revoca alte privilegii sau role-uri. Un exemplu de role predefinit este CONNECT care include privilegiile sistem CREATE SESSION, ALTER SESSION, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE TABLE, CREATE SYNONIM CREATE VIEW CREATE CLUSTER.
Pentru a permite utilizatorilor care nu detin un role DBA accesul la vizualizarile dictionarului datelor, sistemul ofera role-urile DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE si SELECT_CATALOG_ROLE.
Crearea unui role necesita privilegiul sistem CREATE ROLE si se realizeaza prin comanda cu acelasi nume. Dupa creare, role-ul nu are privilegii sau role-uri asociate, acestea putand fi acordate ulterior.
Comanda prin care se creaza un role are urmatoarea sintaxa:
CREATE ROLE nume_role
;
Daca este folosita clauza NOT IDENTIFIED atunci nu se cere nici o autorizare pentru role-ul respectiv. Aceasta optiune este implicita.
Clauza tip_autorizare specifica urmatoarelor categorii de autorizari:
prin baza de date (IDENTIFIED BY parola);
prin intermediul unei aplicatii care utilizeaza pachete specifice (IDENTIFIED USING [schema.]nume_pachet);
externa, realizandu-se prin sistemul de operare, retea sau alte surse externe (IDENTIFIED EXTERNALLY);
globala (IDENTIFIED GLOBALLY).
Daca autorizarea role-ului se face prin sistemul de operare, atunci informatiile pentru fiecare utilizator trebuie configurate la acest nivel. In cazul autorizarii prin retea, daca utilizatorii se conecteaza la baza de date prin Oracle Net, atunci role-urile nu pot fi autorizate de sistemul de operare.
Autorizarea globala presupune existenta role-urilor globale. Un role global se defineste in baza de date, dar nu poate fi acordat de la acest nivel altui utilizator sau role. Atunci cand un utilizator global incearca sa se conecteze la baza este interogat directorul de servicii pentru a se obtine role-urile globale asociate.
Schimbarea modului de autorizare a unui role se face folosind comanda ALTER ROLE. Pentru aceasta este necesar privilegiul sistem ALTER ANY ROLE sau un role cu optiuni de administrare.
Unui utilizator ii pot fi acordate mai multe role-uri. La fiecare conectare a utilizatorului este activat in mod automat un role implicit, chiar daca acesta nu are asociat explicit nici un role. Un role implicit este specificat folosind clauza DEFAULT ROLE din comanda ALTER USER:
ALTER USER nume_utilizator DEFAULT ROLE
;
Folosind optiunea ALL, toate role-urile acordate utilizatorului devin implicite, cu exceptia celor care apar in clauza EXCEPT.
Optiunea NONE este utilizata daca utilizatorul nu trebui sa detina role-uri implicite. In acest caz, la conectare utilizatorul va beneficia doar de privilegiile care i-au fost acordate in mod explicit.
Clauza DEFAULT ROLE nu poate fi folosita pentru role-luri:
care nu au fost acordate utilizatorului;
acordate prin intermediul altor role-uri;
administrate prin servicii externe.
Deoarece role-urile trebuie initial acordate unui utilizator si apoi declarate implicite, nu se pot seta role-uri implicite folosind comanda CREATE USER.
Atunci cand un role este activ, utilizatorul poate folosi privilegiile acordate prin intermediul acestuia. Daca role-ul este inactiv, atunci utilizatorul poate folosi doar privilegiile care i-au fost acordate in mod explicit sau care fac parte din alte role-uri detinute de acesta. Activarea sau dezactivarea role-urilor persista doar pentru sesiunea curenta. In sesiunile urmatoare, utilizatorul va avea activate din nou role-urile implicite.
Pentru activarea sau dezactivarea role‑urilor este utilizata comanda SET ROLE. Aceasta are urmatoarea sintaxa:
SET ROLE
Clauza IDENTIFIED BY precizeaza parola necesara pentru autorizarea role-ului. Folosind optiunea ALL sunt activate toate role-urile acordate utilizatorului curent, cu exceptia celor care apar in clauza EXCEPT. Optiunea NONE asigura dezactivarea tuturor role-urilor care erau acordate utilizatorului respectiv.
In unele cazuri este necesara suprimarea unui role din baza de date. Stergerea acestuia implica suprimarea sa din toate role-urile carora le-a fost acordat. Deoarece crearea obiectelor nu este dependenta de privilegiile primite prin role-uri, tabelele si celelalte obiecte nu vor fi sterse in momentul suprimarii role‑ului. Comanda SQL de stergere a unui role este DROP ROLE. Pentru folosirea acestei comenzi este necesar privilegiul sistem DROP ANY ROLE sau un role cu optiuni de administrare.
Privilegiile si role-urile pot fi acordate utilizatorilor sau altor role-uri folosind comanda GRANT sau utilitarul Oracle Enterprise Manager.
Nu pot acorda privilegii sistem sau role-uri decat utilizatorii carora le-au fost acordate acestea cu optiunea WITH ADMIN OPTION a comenzii GRANT sau cei care detin privilegiul sistem GRANT ANY ROLE.
Utilizatorii nu pot acorda role-uri autorizate global. Acordarea, respectiv revocarea unui astfel de role este controlata in intregime prin directorul de servicii. Comanda SQL prin care se acorda privilegii sistem sau role-uri unui utilizator are urmatoarea sintaxa:
GRANT
TO
[,.]
[WITH ADMIN OPTION
Optiunea PUBLIC permite acordarea privilegiilor sistem tuturor utilizatorilor bazei de date. Clauza WITH ADMIN OPTION permite utilizatorilor sa acorde mai departe privilegiile sistem si role-urile respective altor utilizatori sau role-uri.
Privilegiile obiect nu pot fi acordate impreuna cu privilegii sistem sau cu role-uri, in cadrul aceleiasi comenzi GRANT. Acordarea de privilegii obiect utilizatorilor sau role‑urilor poate fi facuta de proprietarul obiectului sau de un utilizator caruia i s-a acordat privilegiul obiect respectiv, cu optiunea WITH GRANT OPTION.
Comanda folosita pentru acordarea unui privilegiu obiect este:
GRANT
ON nume_schema obiect
TO
[,
[WITH GRANT OPTION];
Prin optiunea lista_coloane se precizeaza coloanele unui tabel sau ale unei vizualizari pentru care se acorda privilegiul. Aceasta optiune poate fi folosita atunci cand sunt acordate privilegii obiect de tip INSERT, REFERENCES sau UPDATE. Optiunea ALL permite acordarea tuturor privilegiilor obiect pentru care utilizatorul ce initiaza comanda GRANT are optiunea WITH GRANT OPTION.
Clauza ON nume_schema obiect precizeaza obiectul relativ la care este acordat privilegiul. Optiunea PUBLIC permite acordarea privilegiilor obiect tuturor utilizatorilor bazei de date.
Clauza WITH GRANT OPTION permite utilizatorilor sa acorde privilegii obiect altor utilizatori sau role-uri. Aceasta clauza nu poate fi utilizata atunci cand privilegiul obiect este acordat unui role
In ceea ce priveste privilegiile referitoare la comenzile LMD, acestea sunt acordate pentru operatiile DELETE, INSERT, SELECT si UPDATE asupra unui tabel sau unei vizualizari, doar utilizatorilor sau role-urilor care trebuie sa interogheze sau sa prelucreze datele respective.
Privilegiile INSERT si UPDATE se pot restrictiona pentru anumite coloane ale tabelului. In cazul unui privilegiu INSERT restrictionat pentru anumite coloane, inserarea unei linii permite inserarea de valori doar pentru coloanele accesibile. Coloanele restrictionate primesc valori implicite sau null. In cazul unui privilegiu UPDATE restrictionat, vor putea fi modificate doar coloanele pentru care utilizatorul are acest drept.
Privilegiile ALTER, INDEX si REFERENCES permit executarea de operatii LDD asupra unui tabel. Un utilizator care incearca sa execute o comanda LDD trebuie sa aiba anumite privilegii sistem sau obiect. De exemplu, pentru a crea un declansator asupra unui tabel, utilizatorul trebuie sa detina privilegiul obiect ALTER TABLE si privilegiul sistem CREATE TRIGGER. Privilegiul REFERENCES poate fi acordat unei anumite coloane a unui tabel. Astfel, tabelul respectiv este folosit ca tabel "parinte" pentru orice cheie externa care trebuie creata.
Exemplu
a) Sa se acorde utilizatorului informatica dreptul de a porni si opri baza de date, fara a i se permite crearea unei baze de date.
GRANT SYSOPER TO informatica;
b) Sa se acorde utilizatorilor informatica1 si informatica2 privilegiile obiect SELECT si INSERT asupra coloanelor tabelului test, cu posibilitatea ca acestia sa acorde privilegiile si altor utilizatori sau role-uri.
GRANT SELECT, INSERT ON test TO informatica1, informatica2
WITH GRANT OPTION;
c) Sa se acorde utilizatorului informatica privilegiul obiect INSERT doar pentru coloanele cod_test si nume_test.
GRANT INSERT (cod_test , nume_test) ON test TO informatica
Pentru a revoca privilegii sau role-uri se poate folosi comanda REVOKE sau utilitarul Oracle Enterprise Manager. Un utilizator care are optiunea de administrare, de acordare a unui privilegiu sau role, le poate revoca pe acestea oricarui role sau utilizator al bazei de date. Un utilizator care detine privilegiul GRANT ANY ROLE poate revoca orice role.
Sintaxa generala a comenzii de revocare a unui privilegiu sistem sau role este urmatoarea:
REVOKE .]
FROM ;
Optiunea PUBLIC permite revocarea privilegiilor sistem sau a role-urilor tuturor utilizatorilor bazei de date.
Sintaxa generala a comenzii de revocare a unui privilegiu obiect este:
REVOKE
ON nume_schema obiect
FROM
[,
[CASCADE CONSTRAINTS];
Optiunea ALL permite revocarea tuturor privilegiilor obiect acordate utilizatorului. Prin clauza ON se identifica obiectul la care se refera privilegiul ce trebuie revocat. Clauza FROM identifica utilizatorii sau role-urile pentru care este revocat privilegiul obiect. Optiunea PUBLIC determina revocarea unor privilegii obiect tuturor utilizatorilor bazei de date.
Clauza CASCADE CONSTRAINTS permite suprimarea constrangerilor de integritate referetiala definite folosindu-se privilegiile REFERENCES sau ALL.
Definitiile obiectelor care depind de privilegii LMD sistem sau obiect pot fi afectate daca privilegiile respective sunt revocate. De exemplu, daca privilegiul sistem SELECT ANY TABLE a fost acordat unui utilizator care apoi a creat proceduri sau vizualizari ce folosesc un tabel din alta schema, atunci revocarea acestui privilegiu determina invalidarea procedurilor sau vizualizarilor respective. De asemenea, daca o procedura include comenzi SQL prin care sunt selectate datele unui tabel si este revocat privilegiul obiect SELECT asupra tabelului respectiv, atunci procedura nu se mai executa cu succes.
Definitiile obiectelor pentru care sunt necesare privilegiile obiect ALTER si INDEX nu sunt afectate daca aceste privilegii sunt revocate. De exemplu, daca privilegiul INDEX este revocat unui utilizator care a creat un index asupra unui tabel al altui utilizator, indexul respectiv va continua sa existe si dupa revocare.
Revocarea unui privilegiu obiect poate determina efectul de revocare in cascada a acestuia. De exemplu, daca utilizatorului informatica1 i se acorda privilegiul obiect SELECT asupra unui tabel, cu optiunea WITH GRANT OPTION, iar acesta il acorda utilizatorului informatica2, atunci revocarea privilegiului utilizatorului informatica1 va determina automat revocarea acestui privilegiu si pentru utilizatorul informatica2.
Sistemul mentine o serie de vizualizari in dictionarul datelor, care contin informatii despre privilegii si role-uri:
DBA_SYS_PRIVS (privilegiile sistem acordate utilizatorilor sau altor role‑uri);
SESSION_PRIVS (privilegiile sistem si obiect disponibile utilizatorului in sesiunea curenta);
DBA_TAB_PRIVS (privilegiile acordate asupra obiectelor bazei);
DBA_COL_PRIVS (coloanele obiectelor care sunt referite in privilegii);
DBA_ROLES (role-urile definite in baza de date);
DBA_ROLES_PRIVS (role-urile acordate utilizatorilor sau altor role‑uri);
ROLE_ROL_PRIVS (role-urile acordate altor role-uri);
SESSION_ROLES (role-urile active pentru utilizator in sesiunea curenta) etc.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1099
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved