La o bază de date au acces mai mulţi utilizatori. O metodă de păstrare a securităţii unei baze de date constă
în stabilirea unor drepturi pentru utilizatori, corespunzător sarcinilor pe care le au de rezolvat.
Tipuri de utilizatori:
Pentru un utilizator al bazei de date se gestionează:
Observaţii:
Instructiuni SQL pentru gestiunea unui profil:
CREATE PROFILE nume_profil LIMIT parametru valoare
unde:
parametru | valoare | Semnificaţie |
SESSIONS_PER_USER | {UNLIMITED | DEFAULT | întreg} | nr. maxim de sesiuni simultane pe care le poate lansa utilizatorul ce are acest profil |
CPU_PER_SESSION | timpul unităţii centrale (în sutimi de secundă) pentru o sesiune de lucru | |
CPU_PER_CALL | timpul unităţii centrale (în sutimi de secundă) pentru un apel (execuţia unei instrucţiuni, proceduri, bloc) | |
CONNECT_TIME | timpul total maxim de conectare într-o sesiune de lucru | |
IDLE_TIME | durata maximă de inactivitate continuă, după care se închide sesiunea de lucru | |
LOGICAL_READS_PER_SESSION | numărul de blocuri de date citite într-o sesiune de lucru | |
LOGICAL_READS_PER_CALL | nr. de blocuri de date citite la execuţia unei instrucţiuni SQL | |
COMPOSITE_LIMIT | un cost al sesiunii, ca suma unora din valorile acestui tabel (cu unele ponderi) | |
PRIVATE_SGA | {UNLIMITED | DEFAULT | intreg} {K | M} | dimensiunea spaţiului de memorie pentru zonele de lucru ale utilizatorului |
Alţi parametri:
parametru | valoare | Semnificaţie |
PASSWORD_LIFE_TIME | {UNLIMITED | DEFAULT | valoare} | nr. max. de zile cât parola se poate folosi, după care expiră (trebuie schimbată) |
PASSWORD_GRACE_TIME | nr. de zile după care parola e blocată, după expirarea precizată de PASSWORD_LIFE_TIME | |
PASSWORD_REUSE_TIME | nr. de zile cât o parola nu poate fi folosită | |
PASSWORD_REUSE_MAX | nr. de modificări ale unei parole înainte de a putea fi reutilizată | |
FAILED_LOGIN_ATTEMPTS | nr. max. de încercări de conectare eronate după care parola se blochează | |
PASSWORD_LOCK_TIME | după un număr de conectări eronate se blochează parola un nr. de zile. Se poate face deblocarea înainte de expirare cu o comanda ALTER USER |
CREATE PROFILE nume_profil LIMIT PASSWORD_VERIFY_FUNCTION {functie_plsql | NULL | DEFAULT}
precizează eventuale verificări suplimentare ale utilizatorului (la autentificare)
ALTER PROFILE nume_profil LIMIT parametru valoare
CREATE USER nume_utilizator IDENTIFIED {BY parola | EXTERNALLY} optiuni;
unde în lista de opţiuni pot apare:
Cu serverul Oracle se poate face autentificarea utilizatorilor prin doua metode diferite:
CREATE USER student IDENTIFIED EXTERNALLY CREATE USER blbd0033 IDENTIFIED BY abc123
La crearea unui utilizator, sau mai târziu prin modificarea acestuia, trebuie să fie precizate spaţiile tabel necesare (implicit pentru segmente, pentru segmente temporare) şi dimensiunile prestabilite în aceste spaţii tabel. Se mai poate preciza şi un profil asociat (prin lipsă se ia profilul DEFAULT).
ALTER USER nume_utilizator opţiuni;
unde opţiunile sunt cele de la instrucţiunea CREATE USER.
Exemplu pentru modificarea parolei unui utilizator:
ALTER USER blbd0033 IDENTIFIED BY abc123
DROP USER nume_utilizator
Privilegiu: dreptul de a folosi o componentă (un obiect) din baza de date (sau dreptul de a executa anumite instrucţiuni).
Rol: o mulţime de privilegii
La un utilizator se pot asocia:
deci în final, utilizatorul are o mulţime de privilegii.
Privilegiile sunt de două tipuri:
select name from system_privilege_map order by 1Dintre cele mai utile privilegii se pot aminti:
Privilegiile se pot asocia utilizatorilor (precizati prin nume), sau rolurilor (precizate prin nume).
Rolurile sunt folosite pentru a uşura administrarea privilegiilor pe care utilizatorii le primesc pentru gestiunea bazei de date.
In general un rol utilizator este creat pentru a fi acordat unui grup de utilizatori care au aceleaşi privilegii.
Atunci c? privilegiile unui rol se modifică, se modifică şi privilegiile utilizatorilor care au primit acest rol.
Crearea unui rol care nu cere parolă la utilizare:
CREATE ROLE nume_rol NOT IDENTIFIED
Crearea unui rol care cere o autentificare la utilizare:
CREATE ROLE nume_rol IDENTIFIED BY parola
După definire, rolul este vid, deci trebuie să i se adauge privilegii.
Schimbarea parolei asociate rolului:
ALTER ROLE nume_rol IDENTIFIED BY parola
Elimină parola asociată unui rol:
ALTER ROLE role NOT IDENTIFIED
DROP ROLE nume_rol
Un utilizator poate să aibă asociate mai multe roluri. La un moment dat se pot alege rolurile pe care la va folosi prin instrucţiunea SET ROLE:
SET ROLE nume_rol [IDENTIFIED BY parola][,...]
SET ROLE ALL [EXCEPT nume_rol,...]
SET ROLE NONE;
Privilegiile sistem se pot atribui utilizatorilor şi rolurilor:
GRANT {privilegiu_sistem | nume_rol} [, {privilegiu_sistem | nume_rol}] ... TO {nume_utilizator | nume_rol | PUBLIC} [IDENTIFIED BY parola] [WITH ADMIN OPTION]
sau:
GRANT ALL PRIVILEGES TO {nume_utilizator | nume_rol | PUBLIC} [IDENTIFIED BY parola] [WITH ADMIN OPTION]
Privilegiile obiect se pot atribui rolurilor şi utilizatorilor astfel:
GRANT priv_obiect [(coloana, coloana,...)] ON [schema.]nume_obiect TO {nume_utilizator | nume_rol | PUBLIC} [WITH GRANT OPTION] [WITH HIERARCHY OPTION] GRANT ALL PRIVILEGES [(coloana, coloana,...)] ON [schema.]nume_obiect TO {nume_utilizator | nume_rol | PUBLIC} [WITH GRANT OPTION] [WITH HIERARCHY OPTION] GRANT priv_obiect [(coloana, coloana,...)] ON DIRECTORY directory_name TO {nume_utilizator | nume_rol | PUBLIC} [WITH GRANT OPTION] [WITH HIERARCHY OPTION] GRANT priv_obiect [(coloana, coloana,...)] ON JAVA [RE]SOURCE [schema.]nume_obiect TO {nume_utilizator | nume_rol | PUBLIC} [WITH GRANT OPTION] [WITH HIERARCHY OPTION]
Clauza "WITH ADMIN OPTION" precizează că un utilizator care a primit un privilegiu
poate să-l acorde la alţi utilizatori.
Clauza "WITH HIERARCHY OPTION" atribuie privilegii la toate subobiectele obiectului curent
(de exemplu subview-urile unui view).
Rolul PUBLIC se atribuie la toţi utilizatorii bazei de date, deci un rol sau un privilegiu
atribuit acestui rol este accesibil tuturor utilizatorilor.
Există câteva roluri predefinite (create cu diverse scripturi), de exemplu:
create role public create role connect grant create session to connect create role resource grant create table,create cluster,create sequence,create trigger, create procedure, create type, create indextype, create operator to resource create role dba grant all privileges, select any dictionary, analyze any dictionary to dba with admin option
REVOKE nume_rol FROM {nume_utilizator | nume_rol | PUBLIC} REVOKE lista_priv_sistem FROM {nume_utilizator | nume_rol | PUBLIC} REVOKE ALL FROM {nume_utilizator | nume_rol | PUBLIC} REVOKE priv_obiect [(column1, column2..)] ON [schema.]obiect FROM {nume_utilizator | nume_rol | PUBLIC} [CASCADE CONSTRAINTS] REVOKE priv_obiect [(column1, column2..)] ON JAVA [RE]SOURCE [schema.]obiect FROM {nume_utilizator | nume_rol | PUBLIC} [CASCADE CONSTRAINTS]
Pentru a obţine informaţii despre roluri se pot folosi următoarele view-uri:
Exemple:
select * from dba_roles; select * from dba_role_privs order by 1; select * from user_role_privs; select * from role_role_privs; select * from session_roles; select * from dba_connect_role_grantees order by 1; select * from role_sys_privs order by 1; select * from role_tab_privs order by 3,1;
Informaţii despre utilizatorii unei baze de date se pot obţine cu ajutorul view-urilor:
Exemple:
select * from all_users; select * from dba_users; select * from user_users; select * from user_resource_limits;
Informaţii despre privilegii:
Exemple:
select * from DBA_SYS_PRIVS order by 1; select * from USER_SYS_PRIVS order by 1; select * from SESSION_PRIVS order by 1; select * from DBA_TAB_PRIVS order by 1; select * from USER_TAB_PRIVS order by 1; select * from ALL_TAB_PRIVS order by 1; select * from USER_PASSWORD_LIMITS order by 1; select * from USER_RESOURCE_LIMITS order by 1; select * from RESOURCE_COST order by 1;