La protezione del database è distribuita su diversi livelli:
L'Autenticazione è il processo con cui il server backend ed il postmaster si assicurano che il richiedente l'accesso ai dati corrisponda effettivamente all'utente di cui afferma l'identità. Tutti gli utenti che richiedono i servizi di Postgres sono messi a confronto con il contenuto della classe pg_user, per accertare che siano autorizzati a farlo. Tuttavia, la verifica dell'effettiva identità dell'utente è effettuata in diversi modi:
Il controllo d'accesso host-based, è il nome per i controlli elementari che PostgreSQL effettua su quale parte del database sia concessa ai client, e su come gli utenti di questi client devono accreditarsi. Ogni sistema di database contiene un file chiamato pg_hba.conf, nella sua directory $PGDATA, che controlla chi può connettersi ad ogni database. Ogni client che accede ad un database, deve essere citato nel gruppo degli iscritti in pg_hba.conf. Altrimenti tutti i tentativi di connessione da quel client saranno respinti, e daranno il messaggio d'errore "User authentication failed".
Leggete le pagine di manuale in linea di pg_hba.conf(5) (man 5 pg_hba.conf).
Il formato generale del file pg_hba.conf, è costituito da un insieme di record, uno per ogni riga. Le righe vuote, e quelle che iniziano con il carattere "#", sono ignorate. Un record è composto da un gruppo di campi separati da spazi e/o tabulazioni.
I client possono effettuare le connessioni usando socket di dominio Unix, o socket di dominio Internet (ad esempio TCP/IP). Le connessioni, effettuate mediante socket di dominio Unix, sono controllate usando record del seguente formato:
database_locale metodo_di_autenticazione
database_locale specifica il database cui è riferito il record. Il valore all specifica che quanto segue verrà applicato a tutti i database.
metodo_di_autenticazione specifica il metodo che un utente deve usare per autenticare sé stesso, quando si connette a quel database usando socket di dominio Unix. I diversi metodi sono descritti più avanti.
Le connessioni, effettuate usando i socket di dominio Internet, sono controllate usando record con il seguente formato.
host database indirizzo-TCP/IP maschera-TCP/IP metodo_di_autenticazione
L'indirizzo TCP/IP viene moltiplicato logicamente (mediante l'operatore binario AND) sia alla maschera TCP/IP specificata, sia all'indirizzo TCP/IP del client connesso. Se i due valori risultanti sono uguali, il record viene usato per la connessione. Se ad una connessione corrispondo più record validi, viene usato il primo che appare nel file. Sia l'indirizzo TCP/IP, sia la maschera TCP/IP, sono espressi nella notazione decimale puntata. Se per una connessione non viene trovato un record corrispondente, tra i metodi di autenticazione viene applicato il 'reject' (vedere Metodi di Autenticazione).
I seguenti metodi di autenticazione sono supportati sia da Unix che dai socket di dominio TCP/IP:
I seguenti metodi di autenticazione sono supportati soltanto per i socket di dominio TCP/IP:
Ecco alcuni esempi:
# Ci fidiamo di qualsiasi connessione via socket di dominio Unix. local trust # Ci fidiamo di qualsiasi connessione via TCP/IP da questa macchina. host all 127.0.0.1 255.255.255.255 trust # Questa macchina non è desiderata. host all 192.168.0.10 255.255.255.0 reject # Questa macchina non può cifrare, quindi le chiediamo le password in chiaro. host all 192.168.0.3 255.255.255.0 password # Il resto di questo gruppo di macchine dovrebbe fornire password cifrate. host all 192.168.0.0 255.255.255.0 crypt
Postgres fornisce meccanismi per consentire agli utenti, che mettono i loro dati a disposizione di altri utenti, di limitarne l'accesso.
Potete usare ssh per cifrare la connessione di rete tra i client e il server Postgres. Se fatto correttamente, ciò dovrebbe portare ad una connessione di rete adeguatamente sicura.
La documentazione per ssh fornisce la maggior parte delle informazioni per cominciare ad operare. Riferitevi all'url http://www.heimhardt.de/htdocs/ssh.html per approfondimenti. La realizzazione di una connessione con SSL può essere fatta in sole due fasi.
Lanciare un tunnel sicuro mediante ssh: La realizzazione di una connessione con SSL può essere fatta in sole due fasi.
ssh -L 3333:wit.mcs.anl.gov:5432 postgres@wit.mcs.anl.gov
psql -h localhost -p 3333 -d mpw
Kerberos è un sistema standard di autenticazione sicura; è diffuso tra le aziende, ed è adatto a reti pubbliche per il calcolo distribuito.
Disponibilità: Il sistema di autenticazione Kerberos non viene distribuito insieme a Postgres. Le versioni di Kerberos sono solitamente rese disponibili, come software opzionale, dal rivenditore del sistema operativo. In aggiunta, una distribuzione del codice sorgente può essere ottenuta direttamente dal Progetto Athena del MIT.
Nota: Potreste voler ottenere la versione del MIT anche se il vostro rivenditore ne fornisce una sua versione; infatti le versioni di qualche rivenditore possono essere state storpiate o rese non interoperanti con la versione del MIT.
Le richieste di informazioni, riguardanti il 'vostro' Kerberos, dovrebbero essere rivolte al vostro rivenditore, o al Progetto Athena del MIT. Notate che le FAQL (Frequently-Asked Questions Lists) sono pubblicate periodicamente sulla mailing list di Kerberos (mandate una mail per iscrivervi), e sui news group USENET.
Installazione: L'installazione di Kerberos è descritta in dettaglio nelle 'Kerberos Installation Notes'. Assicuratevi che il file chiave del server (srvtab o keytab) sia leggibile, in un modo o nell'altro, dall'account di Postgres. Postgres, ed i suoi client, possono essere compilati per usare o la Version 4, o la Version 5 dei protocolli Kerberos MIT; per farlo, si imposta la variabile KRBVERS, nel file src/Makefile.global, al valore corretto. Potete anche cambiare la collocazione in cui Postgres si aspetta di trovare le librerie associate, i file header e il file chiave del server. A compilazione completata, Postgres deve essere registrato come un servizio di Kerberos. Leggete le 'Kerberos Operations Notes', e le relative pagine di manuale, per avere maggiori dettagli sulla registrazione dei servizi.
Funzionamento: Dopo le operazioni di installazione, Postgres dovrebbe operare in tutti i modi consueti per un normale servizio Kerberos. Per i dettagli sull'uso dell'autenticazione, leggete la PostgreSQL User's Guide, e precisamente le sezioni relative a postmaster e psql. Nella modalità di connessione della Version 5 di Kerberos, sono state adottate le seguenti convenzioni sulla nomenclatura degli utenti e dei servizi (vedere anche la tabella più sotto):
Tabella: Esempi di Parametri di Kerberos ------------------------------------------------------ Parametro Esempio ------------------------------------------------------ user frew@S2K.ORG user aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG host postgres_dbms/ucbvax@S2K.ORG ------------------------------------------------------