PostgreSQL pg_hba.conf

O konfiguraci databáze PostgreSQL jsem tady napsal celý seriál a několik dalších článků. Nikdy jsem se však nevěnoval souboru pg_hba.conf, což je něco jako firewall přímo pro PostgreSQL.

Při zakládání uživatele v databázi PostgreSQL volíme samozřejmě velmi kvalitní heslo, nebo se lze přihlašovat pomocí klíčů podobně jako v případě ssh. Jenže to nemusí stačit. Konfigurační soubor pg_hba.conf toho umí víc.

Jeden řádek souboru vypadá takto:

host database user address auth-method  [auth-options]

Kde:
host - nastavujeme připojení z hosta
database - do které databáze se chceme připojovat
user - uživatel pro připojení
address - může být jedna adresa nebo celý rozsah. IPv6 je také podporované a preferované.
auth-method - asi nejdůležitější parametr
[auth-options] - další parametry

Většina parametrů je asi jasná z popisu výše. Důležitý parametr auth-method může mít jednu z hodnot:
trust – věříme celé adrese nebo rozsahu, není potřeba ověřovat heslo
reject – odmítneme připojení z adresy nebo rozsahu
scram-sha-256 – ověření hesla
md5 – zastaralé, nepoužívat
password – heslo se od klienta posílá v otevřeném tvaru, nepoužívat
gss – Single Sign On – například při použití autentizace pomocí LDAP.
ident – UNIXová služba identd.
peer – Pro ověření přes UNIX socket – toto je preferovaná varianta, není třeba nastavovat heslo ani nastavit síť pro PostgreSQL, uživatelé jsou z UNIXu. Ideální pro malé lokální služby.
ldap – LDAP mimo možnost Single Sign On, uživatelé a hesla se ověřují pomocí LDAP.
radius – Ověřování přes Radius server.
cert – SSL Certifikáty, mimo rozsah tohoto článku.
pam – Linuxová služba PAM.
bsd – Služba z FreeBSD apod.
oauth – Autentizační služba Google.

Řádků v soubor pg_hba.conf může být více a vyhodnocují se dle pořadí.

Takže pro lokální služby platí řádek local a lze nastavit trust nebo peer. Trust lze také nastavit pro ostatní servery na lokální síti, pokud appka běží na mnoha strojích. A pro připojení z internetu nastavíme jednotlivé vzdálené adresy.

Osobně nastavuji pouze připojení přes UNIX sockety, protože mé služby jsou malé a výkon serverů je dostatečný. Každý server je jedna databáze a tedy není co ověřovat. Funguje to tedy stejně jako v UNIXu, odkud PostgreSQL pochází, jednotlivé služby mají oddělené systémové uživatele, klidně bez hesla (nelze se připojit ani na terminál ani na ssh) a dostanou se pouze do své databáze. Tím odpadá hospodaření s hesly. Pro připojení z internetu naopak silné heslo potřebujeme (nebo klíč).

,