Configuring Authentication

1. Understanding pg_hba.conf

ColumnValues
TYPElocal, host, hostssl, hostnossl, hostgssenc
DATABASEname, all, sameuser, replication
USERname, all, +group
ADDRESSCIDR, hostname, samehost, samenet
METHODtrust, reject, scram-sha-256, md5, peer, ident, cert, ldap, radius, gss
Warning: Rules match top-down; first match wins. Place specific rules before broad ones.

2. Configuring Local Connections

# TYPE  DATABASE  USER       METHOD
local   all       postgres   peer
local   all       all        scram-sha-256
MethodBehavior
peerMatch OS username to DB role
trustNo password (DEV ONLY)
scram-sha-256Password challenge over Unix socket

3. Configuring TCP/IP Connections

# TYPE  DATABASE  USER  ADDRESS         METHOD
host    all       all   127.0.0.1/32    scram-sha-256
host    all       all   ::1/128         scram-sha-256
host    all       all   10.0.0.0/8      scram-sha-256
hostssl prod      app   0.0.0.0/0       scram-sha-256
TYPEWhen To Use
hostEither SSL or non-SSL
hostsslSSL required
hostnosslPlain TCP only

4. Using MD5 Authentication

AspectDetail
StatusLEGACY superseded by SCRAM
Storagemd5(password + username)
MigrateALTER USER x PASSWORD 'new'; with password_encryption=scram-sha-256

5. Using SCRAM-SHA-256 Authentication

SHOW password_encryption;          -- should be 'scram-sha-256' (default)
ALTER SYSTEM SET password_encryption = 'scram-sha-256';
ALTER USER alice PASSWORD 'S3cret!';   -- stored as SCRAM verifier
PropertyValue
Default sincePostgreSQL 14
SaltedYes (per user)
Channel bindingSupported (SCRAM-SHA-256-PLUS)

6. Using Peer Authentication

PropertyDetail
ScopeLocal socket only
MechanismOS uid → role via pg_ident.conf
Map examplemap=app deploy app_user
# pg_hba.conf
local   all   all   peer map=usermap
# pg_ident.conf
# MAPNAME  SYSTEM-USERNAME  PG-USERNAME
usermap    deploy           app_user

7. Using Certificate Authentication

hostssl all all 0.0.0.0/0 cert clientcert=verify-full
RequirementSetting
sslon
ssl_cert_fileServer cert (PEM)
ssl_key_fileServer private key
ssl_ca_fileTrusted CA bundle
Client CNMust equal DB role name

8. Configuring LDAP Authentication

host all all 0.0.0.0/0 ldap \
  ldapserver=ldap.example.com \
  ldapprefix="uid=" ldapsuffix=",ou=People,dc=example,dc=com"

# Search+bind mode
host all all 0.0.0.0/0 ldap \
  ldapserver=ldap.example.com ldapbasedn="dc=example,dc=com" \
  ldapbinddn="cn=svc,dc=example,dc=com" ldapbindpasswd="..." \
  ldapsearchattribute="uid"

9. Configuring RADIUS Authentication

ParameterPurpose
radiusserversComma-separated host list
radiussecretsShared secret per server
radiusportsDefault 1812
radiusidentifiersNAS identifier

10. Setting Connection Host Restrictions

PatternEffect
samehostMatch server's own IPs
samenetMatch any IP in server's subnets
.example.comSuffix DNS match (reverse-DNS, slow)
10.0.0.0/24CIDR block
rejectExplicit deny (place above broader allows)

11. Reloading Authentication Config

SELECT pg_reload_conf();
-- Inspect parsed rules
SELECT line_number, type, database, user_name, address, auth_method, error
  FROM pg_hba_file_rules;
Note: pg_hba.conf reloads without restart; syntax errors keep the previous valid ruleset active.