Les rôles

Il n’existe pas de notion de groupe d’utilisateur sous Oracle, mais la notion de rôle, qui permet de nommer un groupe de privilèges. On peut affecter un rôle à un ou n utilisateurs, voire à un rôle.

Gestion des rôles

Les rôles se créent et se suppriment respectivement  avec l’instruction ‘CREATE ROLE’ et ‘DROP ROLE’.
Pour pouvoir faire ces opération il faut bien sûr des privilègess : le droit systeme ‘CREATE ROLE’.
Ensuite on les enrichit par des GRANT de privilège objets, systeme ou des GRANT de …ROLEs.
Un rôle peut ainsi en cascade inclure d’autres roles.

Une fois créé le rôle sera GRANTé à 1 ou n USERs ou ROLEs.

SQL>  CREATE ROLE consulte_client;
SQL> CREATE ROLE modif_client;
SQ> GRANT CREATE SESSION TO consulte_client; — un droit systeme minimal !
SQL> GRANT SELECT ON gestion.client to consulte_client; — et un droit de consultation D’UN objet
SQL> GRANT UPDATE ON gestion.client to modif_client; — droit de modif
SQL> GRANT consulte_client TO MARTIN; — on donne le role a un user
SQL> GRANT consulte_client TO modif_client; - on donne un role a un role, et on comprend bien que si on a le droit de modifier on a aussi sans besoin de pouvoir consulter
SQL> GRANT modif_client TO dupont;
– et je donne le droit de créer des roles (pas forcément une bonne ideée…) à l’administarteur de l’application
SQL> GRANT CREATE ROLE TO roberto;

rem importante : lorsqu’on crée un ROLE on ‘hérite’ implicitement de ce rôle avec l’option ADMIN ! Cela est utile pour pouvoir donner ce rôle à quelqu’un une fois qu’on l’acréé. Attention tout de m^me à l’inflation de rôle possible du DBA

Rôles par défaut

Lorsqu’un utilisateur se connecte, il ‘prend’ ses rôles par défaut.
Au cours de sa session, Il lui est possible d’en rajouter ou d’en enlevre, avec la commande SET ROLE.
Pour voir la liste des rôles actuellement actif, consulter la table SESSION_ROLES du dictionnaire.

SQL> CONNECT SYSTEM/xxx
SQL> SELECT * FROM session_roles;

Rôles prédéfinis

Il existe un certain nombre de rôles prédéfinis, fournis avec Oracle 10g. Voici une liste de ces rôles avec les privilèges système qu’ils offrent :

CONNECT :
Se connecter ! équivalent du privilège système ‘CREATE SESSION’Attention !!! en version 10gR1 et antérieures, ce rôle donnait beaucoup + de privilèges, à savoir :
ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE,
CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW

RESOURCE :
créer des données avec des quotas sur tous les tablespaces ->
CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE,
CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE

DBA :
Tous les privilèges système avec ADMIN OPTION

EXP_FULL_DATABASE :
export complet ou incrémental ->
SELECT ANY TABLE, BACKUP ANY TABLE, EXECUTE ANY PROCEDURE, EXECUTE ANY TYPE, ADMINISTER RESOURCE MANAGER, and

INSERT, DELETE, and UPDATE on the tables SYS.INCVID, SYS.INCFIL, and SYS.INCEXP. Also the following roles:

EXECUTE_CATALOG_ROLE and SELECT_CATALOG_ROLE.

IMP_FULL_DATABASE :
import full + tous les privilèges système + role

DELETE_CATALOG_ROLE :
droit DELETE sur la table SYS.AUD$

EXECUTE_CATALOG_ROLE : privilège EXECUTE sur les objets du dictionnaire + HS_ADMIN_ROLE.

SELECT_CATALOG_ROLE : accès en consultation au dictionnaire + HS_ADMIN_ROLE.

RECOVERY_CATALOG_OWNER : privilèges pour le propriétaire du catalogue de restauration ->
CREATE SESSION, ALTER SESSION, CREATE SYNONYM, CREATE VIEW, CREATE DATABASE LINK,
CREATE TABLE, CREATE CLUSTER, CREATE SEQUENCE, CREATE TRIGGER, and CREATE PROCEDURE

HS_ADMIN_ROLE
protection des accès (SELECT et EXECUTE) au référentiel HS (Heterogeneous Services) data dictionary tables

(grants SELECT) and packages
AQ_ADMINISTRATOR_ROLE
privilèges d’administration de l’ Advance Queuing. Notamment : ENQUEUE ANY QUEUE, DEQUEUE ANY QUEUE, et MANAGE

ANY QUEUE + SELECT sur les tables AQ + EXECUTE sur les packages AQ.

Rôles applicatifs

Pour bien gérer la sécurité des application il est nécessaire de créer des rôles, adaptés aux besoins et bien sûr à minima.
Un utilisateur de l’applicatif  (MARTIN) se connectera à son compte, et via un rôle précis accèdera aux données dont il a besoin (RH) .
Ce que l’on voit malheureusement souvent c’est :

Tous les utilisateurs de l’applicatif (par exemple MARTIN, DUPONT, …) se connectent dans le même compte applicatif propriétaire des données (par exemple RH) et ont  donc par définition tous les droits sur les données RH.

Exemple de bonne pratique  : on peut créer un rôle qui donne uniquement des droits de consultation sur quelques tables d’un schéma :

– creation du role
SQL> create role consult_finance;
– affectation des privileges au role
SQL> grant select on budget to consult_finance;
SQL> grant select on fournisseur to consult_finance;
SQL> grant select on client to consult_finance;
– cession du role aux utilisateurs
SQL> grant consult_finance to user_finance_1;
SQL> grant consult_finance to user_finance_2;

Note : un user ne peut pas hériter de plus de ‘MAX_ENABLED_ROLES’ paramètre d’initialisation de la base, dont la valeur par défaut est 30 en 10g. Cela parait peu probable pour un applicatif classique (voire déraisonnable).
Dans le cas d’une console d’administration centrale (console 10g GRID ou server manager console). Le user d’administration connecté hérite de tous les droits qu’il crée…ce qui est beaucoup plus fréquent ! et la limite MAX_ENABLED_ROLES peut être facilement atteinte et … empêcher une connexion à la console !

Informations sur les rôles dans le référentiel (dictionnaire) Oracle 10g

DBA_ROLES
Tous les roles !
DBA_ROLE_PRIVS, USER_ROLE_PRIVS
roles donnés aux users et/ou aux roles
ROLE_ROLE_PRIVS
roles donnés aux roles
ROLE_SYS_PRIVS
privilèges systèmes donnés aux roles (accessible au user)
ROLE_TAB_PRIVS
privilèges objets donnés aux roles (accessible au user)
SESSION_PRIVS
privilèges de la session courante
SESSION_ROLES
roles de la session courante

Les rôles et la console GRID 10g
La console donne par defaut le role CONNECT, cela ne pose pas de pb de sécurité sur une base 10g…mais si on s’en sert pour administrer une base 9i (avec l’agent qui va bien) le role CONNECT offre presque tous les privilèges de création/suppression de données dans le schéma.