Oracle fornisce caratteristiche di sicurezza concedendo e revocando ad ogni singolo utente una determinata lista di privilegi. Queste caratteristiche sono indipendenti da qualsiasi altra forma di sicurezza presente nel sistema.
Un utente di Oracle ha un nome utente e una password, e possiede tabelle, viste e tutte le risorse da lui create. Un ruolo in Oracle consiste in una serie di privilegi. I ruoli possono essere assegnati ad utenti appropriati. Esistono privilegi di sistema del DB, che consentono di eseguire particolari serie di comandi e privilegi di oggetti del DB.
Oracle è fornito con due utenti già creati, SYSTEM e SYS.
Per creare altri utenti, occorre accedere a system cui è concesso
questo privilegio.
La sintassi per creare un nuovo utente è:
create user utente identified [ by password | externally ];La parola chiave externally è utilizzata per accedere ad Oracle direttamente con la password di sistema.
create user segretario identified by segr;viene creato un utente segretario con password segr (Figura 2.1).
alter user segretario identified by newpassw;l'utente segretario ha la password newpassw al posto di segr.
In Oracle (dalla versione 8 in poi) le password possono scadere e gli
account possono essere bloccati dopo vari tentativi di connessione falliti.
Oracle conserva una storia delle password inserite in modo da evitare il
riutilizzo delle password già utilizzate.
Queste caratteristiche sono determinate dal profilo assegnato all'account
stesso. I profili sono gestiti dal DBA e creati con il comando CREATE PROFILE.
I profili possono imporre le seguenti limitazioni:
PASSWORDil messaggio di conferma
changing password for utente
Old password:
New password:
Retype new password
password changedconferma il buon esito dell'operazione.
Un utente con account e password non ha nessun privilegio di sistema, quindi non può accedere a nessuna risorsa del DBMS. Oracle fornisce tre ruoli standard, compatibili con le versioni precedenti, che forniscono privilegi di sistema:
Il comando GRANT permette di assegnare privilegi di sistema secondo la seguente sintassi:
grant {privilegio sistema | ruolo}la clausola with admin option consente al beneficiario di assegnare il privilegio o ruolo ad altri utenti o ruoli.
[,{privilegio sistema | ruolo},...]
[with admin option]
revoke {privilegio sistema | ruolo}Con questo comando si revocano soltanto tutte le concessioni ad un utente, ma non sono distrutte tutte le risorse da lui possedute; gli è semplicemente proibito di accedervi.
[, {privilegio sistema | ruolo}, ...]
from {utente | ruolo } [, {utente | ruolo}] ...
[with admin option]
drop user segretario [cascade];l'opzione cascade rimuove l'utente segretario con tutti gli oggetti da lui posseduti compresi i vincoli di integrità referenziale.
Si supponga di effettuare una operazione non concessa su di una tabella, Oracle
segnala con
ERROR at line 1: ORA 1031: insufficent privilegesil tentativo fallito di accedere ad una risorsa senza averne il diritto. Si noti che l'utente a cui viene segnalato questo errore ha almeno un privilegio sulla tabella.
ERROR at line 1: ORA-0942: table or view does not existquesto messaggio non comunica che non si ha alcun privilegio di accesso, ma che la tabella non esiste. Ciò garantisce maggior sicurezza, poiché non rende visibile neppure l'eventuale esistenza della tabella.
Un utente può concedere ad altri utenti l'autorità per accedere solo alle sue tabelle.
Con l'opzione with grant option si può estendere al beneficiario la possibilità di
concedere a sua volta il privilegio concessogli ad altri utenti.
Oltre ai tre ruoli standard di sistema è possibile creare propri ruoli.
Per creare un ruolo è necessario avere il privilegio di sistema CREATE ROLE.
La sintassi è la seguente:
create role capo_segrUn ruolo appena creato non ha associato alcun privilegio.
[not identified|identified [by password|externally]];
Una volta che un ruolo è stato creato è possibile concedergli i privilegi.
La sintassi del comando GRANT per i ruoli è identica a quella per gli utenti.
Esempio:
grant select on anagrafe to capo_segr;Abbiamo concesso al ruolo capo_segr il privilegio di SELECT sulla tabella anagrafe. (Figura 2.5)
I ruoli possono essere concessi ad altri ruoli attraverso il comando GRANT come
mostrato nel codice seguente:
grant capo_segr to capo2_segr;in questo esempio capo_segr è concesso a capo2_segr.
E' possibile concedere ruoli ad utenti. I ruoli, così , possono essere considerati come un insieme di privilegi cui è stato assegnato un nome. In questo modo a ciascun utente si concederà i privilegi del ruolo. Nota che i privilegi a utenti concessi attraverso ruoli non possono essere utilizzati come base per viste, procedure, funzioni, package o riferimenti esterni. Con questi tipi di oggetti del DB, occorre concedere direttamente i privilegi necessari. Esempio, concediamo il ruolo di capo_segr all'utente segretario.(Figura 2.6)
grant capo_segr to segretario;
Per default, i ruoli non hanno associata una password. Per conferire ulteriore sicurezza
ad un ruolo si deve utilizzare la parola chiave IDENTIFIED nel comando ALTER ROLE,
come mostrato di seguito:
alter role capo_segr identified by csegr;Con questo comando, ogni volta che un utente cerca di attivare questo ruolo, viene richiesta la password; se però il ruolo è impostato come ruolo di default per l'utente, non è richiesta alcuna password quando questi si connette.
alter role capo_segr identified externally;Quando il ruolo viene attivato, Oracle controlla il sistema operativo per verificare l'accesso.
ora_local_caposegr_d:NONE:1:segretarioCon questa istruzione si è concesso il ruolo caposegr all'account (utente) segretario dove:
ora_local_caposegr_d:NONE:1:segretario1,segretario2, ....Con questa opzione, i ruoli nel DB sono attivati attraverso il sistema operativo.
alter role capo_segr not identifiedAbbiamo rimosso la password dal ruolo capo_segr
alter user nomeutenteL'azione di default di questo comando imposta tutti i ruoli di un utente come ruoli di default, attivandoli tutti ogni volta che l'utente si connette.
default role {[ruolo1, ruolo2]
[all|all except ruolo1, ruol2] [NONE]};
set role capo_segr;Si possono, inoltre, utilizzare anche le clausole ALL e ALL EXCEPT in questo modo:
set role all;Se un ruolo ha associato una password, essa si deve specificare in questo modo:
set role all except capo_segr;
set role capo_segr identified by csegr;Per disattivare i ruoli nella propria sessione bisogna prima disattivarli tutti con il comando NONE come mostrato:
set role none;In seguito attivare quelli desiderati.
Per revocare i privilegi da un ruolo si utilizza il comando REVOKE come mostrato nell'esempio:
revoke SELECT on anagrafe from capo_segr;Ogni utente del ruolo capo_segr non può più effettuare query sulla tabella anagrafe.
drop role capo_segr;I ruoli specificati verranno rimossi completamente dal DB.
Per annullare i privilegi concessi si utilizza la seguente sintassi:
revoke privilegio oggetto [, privilegio oggetto ... ]reovoke all rimuove tutti i privilegi.
on oggetto
from {utente | ruolo } [,{utente | ruolo}]
[cascade constraints];
alter user UTENTESi concede, così, una quota di 100 MB nel tablespace USERS. La quota può anche essere assegnato in fase di creazione dell'utente.
quota 100M on USERS;
![]() |
![]() |
DIA - Dipartimento di Informatica ed Applicazioni |
![]() |