Rols
Introducció
Un rol de la base de dades és una agrupació de privilegis als quals se li dona un nom i poden ser assignat a altres usuaris o rols.
Els rols simplifiquen la gestió de privilegis.
Per exemple, quan afegim un nou usuari a la base de dades, no és necessari concedir-li permís per cada objecte, sinó que el podem afegir a un rol determinat.
Si es modifiquen els privilegis associats al rol, tots els usuaris que tinguin aquest rol adquireixen el privilegi de forma immediata.
Un usuari pot tenir assignats varis rols.
El mateix rol el pot estar assignat a varis usuaris.
Creació de rols
S'ha de tenir el privilegi de sistema CREATE ROLE.
El nom del rol ha de ser diferent de qualsevol altre nom de rol i usuari existent al sistema.
Es poden crear rols amb contrasenya que serà necessària per habilitar el rol a la sessió actual amb l'instrucció SET ROLE.
Sintaxi:
CREATE ROLE <rol> IDENTIFIED <contrasenya>;
CREATE ROLE <rol> NOT IDENTIFIED;
Assignació rols als usuaris
Perquè un usuari pugui atorgar un rol se li ha d'haver assignat el rol mitjançant ADMIN OPTION, tenir el privilegi GRANT ANY ROLE o bé que sigui l'usuari que ha creat el rol.
L'usuari que crea el rol implícitament el té assignat
com a ADMIN OPTION.
Sintaxi:
GRANT <rol> TO <usuari>/<rol>/PUBLIC;
GRANT <rol> TO <usuari>/<rol>/PUBLIC
WITH ADMIN OPTION;
Amb PUBLIC s'atorga el rol a tots els usuaris.
Retirar rol
Només ho poden fer els usuaris que se'ls hi ha assignat el rol amb l'opció ADMIN OPTION o també aquells usuaris amb el privilegi GRANT ANY ROL.
Sintaxi:
REVOKE <rol1>, ...<roln>
FROM <usuario>| <rol> | PUBLIC [, <usuario>|<rol>} ]...
Amb PUBLIC es retira el rol a tots els usuaris.
Esborrar rol
Per esborrar rols s'ha de tenir el privilegi DROP
ANY ROLS o tenir el rol atorgat mitjançant ADMIN OPTION.
Si esborrem un rol es retira de tots els usuaris i rols que el tenien i s'elimina de la base de dades.
Sintaxi:
DROP ROLE <rol>;
Consultar rols
Per conèixer els privilegis dels usuaris o rols podem consultar les següents vistes:
- dba_roles: Conté tots els rols definits en el sistema
- dba_role_privs: Mostra els rols que té cada usuari.
- dba_sys_privs: Mostra els permisos assignats cada usuari o rol.
Exemple
Creem un nou rol per als programadors:
CREATE ROLE rol_programador;
Creem els usuaris pels diferents programadors:
CREATE USER prog1 IDENTIFIED BY prog1;
CREATE USER prog2 IDENTIFIED BY prog2;
Assignem els permisos al rol:
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, CREATE SYNONYM, CREATE SEQUENCE, ALTER ANY TABLE, ALTER ANY VIEW, ALTER ANY PROCEDURE, ALTER ANY SYNONYM, DROP ANY TABLE, DROP ANY VIEW, DROP ANY PROCEDURE
TO rol_programador;
Donem permisos de programador als usuaris programadors:
GRANT rol_programador TO prog1, prog2;
Assignem nous permisos al rol de programador. Aquests quedaran assignats automàticament a prog1 i prog2.
GRANT DROP ANY SYNONYM TO rol_programador;
Comprovem els rols i permisos de l'usuari prog1
SELECT * FROM dba_role_privs WHERE GRANTEE="PROG1";
SELECT * FROM dba_sys_privs WHERE GRANTEE="ROL_PROGRAMADOR";
Script de visualització de permisos i rols d'un usuari
Una manera més fàcil de veure tots els permisos i rols assignats a un usuari és executar el següent script que ens demanarà sobre quin usuari volem consultar les dades.
select
lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
(
/* THE USERS */
select
null grantee,
username granted_role
from
dba_users
where
username like upper('%&enter_username%')
/* THE ROLES TO ROLES RELATIONS */
union
select
grantee,
granted_role
from
dba_role_privs
/* THE ROLES TO PRIVILEGE RELATIONS */
union
select
grantee,
privilege
from
dba_sys_privs
)
start with grantee is null
connect by grantee = prior granted_role;