La protezione del database e l’ accesso
L’accesso al database è l’attuazione della sicurezza informatica nel campo delle basi di dati. Il termine “sicurezza” viene spesso sostituito dal termine autorizzazione; si parla quindi di modelli di autorizzazione, gestione delle autorizzazioni, regole di autorizzazione. Si trattano solo misure di sicurezza logica per i dati, ossia le procedure che assicurano che l’accesso di dati avvenga solo da parte di soggetti autorizzati secondo le modalità (lettura, scrittura, ecc) autorizzate.
Controllo dell’accesso
Vediamo alcune informazioni su come i meccanismi di privilegi del database si basino sulle istruzioni GRANT e REVOKE. Tuttavia, a volte è possibile utilizzare le funzioni del sistema operativo come ulteriore metodo di controllo dell’accesso a un database.
- Privatezza: protezione selettiva della base di dati in modo da garantire l’accesso solo agli utenti autorizzati
- Meccanismi per identificare l’utente (tramite parola chiave o password):
– Quando si collega al sistema informatico
– Quando accede al DBMS
• Utenti individuali e gruppi di utenti
Autorizzazioni
Ogni componente dello schema può essere protetto (tabelle, attributi, viste, domini, etc.). Il proprietario di una risorsa (il creatore) assegna privilegi (autorizzazioni) agli altri utenti. Un utente predefinito _system rappresenta l’amministratore di sistema e ha pieno accesso a tutte le risorse
• Un privilegio è caratterizzato da:
– la risorsa
– l’utente che concede il privilegio
– l’utente che riceve il privilegio
– l’azione che viene consentita sulla risorsa
– la possibilità di passare il privilegio ad altri utenti.
Tipi di privilegi
SQL offre 6 tipi di privilegi
– insert: per inserire un nuovo oggetto nella risorsa
– update: per modificare il contenuto della risorsa
– delete: per rimuovere un oggetto dalla risorsa
– select: per accedere al contenuto della risorsa in una query
– references: per costruire un vincolo di integrità referenziale che coinvolge la risorsa (può limitare la modificabilità della risorsa)
– usage: per usare la risorsa in una definizione di schema (es., un dominio)
• all privileges li riassume tutti
GRANT e REVOKE
Comandi che rientrano nell’Amministrazione gerarchica: esistono gerarchie di amministratori, ciascuno responsabile di una porzione della base di dati, collegati fra loro da privilegi GRANT/REVOKE di amministrazione.
• Per concedere un privilegio a un utente:
grant < Privilegi | all privileges > on Risorsa
to Utenti [ with grant option ]
– grant option specifica se deve essere garantita la possibilità di propagare il privilegio ad altri utenti
• Per revocare un privilegio:
revoke Privilegi on Risorsa from Utenti
[ restrict | cascade ]
Esempi
grant all privileges on Ordine to User1
grant update(Importo) on Ordine to User2
grant select on Ordine to User2, User3
revoke update on Ordine from User1
revoke select on Ordine from User3
Esempio di uso, grant option
1 Database administrator
grant all privileges on Ordine to
User1
with grant option
2 User1
grant select on Ordine to User2
with grant option
3 User2
grant select on Ordine to User3
Revoca di un privilegio con cascata
1 Database administrator
grant select on Ordine to User1
with grant option
2 User1
grant select on Ordine to User2
3 Database administrator
revoke select on Ordine from User1
cascade
Revoca di un privilegio con cascata
Viste e autorizzazioni di accesso
Viste = unità di autorizzazione
• Consentono la gestione ottimale della privatezza
Esempio: gestione dei conti correnti
Banca
ContoCorrente(NumConto, Filiale,
Cliente, CodFisc, DataApertura, Saldo)
Transazione(NumConto, Data, Progr,
Causale, Ammontare)
Requisiti di accesso
Viste relative alla prima filiale
create view Conto1 as
( select *
from ContoCorrente
where Filiale = 1)
create view Transazione1 as
( select *
from Transazione
where NumConto in
( select NumConto
from Conto1 ) )
Autorizzazioni relative ai dati della prima filiale
grant all privileges on Conto1
to Funzionari1
grant update(Saldo) on Conto1
to Cassieri1
grant select on Conto1
to Cassieri1, Cassieri2, Cassieri3
grant select on Transazione1
to Funzionari1
grant all privileges on Transazione1
to Cassieri1
grant select on Transazione1
to Cassieri2, Cassieri3