Sicurezza dei database (seconda parte)
I privilegi.
In Oracle esistono due tipi di privilegi che possono essere concessi agli utenti:
privilegi di sistema
L'istruzione per concedere un privilegio di sistema ad un utente e' la
GRANT, la cui sintassi e':
GRANT system_privilege TO {user_name | role | PUBLIC}
[WITH ADMIN OPTION];
Dalla sintassi possiamo notare che un privilegio puo' essere concesso ad un certo utente (user_name) oppure ad un ruolo (role) o a tutti gli utenti che possono collegarsi al database (PUBLIC).
L'opzione WITH ADMIN OPTION concede all'utente non solo il privilegio ma anche la possibilita' di concedere lo stesso ad altri utenti. Questa eventualita' e' da evitare il piu' possibile, in quanto si perde il controllo del privilegio. Anche il concedere un privilegio di sistema a tutti tramite la chiave PUBLIC va usato con molta attenzione, in quanto viene applicato a tutti gli utenti, anche quelli creati dopo aver concesso il privilegio.
Per concedere all'utente scott il privilegio di estrarre record da tutte le tavole l'istruzione e':
GRANT select any table TO scott;
Per poter concedere un privilegio di sistema si deve avere il privilegio GRANT ANY PRIVILEGE.
privilegi sugli oggetti
I privilegi sugli oggetti fanno riferimento ad un particolare oggetto del database:
| ALL |
| ALTER |
| DELETE |
| EXECUTE |
| INDEX |
| INSERT |
| REFERENCES |
| SELECT |
| UPDATE |
Un utente puo' concedere ad altri utenti privilegi su tutti gli oggetti da lui posseduti, quindi appartenenti al suo schema.
L'istruzione e' sempre la
GRANT ma con una sintassi leggermente differente, in quanto si deve specificare l'oggetto sul quale si vuole agire. Ad esempio l'utente scott per concedere all'utente joe la possibilita' di effettuare delle query sulla tabella anagrafica, da lui posseduta, deve digitare la seguente istruzione:
GRANT select ON anagrafica to joe;
Anche in questo caso e' possibile concedere all'utente anche la capacita' di tramandare ad altri utenti la possibilita' di concedere il privilegio, con l'opzione WITH GRANT OPTION ed anche in questo caso e' da evitare per la sua pericolosita'.
I privilegi possono essere revocati con l'istruzione
REVOKE, nel caso di un privilegio di sistema:
REVOKE select any table FROM scott;
nel caso di privilegi sugli oggetti:
REVOKE select ON anagrafica FROM joe;
Per ora e' tutto, nel prossimo intervento vedremo come raggruppare piu' privilegi in ruoli, in modo da renderne piu' semplice la gestione.