Kosmous beyond the clouds: Sviluppo, Formazione e Consulenza Informatica

Oracle Database: i privilegi

I privilegi, in Oracle, possono essere classificati in due tipologie generali:
  1. Privilegi di sistema
  2. Privilegi di oggetto
PRIVILEGI DI SISTEMA:

Sono privilegi di carattere generale, come:
  • CREATE TABLE (permette di creare tabelle ed indici nel proprio schema);
  • CREATE VIEW (permette di creare viste nel proprio schema. Ovviamente devo avere i privilegi per eseguire la query su cui si basa la vista);
  • CREATE PROCEDURE (permette di creare dei procedure in PL/SQL. Anche in questo caso l'utente che crea la procedura deve avere i permessi per eseguire tutti i comandi utilizzati nella procedura).
Alcuni di essi hanno anche dei "duplicati" contenenti la parola ANY.
Ad esempio esiste il privilegio CREATE TABLE ed il privilegio CREATE ANY TABLE.
La differenza tra i due consiste nella possibilità di creare oggetti anche nello schema di un'altro utente.

Si ricorda che lo SCHEMA è l'insieme degli oggetti che appartengono ad un utente.

Facciamo un esempio.
Supponiamo che l'utente USER1 ha il privilegio CREATE TABLE. Tale utente potrà quindi creare oggetti come:
  • USER1.tabella1
  • USER1.tabella2
  • USER1.indice1
Se all'utente USER1 viene assegnato il privelegio CREATE ANY TABLE, l'utente potrà creare anche oggetti come:
  • USER2.tabella10
  • USER3.tabella21
e così via. Ovviamente gli utenti USER2 ed USER3 devono già esistere.
Ma attenzione: questi oggetti verranno creati con le stesse caratteristiche e limitazioni dell'utente specificato, e non con le carattteristiche dell'utente che le sta creando.

Pertanto, se USER1 ha impostato come DEFAULT TABLESPACE il Tablespace_1, mentre l'utente USER2 ha impostato come DEFAULT TABLESPACE il Tablespace_2, l'eventuale tabella USER2.tabella10, creata dall'utente USER1, verrà creata nel tablespace Tablespace_2.

Inoltre, se l'utente USER2 ha dei limiti di spazio impostati (cioè delle QUOTE), la tabella di tabella10 dovrà rientrare nei limiti imposti allo USER2.

Si ricorda che l'istruzione che l'utente USER1 deve utilizzare per creare un oggetto nello schema di un'altro utente è del tipo:

CREATE TABLE USER2.tab1 (col1 CHAR(20));

e non:

CREATE TABLE tab1 (col1 CHAR(20));

PRIVILEGI DI OGGETTO:

A differenza dei privilegi di sistema, questi privilegi fanno riferimento ad uno specifico oggetto del database, che deve esistere al momento dell'assegnazione del privilegio.
Un tipico privilegio di oggetto è il privilegio SELECT su una tabella.
I privilegi di oggetto sono pertanto strettamente legati alla tipologia di oggetto. Ecco di seguito un piccolo elenco su privilegi che posso assegnare in funzione dell'oggetto:

TABLE
  • ALTER
  • DELETE
  • INDEX
  • INSERT
  • UPDATE
  • REFERENCES
  • SELECT
  • ALL (è un privilegio che include tutti gli altri privilegi disponibili per quell'oggetto)
VIEW
  • DELETE
  • INSERT
  • UPDATE
  • SELECT
  • ALL (è un privilegio che include tutti gli altri privilegi disponibili per quell'oggetto)
PROCEDURE
  • EXECUTE
SEQUENCE
  • ALTER
  • SELECT
  • ALL (è un privilegio che include tutti gli altri privilegi disponibili per quell'oggetto)

ASSEGNAZIONE DEI PRIVILEGI

Il comando SQL per assegnare (GRANT) o togliere (REVOKE) un privilegio è funzione del tipo di privilegio:




PRIVILEGI DI SISTEMA:

GRANT privilegio TO utente; REVOKE privilegio FROM utente;

esempi:

GRANT CREATE TABLE TO user1;
GRANT CREATE TABLE, CREATE VIEW TO user1;
GRANT CREATE ANY TABLE, CREATE VIEW TO user1,user2;
REVOKE CREATE PROCEDURE FROM user3;


come si può vedere dagli esempi, è possibile assegnare con unico comando più privilegi a più utenti.

PRIVILEGI DI OGGETTO:

GRANT privilegio ON nome_oggetto TO utente;
REVOKE privilegio ON nome_oggetto FROM utente;


esempi:

GRANT SELECT ON tabella1 TO user2;
GRANT SELECT,INSERT ON tabella2 TO user1,user3;
REVOKE ALL ON tabell2 FROM user2;


Adesso che abbiamo visto come assegnare e togliere un privilegio a qualcuno, vediamo chi ne ha la possibilità.
Anche in questo caso dobbiamo distinguere tra Privilegi di Sistema e Privilegi di Oggetto.

PRIVILEGI DI SISTEMA:
Per assegnare un privilegio di sistema, devo:
  • avere il privilegio GRANT ANY PRIVILEGE
  • avere il privilegio GRANT ANY ROLE
  • aver ricevuto il privilegio che voglio assegnare ad altri, con l'opzione WITH ADMIN OPTION
facciamo un esempio; suppongo di essere USER1 e di aver ricevuto il privilegio CREATE TABLE con l'istruzione:

GRANT CREATE TABLE TO user1 WITH ADMIN OPTION;

allora posso riassegnare questo privilegio a chi mi pare, anche con l'opzione WITH ADMIN OPTION se voglio dare all'utente la possibilità di riassegnarlo a sua volta.

Attenzione: Se utente A assegna un privilegio di sistema X ad utente B "WITH ADMIN OPTION", e poi utente B riassegna il privilegio X ad un terzo utente C, se utente A, pentito, revoca il privilegio X all'utente B, tale privilegio resta assegnato all'utente C. Utente A dovrà quindi revocarlo esplicitamente anche all'utente C.


PRIVILEGI DI OGGETTO:
Per poter assegnare un privilegio di oggetto, devo:
  • essere il proprietario dell'oggetto;
  • devo aver ricevuto quel privilegio con l'opzione WITH GRANT OPTION

Attenzione: Questa volta se utente A assegna un privilegio di oggetto Y ad utente B "WITH GRANT OPTION", e poi utente B riassegna il privilegio Y ad un terzo utente C, se utente A, revoca il privilegio Y all'utente B, tale privilegio verrà revocato anche all'utente C.
Per avere informazioni su quali privilegi sono stati assegnati ai vari utenti, posso consultare alcune viste di sistema. Di seguito ne sono riportate alcune di esse:

TABLE_PRIVILEGES
USER_TAB_PRIVS
USER_TAB_PRIVS_MADE
USER_TAB_PRIVS_RECD
ALL_TAB_PRIVS
ALL_TAB_PRIVS_MADE
ALL_TAB_PRIVS_RECD
DBA_TAB_PRIVS
USER_SYS_PRIVS
DBA_SYS_PRIVS
SESSION_PRIVS




Questo documento non è un documento ufficiale della Oracle Corporation. Oracle detiene tutti i diritti sulla propria documentazione. Alcuni termini usati sono trademarks registrati. In caso di dubbi o incertezze consultate la documentazione ufficiale di Oracle o contattate il Customer Support di Oracle.

Commenti (3)2003-06-19

20/10/2010 - Jackson scrive:
Questo è un buon lavoro.....(-: ;
02/04/2010 - luigi bassi scrive:
note complete, scritte molto bene estremamente chiari e utili gli esempi.
02/04/2010 - luigi bassi scrive:
note complete, scritte molto bene estremamente chiari e utili gli esempi.