Documente Academic
Documente Profesional
Documente Cultură
Exemple:
o CREATE SESSION conectare la baza de date
o CREATE ANY TABLE creeaza un tabel in orice schema
o ALTER ANY TABLE modifica orice tabel din orice schema
o DROP ANY TABLE desfiinteaza orice tabel din orice schema
o LOCK ANY TABLE - blocheaza orice tabel din orice schema
o SELECT ANY TABLE interogheaza orice tabel din orice schema
o INSERT ANY TABLE insereaza linii noi in orice tabel din orice schema
o UPDATE ANY TABLE actualizeaza orice tabel din orice schema
o DELETE ANY TABLE sterge linii din orice tabel din orice schema
o CREATE ANY INDEX creeaza un index pe orice tabel din orice schema
o ALTER ANY INDEX modifica orice index din orice schema
o DROP ANY INDEX desfiinteaza orice index din orice schema
o CREATE ANY USER creeaza utilizatori cu alocari de spatii corespunzatoare
o ALTER USER modifica diferite caracteristici ale utilizatorilor: parole, cote
de spatii, profiluri, roluri, etc.
o DROP USER desfiinteaza un utilizator
o CREATE TABLESPACE creeaza un spatiu tabel, adauga fisiere in SO
o ALTER TABLESPACE - modifica un spatiu tabel, adauga fisiere in SO
o DROP TABLESPACE desfiinteaza un spatiu tabel
o CREATE ANY VIEW creeaza o vedere in orice schema
o DROP ANY VIEW - desfiinteaza orice vedere din orice schema
o CREATE ROLE creeaza un rol in baza de date
o ALTER ANY ROLE - modifica orice rol din baza de date
o DROP ANY ROLE - desfiinteaza orice rol din baza de date
o GRANT ANY ROLE acorda orice rol din baza de date
o GRANT ANY PRIVILEGE acorda orice privilegiu de sistem
o CREATE ANY PROCEDURE creeaza proceduri, functii si pachete in orice
schema
o ALTER ANY PROCEDURE modifica orice procedura, functie sau pachet din
orice schema
o DROP ANY PROCEDURE - desfiinteaza orice procedura, functie sau pachet
din orice schema
o EXECUTE ANY PROCEDURE - executa orice procedura, functie sau pachet
din orice schema
o CREATE ANY CLUSTER creeaza un cluster in orice schema
o DROP ANY CLUSTER desfiinteaza un cluster in orice schema
o ETC.
Privilegiul de
obiect
SELECT
INSERT
UPDATE
DELETE
ALTER
REFERENCES
EXECUTE
INDEX
READ
Privilegiul
de obiect
SELECT
INSERT
UPDATE
DELETE
ALTER
REFERENCES
EXECUTE
INDEX
READ
Descrierea permisiunii
Selectarea randurilor dintr-un tabel, vedere sau instantaneu si extragerea
numerelor dintr-un generator de secvente.
Inserarea inregistrarilor intr-un tabel sau vedere.
Actualizarea inregistrarilor dintr-un tabel sau vedere.
Stergerea inregistrarilor dintr-un tabel sau vedere.
Modificarea structurii sau a parametrilor la un tabel sau la o secventa
Referirea unui tabel utilizand chei straine
Executarea unei proceduri, functii, pachet sau proceduri externe si
accesarea obiectelor declarate in specificatia pachetului.
Crearea indecsilor tabelului.
Citirea unui BFILE din directorul specificat
Tabel 1
Tabel
X
X
X
X
X
X
Vedere Secven
X
X
X
X
Procedur
funcie
pachet
Instantaneu
Director
Bibliotec
X
X
X
X
Tabel 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.
Priu urmare, pentru a efectua o actiune asupra unui obiect (interogare, actualizare,
distrugere, etc.) un utilizator trebuie s se gaseasca in unul din urmatoarele cazuri:
- sa fie proprietarul acelui obiect;
- sa aiba acordat privilegiul la nivelul obiectului respectiv de a efectua acea actiune;
- s 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.
8.4. Roluri
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 dup 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 gestionrii privilegiilor: n 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 poare 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. 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)
- EXP_FULL_DATABASE si IMP_FULL_DATABASE sunt pentru utilizatorii
utilitarelor Export si Import, adica ofer 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,RECOVERY_CATALOG_OWNER,
AQ_USER_ROLE si SNMPAGENT.
8.5. Utilizatorii bazei de date
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 asemenea, 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 evitata 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 initala 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 s 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.
Nume
cont
utilizator
Parola
Roluri
Numele administratorului bazei de date ce are
urmatoarele roluri:
SYS
CHANGE_ON_INSTALL
SYSTEM
MANAGER
- 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.
Numele utilizatorului bazei de date ce detine
numai rolul DBA.
Tabel 3
8.6. Schema
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 scheme diferite.
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 andrei, 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
andrei, va trebui sa foloseasca comanda:
CREATE TABLE andrei.persoana;
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. Dac aceasta clauza este omisa, spatiul tabel implicit pentru segmentele
temporare este SYSTEM.
- QUOTA permite utilizatorului sa aloce spatiu intr-un spatiu tabel; la folosirea accestei
clauze poate fi specificat spaiul maxim alocat (in bytes, Kbyles (K) sau Mbytes (M)) sau
poate fi folosita optiunea UNLIMITED pentru a permite utilizatorului sa aloce oricat de
mult spatiu in spatiul tabel.
- PROFILE atribuie utilizatorului un profil. Un profil este un set de limitri pentru
resursele bazei de date (de exemplu, numrul 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 ins 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
pregtit sa-l foloseasca. Optiunea implicit 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 creaza utilizatorului andrei cu parola andrew2000, 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 andrei
INDENTIFIED BY andrew2000
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 andrei
IDENTIFIED BY andrei2000;
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 se poate face automat folosind optiunea CASCADE a acestei comenzi:
DROP USER andrei CASCADE;
8.8. Crearea, modificarea si stergerea rolurilor
Un rol poate fi creat folosind comanda SQL CREATE ROLE, avand sintaxa urmatoare:
CREATE ROLE rol
[ NOT IDENTIFIED | IDENTIFIED {BY parola | EXTERNALLY}]
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);
- IDENTIFIED arata ca orice utilizator caruia ii va fi acordat rolul creat va trebui
identificat. Aceasta identificare poate fi facuta intern de catre Oracle prin parola sau extern prin
verificarea utilizatorului sistemului de operare (EXTERNALLY). In acest ultim caz, in funcie de
sistemul de operare, utilizatorul va trebui sa specifice o parola sistemului de operare la activarea
rolului;
Daca ambele opiuni NOT IDENTIFIED si IDENTIFIED sunt omise, optiunea
implicita este NOT IDENTIFIED.
CREATE ROLE rol_andrei
CREATE ROLE elena IDENTIFIED BY ella2000;
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 elena NOT IDENTIFIED;
Distrugerea unui rol se poate face folosind comanda SQL DROP ROLE:
DROP ROLE elena;
8.9. Acordarea rolurilor i privilegiilor
Privilegiile de sistem, privilegiile la nivel de obiect sau rolurile pot fi acordare 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 s
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 opiunea ADMIN OPTION, fie sa
aiba privilegiul GRANT ANY PRIVILEGE, respectiv GRANT ANY ROLE.
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 ii permite celui caruia ii sunt acordate privilegiile de a le acorda
la randul lui altui utilizator sau rol.
Pentru o mai buna intelegere a acestei comenzi se prezinta in continuare cateva exemple:
Acordarea privilegiului SELECT (dreptul de interogare) asupra tabelului studenti
pentru utilizatorul andrei si pentru rolul rol_andrei cu optiunea ca acestia sa il poata
acorda mai departe
GRANT SELECT ON studenti
TO andrei, rol_andrei
WITH GRANT OPTION;
Acordarea privilegiului UPDATE (dreptul de actualizare) asupra coloanelor nume si
prenume ale tabelului studenti pentru utilizatorul andrei:
GRANT UPDATE(nume,prenume)
ON studenti
TO andrei;
Acordarea privilegiului INSERT (dreptul de inserare a inregistrarilor) si a privilegiului
DELETE (dreptul de stergere a inregistrarilor) asupra tabelului studenti pentru utilizatorul
andrei:
GRANT INSERT, DELETE
ON studenti
TO andrei;
Acordarea tuturor privilegiilor (SELECT, INSERT, UPDATE, DELETE, ALTER,
REFERENCES, INDEX) asupra tabelului studenti pentru utilizatorul andrei:
GRANT ALL
ON studenti
TO andrei;
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.
8.10. Revocarea rolurilor si privilegiilor
Pentru a revoca un privilegiu sau un rol unui alt 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.
8.10.1. Revocarea unui privilegiu de sistem sau a unui rol
Pentru revocarea de privilegii de sistem sau roluri, sintaxa comenzii REVOKE este:
REVOKE{privilegiu_de_system|rol}[,{privilegiu de system|rol}]
FROM{utilizator|rol|PUBLIC} [,{utilizator|rol|PUBLIC}]
Daca se revoca un rol care contine alte roluri, intregul set de privilegii asociat cu fiecare rol
va fi revocat. Daca oricare dintre rolurile si privilegiile continute de rolul anulat a fost acordat
si in mod direct utilizatorului, atunci utilizatorul va continua sa aiba privilegiile
corespunzatoare.
Se prezinta in continuare cateva exemple:
Revocarea privilegiului CREATE CLUSTER pentru rolul rol_andrei:
REVOKE CREATE CLUSTER
FROM rol_andrei;
Revocarea rolului rol_andrei pentru utilizatorul andrei:
REVOKE rol_andrei
FROM andrei;
8.10.2. Revocarea unui privilegiu la nivel de obiect
Pentru a revoca un privilegiu la nivel de obiect, sintaxa comenzii REVOKE este:
REVOKE{privilegiu_de_obiect|ALL}[(coloana[,coloana]...)]
[,{privilegiu__de_obiect|ALL}[(coloana[,coloana]...)]]...
ON obiect
FROM{utilizator|rol|PUBLIC}, [{utilizator|rol|PUBLIC}] ...
[CASCADE CONSTRAINTS]
[FORCE]
unde:
- CASCADE CONSTRAINTS indica faptul ca se va sterge orice restrictie de integritate refereniala
definit 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 restricie de integritate referential 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
acestei optiuni, daca exista tabele dependente, revocarea privilegiul EXECUTE asupra tipului
de date va esua.
Pentru a revoca toate privilegiile utilizatorului andrei detinute pe tabelul persoana, se
va folosi urmatoarea comanda :
REVOKE ALL
ON persoana
FROM andrei;
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;