Un sistema facile per capire gli Oracle Roles

Alcuni novizi si chiedono “mi servono davveri i ruoli?” e spesso si può ignorare l’argomento, che però è
molto utile. Navigare sul web può essere frustrante tra spiegazioni dei ruoli di sistema e costrutti di
codice.
Adesso cerchiamo di scoprirli in un modo semplice.
Qualche parola per descrivere gli Oracle Roles.
 

  • Gli Oracle Roles sono molto utili per gestire gli accessi al db da più utenti.
  • Possono essere visti come collettori di privilegi.
  • Un utente Oracle può avere più ruoli.
  • L’uso dei ruoli evita di dover fornire privilegi al singolo utente.

Bisogna avere il privilegio CREATE_ROLE per creare un ruolo
Un esempio pratico
Supponiamo di avere centinaia di utenti, con centinaia di tabelle di dati.
Jimmy Smith è un nuovo impiegato ed è autorizzato a vedere e modificare le tabelle COSTUMERS
PAYMENTS.
Bobby Timmons è anch’egli un nuovo impiegato, ma oltre a COSTUMERS e PAYMENTS, può avere il
pieno controllo delle tabelle di un nuovo progetto che abbiamo chiamato “shipment” con le relative
procedure.
Senza ruoli dobbiamo dare le grant per ogni singolo privilegio, in questo modo
 
GRANT SELECT, UPDATE,INSERT on COSTUMERS to JSMITH;
GRANT SELECT, UPDATE,INSERT on PAYMENTS to JSMITH;
 
GRANT SELECT, UPDATE,INSERT on COSTUMERS to BTIMMONS;
GRANT SELECT, UPDATE,INSERT on PAYMENTS to BTIMMONS;
 
Le tabelle del progetto “shipment” sono:
FOREIGN_SHIPMENTS
NATIONAL_SHIPMENTS
COURIERS
e un po’ di altre procedure…
 
GRANT SELECT, INSERT, UPDATE, DELETE on FOREIGN_SHIPMENTS to BTIMMONS;
GRANT SELECT on NATIONAL_SHIPMENTS to BTIMMONS;
ecc.
GRANT EXECUTE on PKG_COMPUTE_COST to BTIMMONS
ecc.
ecc.
Bene, il mese prossimo arriva un altro impiegato, John Coltrane, che ha i privilegi di Bobby Timmons e
Jimmy Smith.
E dobbiamo aggiungere una nuova tabella al segretario (e quindi Smith, Timmons e Coltrane)…
Si può immaginare quanto sia facile avere ruoli creati ad hoc per varie necessità!
CREATE ROLE REGISTRY;
GRANT SELECT, UPDATE,INSERT on COSTUMERS to REGISTRY;
GRANT SELECT, UPDATE,INSERT on PAYMENTS to REGISTRY;
 
CREATE ROLE SHIPMENTS;
GRANT SELECT, UPDATE,INSERT, DELETE on FOREIGN_SHIPMENTS  to SHIPMENTS;;
GRANT SELECT, UPDATE,INSERT, DELETE on NATIONAL_SHIPMENTS to SHIPMENTS;
GRANT SELECT, UPDATE,INSERT, DELETE on COURIERS to SHIPMENTS;
GRANT EXECUTE to PKG_COMPUTE_COST to SHIPMENTS;
ecc. ecc.
Con i ruoli REGISTRY e SHIPMENTS, abbiamo organizzato facilmente i privilegi, ed ora possiamo
gestirli tra gli utenti in questo modo
GRANT REGISTRY to JSMITH;
GRANT REGISTRY to BTIMMONS;
GRANT SHIPMENTS to BTIMMONS;
GRANT REGISTRY to JCOLTRANE;
GRANT SHIPMENTS to JCOLTRANE;
Possiamo aggiungere una tabella al ruolo REGISTRY, e tutti gli utenti con grant REGISTRY otterrano il
privilegio:
GRANT SELECT, UPDATE,INSERT on DOCUMENTS to REGISTRY;
Possiamo revocare i privilegi dal ruolo
REVOKE UPDATE on COSTUMERS from REGISTRY
Possiamo revocare il ruolo dagli utenti
REVOKE SHIPMENTS to JCOLTRANE;

Potrebbero interessarti anche...