Jeden z nejdůležitějších konfiguračních souborů v databázích PostgreSQL je bezesporu soubor pg_hba.conf.
Jsou v něm údaje o uživatelích oprávněných přihlašovat se do databází daného PostgreSQL serveru.
V článku si soubor popíšeme a ukážeme si, jak jej nastavit.
Standardně používám PostgreSQL na Linuxu, proto vycházím z tohoto prostředí. Ale na Windows bude jeho umístění v podstatě podobné, a to v cestě definované proměnnou prostředí PGDATA.
Takže jeho umístění máme v:
$PGDATA/pg_hba.conf
Co je soubor pg_hba.conf
Soubor pg_hba.conf je hlavní konfigurační soubor pro autentizaci (ověřování) uživatelů v databázích PostgreSQL. Jeho klíčové vlastnosti jsou:
- Řízení přístupu - funguje jako firewall pro PostgreSQL. Definuje oprávnění pro lokální i vzdálená připojení do databáze. U vzdálených připojení je možné definovat konkrétní IP adresu, ze které lze přistupovat.
- Struktura pravidel - pravidla se vyhodnocují shora dolů. První pravidlo, které vyhovuje určí, zda je uživateli přístup povolen nebo zamítnut.
- Formát řádku - každý řádek obsahuje - typ připojení, databázi, uživatele, IP adresu/masku a metodu ověření.
- Metody ověření:
- trust - vždy povolit
- reject - vždy zamítnout
- md5/scram-sha-256 - zadat heslo
- peer/ident - dle operačního systému (vezme ověření z operačního systému)
- Aplikace změn - po úpravě souboru je třeba znovu načíst konfigurací - buď příkazem pg_ctl reload nebo SQL SELECT pg_reload_conf();
Příklady
Po instalaci je soubor pg_hba.conf ve výchozím stavu:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
A tak jej upravíme dle našich potřeb. Ideální je všechny trust záznamy odstranit a nebo zakomentovat znakem #.
Finální stav může vypadat např. nějak takto:
# TYPE DATABASE USER ADDRESS METHOD
local all postgres ident
local doodle admin scram-sha-256
host doodle admin 127.0.0.1/32 scram-sha-256
host doodle admin 10.1.4.43/32 scram-sha-256
host doodle admin 0.0.0.0/0 scram-sha-256
host doodle dohled 172.19.227.253/32 scram-sha-256
#
# USERS
#
local doodle msika scram-sha-256
host doodle msika 0.0.0.0/0 scram-sha-256
host doodle lojza 172.19.15.110 scram-sha-256
host doodle eda 192.168.56.1 scram-sha-256
Popis položek pg_hba.conf
Jednotlivé sloupce v souboru jsou - TYPE DATABASE USER ADDRESS AUTH-METHOD
Kde:
- type - nastavuje lokální nebo vzdálené připojení
- database - do které databáze se může uživatel připojit (buď jméno DB nebo
allpro všechny DB) - user - jméno uživatele
- address - buď jedna adresa nebo celý rozsah, také IPv6 (v případě místního připojení ponechat prázdné)
- auth-method - asi nejdůležitější parametr
- trust - bez nutnosti ověřování hesla (nepoužívat)
- reject - odmítne připojení daného řádku
- md5 - zastaralé šifrování hesla (nepoužívat)
- scram-sha-256 - ověření hesla (bezpečné)
- password - heslo se posílá v plain textu (nepoužívat)
- gss - SSO - při LDAP apod.
- ident - UNIXová služba ident
- peer - ověření přes UNIX socket
- ldap - pouze LDAP bez SSO
- radius - ověření přes Radius server
- cert - ověření přes SSL certifikát
- pam - ověřovací Linux služba PAM
- bsd - ověřovací služba FreeBSD apod.
- oauth - autentizační služba Google
Co vím z praxe, tak nejčastěji se používají autentizace trust, peer, ident a scram-sha-256. Ostatní uvádím hlavně pro úplnost, ale nevylučuji, že je v některých firmách (možná i tady u nás) používají.
Soubor pg_hba.conf je mocný nástroj, jímž můžeme řídit přístupy do databáze na našem serveru a při použití šifrování scram-sha-256 je to i velmi bezpečné. Navíc možnost určení konkrétních IP nebo rozsahů IP adres zajišťuje bezpečný provoz našich databází.