Breve introduzione a PostgreSQL - Parte 2

di Simone Brunozzi

Seconda parte di una breve introduzione che riguarda installazione, configurazione ed utilizzo di PostgreSQL.

Breve introduzione a PostgreSQL - Parte 2

Installazione di PostgreSQL
L'installazione di PostgreSQL è praticamente identica sia sotto Debian che sotto Ubuntu.
Viene lanciato il classico comando per l'installazione:

root@localhost:~# aptitude install postgresql

L'installazione procederà, chiedendo di rispondere ad alcune domande (solitamente è sufficiente acconsentire). E' importante sapere alcune cose:
Data directory: tutti i dati vengono salvati in /var/lib/postgres/data come default.
Data removal policy: per default, quando rimuovi PostgreSQL, i dati vengono preservati.
Locale (inteso nel senso di "impostazioni locali" o "localizzate"): deve essere scelto in modo da accettare la codifica di caratteri che utilizzerai nel tuo sistema.
Date (inteso come data temporale): nel nostro caso, sceglieremo un formato europeo (gg-mm-aaaa) invece del classico formato americano (mm-gg-aaaa).
In questa fase, postgres è un utente del DBMS (il "root"), ma NON del sistema operativo (anche se può essere certamente aggiunto in seguito). Pertanto, l'unico modo per accedere al nostro DBMS è diventare utente postgres e lanciare il comando psql (per uscire, serve q):

root@localhost:~# su - postgres
postgres@localhost:~$ psql template1
template1=# q
postgres@localhost:~$

template1 è un database che viene creato in fase di installazione.
L'utilità di template1 è presto detta: per gestire PostgreSQL servono molte informazioni riguardanti utenti, basi di dati, ed altro; quale miglior cosa che salvare queste informazioni in un database interno? Il database template1 serve appunto a questo.
Importante: "database" è una collezione di dati, "DBMS" è un sistema per gestire tali dati, come appunto PostgreSQL; molto spesso il termine "database" viene invece inteso erroneamente come DBMS.
Per poter gestire le politiche di accesso di postgres o di altri utenti, è bene aprire ed editare il file /etc/postgresql/pg_hba.conf (/etc/postgresql/7.4/main/pg_hba.conf in Ubuntu). In fondo al file si trovano delle righe di configurazione, che possono avere uno di questi sette formati:

local database user authentication-method [authentication-option]
host database user IP-address IP-mask authentication-method [authentication-option]
hostssl database user IP-address IP-mask authentication-method [authentication-option]
hostnossl database user IP-address IP-mask authentication-method [authentication-option]
host database user IP-address/IP-masklen authentication-method [authentication-option]
hostssl database user IP-address/IP-masklen authentication-method [authentication-option]
hostnossl database user IP-address/IP-masklen authentication-method [authentication-option]

Ecco degli esempi di configurazione di pg_hba.conf, sufficienti per chiarirne l'utilizzo:

