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;

results matching ""

    No results matching ""