Per stampare: Clicca qui oppure seleziona File » Stampa nel menù del tuo browser.

        -----------------------------------------------------------------------------------------------
        Questo intervento è stato stampato da Guide di Dada.Net
        raggiungibile a http://guide.dada.net
        -----------------------------------------------------------------------------------------------

By Database di Andrea Silvestri
URL: http://guide.dada.net/database/interventi/2001/11/76317.shtml

Database di Andrea Silvestri guida dal 29-12-2000

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:

DipendenteMeseStipendioUtente
Mario Rossigennaio 20012450000mrossi
Mario Rossifebbraio 20012455000mrossi
Mario Rossimarzo 20012455000mrossi
Paolo Verdifebbraio 20012100000pverdi


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:

DipendenteMeseStipendio
Mario Rossigennaio 20012450000
Mario Rossifebbraio 20012455000
Mario Rossimarzo 20012455000


Quindi la vista funge da filtro fra l'utente e la tabella.