# Permettmo ad ogni utente del sistema locale di connettersi a qualsiasi database, usando # qualsiasi nome utente, tramite Unix-domain sockets (il default per le connessioni locali) # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD local all all trust # Stessa cosa di sopra, usando però connessioni loopback TCP/IP. # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host all all 127.0.0.1 255.255.255.255 trust # Stessa cosa di sopra, usando una maschera CIDR # TYPE DATABASE USER IP-ADDRESS/CIDR-mask METHOD host all all 127.0.0.1/32 trust # Permetto ad ogni utente da qualsiasi host con IP 192.168.93.x di connettersi al database # "template1" con lo stesso nome utente che viene riportato per quella connessione # (tipicamente il nome utente Unix, o nome utente di sistema) # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host template1 all 192.168.93.0 255.255.255.0 ident sameuser # Stessa cosa di sopra, usando una maschera CIDR # TYPE DATABASE USER IP-ADDRESS/CIDR-mask METHOD host template1 all 192.168.93.0/24 ident sameuser # Permetto ad un utente da 192.168.12.10 di connettersi al database # "template1" se viene fornita correttamente la password. # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host template1 all 192.168.12.10 255.255.255.255 md5 # In assenza di linee precedenti con inizio "host", verranno rifiutate connessioni da # 192.168.54.1 (dato che questo valore viene confrontato per primo), ma permesse connessioni # di tipo "Kerberos V" da qualsiasi altro host su internet. La IP-MASK a zero indica che nessun # bit dell'indirizzo IP dell'host viene considerato, e che quindi uguaglia qualsiasi host. # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host all all 192.168.54.1 255.255.255.255 reject host all all 0.0.0.0 0.0.0.0 krb5 # Permetto agli utenti da 192.168.x.x di connettersi a qualsiasi database, se superano # il controllo di identità. Se, ad esempio, ident comunica che l'utente è giovanni e che # la richiesta di connessione a PostgreSQL è come utente "ospite", la connessione passa # se in pg_ident.conf è presente una riga con mappatura "omicron" in cui a "giovanni" # è permesso connettersi come utente "ospite". # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host all all 192.168.0.0 255.255.0.0 ident omicron # se queste sono le uniche linee per connessioni locali, permettono agli utenti locali di # connettersi solo verso i loro propri database (con lo stesso nome del loro nome utente), # fatta eccezione per amministratori e membri del gruppo "support" che invece possono # connettersi a qualsiasi database. Il file $PG_DATA/admins contiene una lista di questi utenti. # Le password sono richieste in qualsiasi caso. # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD local sameuser all md5 local all @admins md5 local all +support md5 # Le due linee sopra possono essere combinate in una unica linea: # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD local all @admins,+support md5 # La colonna "database" può anche usare liste e nomi di file, ma non gruppi: # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD local db1,db2,@demodbs all md5

Per qualsiasi ulteriore informazione sull'utilizzo del file pg_hba.conf, vi rimando qui.

Una volta apportate modifiche al file pg_hba.conf, è necessario riavviare il daemon di PostgreSQL, chiamato postmaster (usa pstree per visualizzarlo) con questo comando:

root@localhost:~# /etc/init.d/postgresql restart

A questo punto i normali utenti di sistema possono collegarsi al database template1 ma, non esistendo utenti del DBMS (che, ricordo, è un qualcosa di diverso dagli utenti di sistema), non potrebbero fare granchè. E' quindi necessario creare almeno un utente del DBMS, lanciando il comando createuser da utente postgres (l'utente utenteweb potrà creare database, ma non potrà creare nuovi utenti):

postgres@localhost:~$ createuser utenteweb
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER
postgres@localhost:~$

Se ci colleghiamo a template1 come utente postgres, possiamo modificare la password di accesso dell'utente utenteweb:

postgres@localhost:~$ psql template1
Welcome to psql 7.4.8, the PostgreSQL interactive terminal.
...

template1=# alter user utenteweb password 'pippo';
ALTER USER
template1=#

L'utente utenteweb è stato creato appositamente per essere utilizzato da scripts accessibili attraverso internet, che abbiano la necessità di collegarsi ad un qualche database.
Per permettere connessioni TCP/IP, è necessario modificare pg_hba.conf come segue (bisogna anche ricordarsi di riavviare PostgreSQL dopo ogni modifica a tale file):

#TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host web webuser 127.0.0.1 255.255.255.255 md5

Creiamo ora un database da linea di comando:

postgres@localhost:~$ createdb -h localhost -U utenteweb -W base-dati-web

L'opzione -W forza la richiesta di password, mentre l'opzione -h forza l'utilizzo di una connessione TCP/IP. L'installazione di un PostgreSQL funzionante è ora completa.

Per connetterci, infine, possiamo usare un comando di questo tipo:

utente@localhost:~$ psql nome-database nome-utente

Licenza “Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License” rilasciato da Simone Brunozzi (www.ubuntu.it | www.simpler.it | simone.brunozzi aT gmail.com).

UTILITA' E LINKS CORRELATI:

- Directory: Database
- Directory: Open Source

- http://www.ubuntu.it/
- http://simpler.wordpress.com/


AUTORE DEL TESTO
Simone Brunozzi
http://simpler.wordpress.com/

Pubblicato il: 14/11/2006