Sicurezza dei database (quarta parte)
Utilizzo delle viste.
Come gia' detto in interventi precedenti le viste sono delle tabelle 'virtuali' che permettono di visualizzare i dati in modo differente rispetto a come sono memorizzati nel database.
Tramite una vista e' possibile limitare i record estratti da una tabella.
Supponiamo di avere una tabella stipendi, nella quale sono memorizzati, mese per mese, gli stipendi di tutti i dipendenti di una societa', oltre al loro nome e all'utente che utilizzano per connettersi al database:
| Dipendente | Mese | Stipendio | Utente |
| | | |
| Mario Rossi | gennaio 2001 | 2450000 | mrossi |
| Mario Rossi | febbraio 2001 | 2455000 | mrossi |
| Mario Rossi | marzo 2001 | 2455000 | mrossi |
| Paolo Verdi | febbraio 2001 | 2100000 | pverdi |
Come fare in modo che ogni utente veda solo i propri stipendi?
Con i privilegi e' possibile definire quali utenti possono leggere, inserire, modificare o cancellare i record di una tavola. Ma una volta che, ad esempio, e' stata concessa la possibilita' ad un utente di leggere i record della tavola stipendi (GRANT select ON stipendi TO mrossi) questo e' in grado di leggere tutti i record.
Questo scopo puo' essere raggiunto definendo una vista che estragga solo i record relativi all'utente che la sta interrogando:
CREATE VIEW miei_stipendi
AS
SELECT Dipendente, Mese, Stipendio
FROM stipendi
WHERE Utente=user;
La funzione user restituisce lo username dell'utente che effettua la query.
Perche' tutto funzioni e' necessario che nessun dipendente possa accedere alla tabella stipendi mentre a tutti dovra' essere concesso il solo privilegio di lettura della vista.
A questo punto se, ad esempio l'utente mrossi dovesse effettuare l'interrogazione:
SELECT * FROM miei_stipendi;
Il risultato sarebbe:
| Dipendente | Mese | Stipendio |
| | | |
| Mario Rossi | gennaio 2001 | 2450000 |
| Mario Rossi | febbraio 2001 | 2455000 |
| Mario Rossi | marzo 2001 | 2455000 |
Quindi la vista funge da filtro fra l'utente e la tabella.