PostgreSQL: la prima connessione

Un volta installato PostgreSQL fa’ un tantino dannare per essere usato, è vero che il tutto è stato fatto in nome della sicurezza ma certamente non è la cosa più “user friendly” che ho incontrato in vita mia.

Il programma di installazione di PostgreSQL, tra i vari compiti che svolge, crea un utente ‘postgres’ sia a livello del sistema operativo sia a livello del server PostgreSQL.Il problema nasce quando, finita l’installazione, si cerca di collegarsi per la prima volta al nostro server, ad esempio, tramite il programma pgadmin3, il programma di installazione infatti si è scordato di comunicarci la password dell’utente postgres appena creato e, siccome il suddetto utente è anche l’unico, la situazione appare a prima vista senza uscita.

Ovviamente la soluzione c’è ed è nel metodo di autenticazione degli utenti del server PostgreSQL.

Il metodo di autenticazione viene configurato nel file:

etc/postgresql/<versione>/main/pg_hba.conf

e, per default, può autenticare utenti in modalità “peer” cioè il server PostgreSQL si fiderà dell’autenticazione fatta dal sistema operativo.

Quindi facendo il login con l’utente ‘postgres’ possiamo poi, senza digitare ulteriori password, collegarci al server PostgreSQL.

Ora è vero che non sappiamo la password dell’utente ‘postgres’ del sistema operativo ma è anche vero che, per fortuna, nel sistema operativo ci sono altri utenti che tramite i privilegi dati dal comando sudo ci permettono di impostare una nuova password per l’utente postgres. Quindi con il comando:

sudo passwd postgres

Impostiamo una nuova password per l’utente postgres che poi useremo per fare il login o, più comodamente, possiamo impersonare l’utente ‘postgres’ con:

su postgres

il sistema vi chiederà la password di ‘postgres’ appena impostata e poi avrete a disposizione la shell da cui, ad esempio, potete  collegarvi a PostgreSQL con:

psql

quello fatto fino ad adesso è facoltativo infatti possiamo raggiungere lo stesso risultato anche senza conoscere la password di postgres con il comando:

 sudo -u postgres psql

Una volta collegati al server PostgreSQL possiamo impostare finalmente la password per l’utente ‘postgres’ ATTENZIONE prima, anche se non era necessario, abbiamo impostato la password dell’utente postgres del sistema operativo adesso invece vogliamo impostare la password dell’utente che si chiama sempre ‘postgres’ ma è memorizzata nel database utenti di PostgreSQL il comando che ci serve è:

ALTER USER postgres PASSWORD '<password>';

Chiaramente al posto di <password> dovete mettere la password che volete imporrre all’utente postgres.

Ricordatevi il punto e virgola finale altrimenti psql darà l’impressione di avere eseguito il comando ma in realtà è in attesa di ulteriori input.

non è obbligatorio ma per pulizia di comportamento invito anche ad impostare la data di fine validità dell’utente a ‘infinity’ con il comando:

ALTER USER postgres VALID UNTIL 'infinity';

Per chiudere la nostra sessione di lavoro con psql usate il comando:

\q

oppure la combinazione di tasti CTRL-D

Ora che l’utente ‘postgres’ del nostro server PostgreSQL ha una password possiamo collegarci ma non dobbiamo dimenticarci di aggiornare il file di configurazione che abbiamo già nominato all’inizio dell’articolo:

etc/postgresql/<versione>/main/pg_hba.conf

per aggiungere la possibilità di collegarci da altri sistemi (host) a tutti i database (all) con tutti gli utenti (all) dalla rete indicata con il formalismo CIDR (192.168.137.0/24) con la password memorizzata nel database (md5) aggiungeremo al suddetto file la riga:

host    all             all              192.168.137.0/24        md5

consiglio di inserirla subito dopo quella di default:

local   all             all                                     peer

Se vogliamo poi dare la possibilità ad altri computer di collegarsi con il nostro server PostgreSQL dobiamo istruirlo  a servire le richieste delle schede di rete indicando l’indirizzo nel file:

/etc/postgresql/<versione>/main/postgresql.conf

nel parametro ‘listen_addresses’ cambiando il valore predefinito (tra l’altro commentato):

#listen_addresses = 'localhost'        # what IP address(es) to listen on;

nel più comodo ‘*’ (asterisco) che indica sostanzialmente di servire qualsiasi ip la macchina supporti (ovviamente abbiam oanche tolto il commento):

listen_addresses = '*'        # what IP address(es) to listen on;

Un volta salvate le modifiche, non dimenticate, per renderle operative di far ripartire il servizio con il comando:

sudo service postgresql restart

come vi avevo anticipato far partire un’installazione di PostgreSQL non è proprio user-friendly ma vedrete  che ne varrà senz’altro la pena.

Vi saluto che ho veramente sonno…

Andrea

Lascia un commento