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 hostadatabase- 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 hesloreject – odmítneme připojení z adresy nebo rozsahu
scram-sha-256 – ověření heslamd5 – zastaralé, nepoužívatpassword – heslo se od klienta posílá v otevřeném tvaru, nepoužívatgss – 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íč).