top of page
Autorità e Privilegi
Nei DBMS ogni operazione deve essere autorizzata, ovvero l’utente che esegue l’operazione deve avere i privilegi necessari.
I privilegi vengono concessi e revocati per mezzo delle istruzioni GRANT e REVOKE.
Un principio fondamentale è che un utente che ha ricevuto un certo privilegio può a sua volta accordarlo ad altri utenti solo se è stato esplicitamente autorizzato a farlo.
Mediante GRANT e REVOKE si controllano anche le autorità, ovvero il diritto ad eseguire azioni amministrative di un certo tipo.
GRANT
GRANT { ALL | < lista di privilegi > }
ON [ TABLE ]
TO { | PUBLIC } [ WITH GRANT OPTION ]
I privilegi possibili includono quello “master” di CONTROL (posseduto automaticamente da chi ha creato l’oggetto) e quelli di ALTER, DELETE, INSERT, SELECT, INDEX, REFERENCES e UPDATE.
Per REFERENCES e UPDATE si può anche specificare una lista di attributi ALL conferisce tutti i privilegi che chi conferisce il privilegio può passare ad altri, ma in ogni caso non CONTROL.
PUBLIC concede i privilegi specificati a tutti gli utenti, inclusi quelli futuri.
Dettagli sui privilegi
CONTROL: comprende tutti i privilegi (su una view sono solo SELECT, INSERT, DELETE e UPDATE). Inoltre permette di conferire tali privilegi ad altri utenti; può essere conferito solo da qualcuno che ha autorità SYSADM o DBADM
ALTER: attribuisce il diritto di modificare la definizione di una tabella
DELETE: attribuisce il diritto di cancellare righe di una tabella
INDEX: attribuisce il diritto di creare un indice sulla tabella
INSERT: attribuisce il diritto di inserire righe nella tabella
REFERENCES: attribuisce il diritto di definire foreign keys in altre tabelle che referenziano la tabella
SELECT: attribuisce il diritto di eseguire query sulla tabella/vista e di definire VIEW
UPDATE: attribuisce il diritto di modificare righe della tabella/vista Per eseguire una query, è necessario avere il privilegio di SELECT o di CONTROL su tutte le table e le view referenziate dalla query
REVOKE
Il formato dell’istruzione REVOKE per revocare privilegi su tables e views è:
REVOKE { ALL | < lista di privilegi > }
ON [ TABLE ]
FROM { | PUBLIC }
A differenza del GRANT, per eseguire REVOKE bisogna avere l’autorità SYSADM o DBADM, oppure il privilegio di CONTROL sulla relazione.
Il REVOKE non agisce a livello di singoli attributi; pertanto non si possono revocare privilegi di UPDATE solo su un attributo e non su altri (per far ciò è quindi necessario revocarli tutti e poi riassegnare solo quelli che si vogliono mantenere)
esempio
Se Pippo, che non ha autorità DBADM o SYSADM, né CONTROL su Employee, prova ad eseguire:
Pippo> REVOKE SELECT ON TABLE Employee FROM Pluto
si verifica un errore
Viceversa, se Paperino ha autorità DBADM ed esegue
Paperino> REVOKE SELECT ON TABLE Employee FROM Pippo, Topolino
né Pippo né Topolino possono più eseguire query su Employee, ma continuano a poter aggiornare Salary
bottom of page