Utilizatori

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:

Gestiunea profilelor

Instructiuni SQL pentru gestiunea unui profil:

Gestiunea utilizatorilor

Crearea unui utilizator

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:

Exemplu:
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).

Modificarea unui utilizator

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

Stergerea unui utilizator

DROP USER nume_utilizator

Privilegii şi roluri

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:

Privilegiile se pot asocia utilizatorilor (precizati prin nume), sau rolurilor (precizate prin nume).

Crearea/modificarea unui rol

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.

Modificarea unui rol

Schimbarea parolei asociate rolului:

ALTER ROLE nume_rol IDENTIFIED BY parola

Elimină parola asociată unui rol:

ALTER ROLE role NOT IDENTIFIED

Stergerea unui rol

 DROP ROLE nume_rol

Set Role

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:

Atribuirea privilegiilor

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

Eliminarea privilegiilor

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] 

View-uri sistem utile

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;