pg_hba.conf è un file di configurazione di PostgreSQL (vedi anche postgresql.conf) che controlla quali indirizzi IP e utenti possono connettersi al database.
Esempio
| TYPE | DATABASE | USER | ADDRESS | METHOD |
|---|---|---|---|---|
local |
all | postgres | — | peer |
local |
all | all | — | scram-sha-256 |
host |
all | all | 127.0.0.1/32 | trust |
host |
all | all | ::1/128 | trust |
host |
all | all | 10.0.0.0/8 | scram-sha-256 |
hostssl |
all | all | 0.0.0.0/0 | scram-sha-256 |
host |
replication | replicator | 192.168.1.100/32 | scram-sha-256 |
Campi
type
Definisce il tipo di connessione:
| Valore | Quando si usa |
|---|---|
local |
Connessioni via socket Unix, solo sulla stessa macchina. Non usa TCP/IP. Tipico per psql da terminale. |
host |
Connessioni TCP/IP, con o senza SSL. |
hostssl |
Solo connessioni TCP/IP con SSL. Rifiuta le non cifrate. |
hostnossl |
Solo connessioni TCP/IP senza SSL. Raro, usato in reti già cifrate a livello infrastrutturale. |
database
Definisce il database di destinazione:
| Valore | Quando si usa |
|---|---|
all |
Qualsiasi database. |
<nome_db> |
Un database specifico. |
replication |
Connessioni di replica streaming. |
db1,db2 |
Lista di database separati da virgola. |
user
Definisce l'utente o il gruppo di utenti che può accedere:
| Valore | Quando si usa |
|---|---|
all |
Qualsiasi utente. |
<nome_utente> |
Un utente specifico. |
+nome_gruppo |
Tutti i membri di un ruolo/gruppo. |
user1,user2 |
Lista di utenti separati da virgola. |
address
Definisce l'indirizzo IP o il range di indirizzi da cui è consentita la connessione. Non si usa per le righe di tipo local, che non passano per TCP/IP.
| Valore | Quando si usa |
|---|---|
127.0.0.1/32 |
Solo localhost IPv4 (un IP esatto). |
::1/128 |
Solo localhost IPv6. |
192.168.1.0/24 |
Un'intera subnet (es. rete locale aziendale). |
0.0.0.0/0 |
Qualsiasi indirizzo IPv4. |
::0/0 |
Qualsiasi indirizzo IPv6. |
Il numero dopo / è la subnet mask in bit: /32 significa "solo quell'IP esatto", /24 significa una subnet di 256 indirizzi, /0 significa "tutti".
method
Definisce come viene verificata l'identità di chi si connette:
| Valore | Come funziona | Quando usarlo |
|---|---|---|
trust |
Accetta chiunque senza password. | Solo localhost in sviluppo. Mai in produzione su porte esposte. |
reject |
Rifiuta sempre la connessione. | Blacklist di IP o utenti specifici. |
password |
Password trasmessa in chiaro. | Solo localhost in sviluppo Mai in produzione su porte esposte — usare scram-sha-256 o md5 al suo posto. |
md5 |
Password hashata con MD5. | Legacy, ancora diffuso ma superato da scram-sha-256. |
scram-sha-256 |
Autenticazione SCRAM con password. Default da PostgreSQL 14. | Standard attuale, da preferire sempre. |
peer |
Usa l'identità dell'utente OS. Solo per connessioni local. |
Connessioni locali su Linux/macOS. |
ident |
Come peer ma per TCP/IP, tramite un server ident. |
Reti locali controllate. |
cert |
Autentica tramite certificato SSL client. | Ambienti enterprise |