🔝 Retour au Sommaire
L'authentification dans PostgreSQL est contrôlée par un fichier de configuration crucial appelé pg_hba.conf (HBA signifie "Host-Based Authentication" ou "Authentification basée sur l'hôte"). Ce fichier est le gardien de votre base de données : il définit qui peut se connecter, depuis où, à quelle base de données, et comment ils doivent s'authentifier.
Pour les débutants : Imaginez pg_hba.conf comme la liste des règles de sécurité à l'entrée d'un immeuble. Chaque ligne dit : "Si tu viens de tel endroit, pour visiter tel appartement, avec telle identité, alors tu dois montrer tel type de badge". PostgreSQL vérifie ces règles dans l'ordre pour décider si une connexion est autorisée.
┌─────────────────────────────────────────────────────────────┐
│ FLUX DE CONNEXION │
└─────────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────┐
│ Client │ │PostgreSQL│
│ (psql) │ │ Server │
└────┬─────┘ └────┬─────┘
│ │
│ 1. Demande de connexion │
│ (user=alice, db=mydb, from=192.168.1.100) │
├──────────────────────────────────────────────►│
│ │
│ 2. Lecture pg_hba.conf
│ Recherche d'une règle
│ correspondante
│ │
│ 3. Règle trouvée ?
│ ├─ OUI → Quelle méthode ?
│ └─ NON → REJET
│ │
│ 4. Demande d'authentification │
│ (selon la méthode : password, cert, etc.) │
│◄──────────────────────────────────────────────┤
│ │
│ 5. Fournit les credentials │
├──────────────────────────────────────────────►│
│ │
│ 6. Vérification
│ ├─ OK → Connexion accordée
│ └─ KO → REJET
│ │
│ 7. ✅ Connexion établie (ou ❌ refusée) │
│◄──────────────────────────────────────────────┤
│ │
- Qui peut se connecter (utilisateur PostgreSQL)
- D'où ils peuvent se connecter (adresse IP, réseau)
- À quoi ils peuvent accéder (base de données spécifique)
- Comment ils doivent s'authentifier (méthode)
Sans pg_hba.conf, PostgreSQL ne peut pas déterminer si une connexion doit être acceptée ou refusée.
Méthode 1 : Depuis PostgreSQL
-- Se connecter à PostgreSQL et demander l'emplacement
SHOW hba_file;
-- Résultat typique :
-- hba_file
-- ------------------------------------
-- /var/lib/postgresql/data/pg_hba.confMéthode 2 : Emplacements Standards par Système d'Exploitation
| Système | Chemin Typique |
|---|---|
| Linux (Debian/Ubuntu) | /etc/postgresql/18/main/pg_hba.conf |
| Linux (RedHat/CentOS) | /var/lib/pgsql/18/data/pg_hba.conf |
| Linux (Docker) | /var/lib/postgresql/data/pg_hba.conf |
| macOS (Homebrew) | /opt/homebrew/var/postgresql@18/pg_hba.conf |
| Windows | C:\Program Files\PostgreSQL\18\data\pg_hba.conf |
Méthode 3 : Depuis la ligne de commande
# Linux/macOS
sudo -u postgres psql -c "SHOW hba_file;"
# Ou chercher dans le système
find / -name pg_hba.conf 2>/dev/nullLe fichier pg_hba.conf doit être :
- Lisible par l'utilisateur système qui exécute PostgreSQL (généralement
postgres) - Non modifiable par les utilisateurs non autorisés
# Vérifier les permissions
ls -l /var/lib/postgresql/data/pg_hba.conf
# Résultat attendu :
# -rw------- 1 postgres postgres 4640 Nov 22 10:30 pg_hba.conf
# ↑ ↑ ↑
# 600 propriétaire groupeChaque ligne de pg_hba.conf (hors commentaires) définit une règle d'authentification avec la structure suivante :
TYPE DATABASE USER ADDRESS METHOD [OPTIONS]
Visualisation :
┌────────┬──────────┬──────┬──────────┬────────┬──────────┐
│ TYPE │ DATABASE │ USER │ ADDRESS │ METHOD │ OPTIONS │
├────────┼──────────┼──────┼──────────┼────────┼──────────┤
│ local │ all │ all │ - │ peer │ - │
│ host │ mydb │alice │127.0.0.1 │ scram │ - │
│ hostssl│ all │ all │ 0.0.0.0/0│ scram │ - │
└────────┴──────────┴──────┴──────────┴────────┴──────────┘
Définit comment le client se connecte au serveur.
| Type | Description | Cas d'usage |
|---|---|---|
| local | Connexion Unix socket (même machine) | Connexions locales via /var/run/postgresql/.s.PGSQL.5432 |
| host | Connexion TCP/IP (avec ou sans SSL) | Connexions réseau (local ou distant) |
| hostssl | Connexion TCP/IP avec SSL obligatoire | Connexions sécurisées uniquement |
| hostnossl | Connexion TCP/IP sans SSL | Connexions non chiffrées (déconseillé) |
| hostgssenc | Connexion avec chiffrement GSSAPI | Environnements Kerberos |
Exemples :
# Connexion locale (Unix socket)
local all postgres peer
# Connexion réseau (TCP/IP)
host all all 127.0.0.1/32 scram-sha-256
# Connexion SSL obligatoire
hostssl all all 0.0.0.0/0 scram-sha-256
Définit quelle(s) base(s) de données la règle s'applique.
| Valeur | Signification |
|---|---|
| all | Toutes les bases de données |
| nomdb | Une base spécifique (exemple: mydb, production) |
| @fichier | Liste de bases dans un fichier |
| sameuser | Base portant le même nom que l'utilisateur |
| samerole | Bases accessibles aux rôles de l'utilisateur |
| replication | Connexions de réplication |
| db1,db2,db3 | Plusieurs bases (séparées par virgules) |
Exemples :
# Toutes les bases
local all postgres peer
# Base spécifique
host production appuser 10.0.1.0/24 scram-sha-256
# Plusieurs bases
host db1,db2,db3 alice 192.168.1.100 scram-sha-256
# Réplication
host replication replicator 10.0.2.0/24 scram-sha-256
# Base = username
local sameuser all peer
Définit quel(s) utilisateur(s) PostgreSQL la règle s'applique.
| Valeur | Signification |
|---|---|
| all | Tous les utilisateurs |
| username | Un utilisateur spécifique |
| @fichier | Liste d'utilisateurs dans un fichier |
| +groupname | Membres d'un groupe/rôle |
| user1,user2 | Plusieurs utilisateurs (séparés par virgules) |
Exemples :
# Tous les utilisateurs
host all all 127.0.0.1/32 scram-sha-256
# Utilisateur spécifique
local all postgres peer
# Groupe d'utilisateurs
host all +developers 10.0.1.0/24 scram-sha-256
# Plusieurs utilisateurs
host mydb alice,bob,charlie 192.168.1.0/24 scram-sha-256
Définit d'où la connexion peut provenir. Non utilisé pour local.
Formats supportés :
| Format | Exemple | Signification |
|---|---|---|
| Adresse IP/CIDR | 192.168.1.100/32 |
Une IP spécifique (/32) |
| Réseau/CIDR | 10.0.0.0/8 |
Un réseau entier |
| all | 0.0.0.0/0 |
N'importe quelle adresse IPv4 |
| all | ::/0 |
N'importe quelle adresse IPv6 |
| Hostname | server.company.com |
Résolution DNS (lent, déconseillé) |
| samehost | - | Même machine (localhost) |
| samenet | - | Même sous-réseau |
Exemples :
# Localhost uniquement
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
# Réseau local
host all all 192.168.1.0/24 scram-sha-256
# Réseau d'entreprise complet
host all all 10.0.0.0/8 scram-sha-256
# N'importe où (ATTENTION : dangereux sans SSL)
hostssl all all 0.0.0.0/0 scram-sha-256
# Même machine (samehost)
host all all samehost scram-sha-256
192.168.1.100/32 → Une seule IP (192.168.1.100)
192.168.1.0/24 → 256 IPs (192.168.1.0 à 192.168.1.255)
10.0.0.0/8 → 16,777,216 IPs (10.0.0.0 à 10.255.255.255)
0.0.0.0/0 → Toutes les IPv4
Définit comment l'utilisateur doit prouver son identité. Les méthodes détaillées sont couvertes dans les sections suivantes (16.2.1, 16.2.2, 16.2.3), mais voici un aperçu :
| Méthode | Sécurité | Description Brève |
|---|---|---|
| trust | Pas d'authentification (dangereux) | |
| reject | N/A | Refuser la connexion |
| scram-sha-256 | ✅ Forte | Standard moderne (recommandé) |
| md5 | Déprécié (à éviter) | |
| password | ❌ Nulle | Obsolète (à éviter) |
| peer | ✅ Moyenne | User système = user PostgreSQL |
| ident | ✅ Moyenne | Via serveur ident |
| cert | ✅ Très forte | Certificats SSL/TLS |
| ldap | ✅ Forte | Active Directory |
| oauth | ✅ Forte | OAuth 2.0 (PG 18+) |
Exemples :
# Méthode moderne sécurisée
hostssl all all 0.0.0.0/0 scram-sha-256
# Connexion locale sans mot de passe (peer)
local all postgres peer
# Refuser explicitement
host all banned_user 0.0.0.0/0 reject
Certaines méthodes acceptent des options supplémentaires.
Exemples :
# LDAP avec options
host all all 0.0.0.0/0 ldap ldapserver=ad.company.com ldapport=636 ldaptls=1
# SCRAM avec channel binding
hostssl all all 0.0.0.0/0 scram-sha-256 scram_channel_binding=require
# OAuth avec options
host all all 0.0.0.0/0 oauth oauth_issuer_url="https://auth.company.com"
PostgreSQL lit le fichier pg_hba.conf ligne par ligne, de haut en bas, et s'arrête à la première règle qui correspond.
Analogie : C'est comme une liste de filtres dans votre boîte email. Le premier filtre qui correspond s'applique, et les suivants sont ignorés.
# pg_hba.conf
# Ligne 1 : Admin local
local all postgres peer
# Ligne 2 : Développeurs depuis le réseau local
host all +developers 192.168.1.0/24 scram-sha-256
# Ligne 3 : Utilisateur Alice depuis n'importe où
hostssl all alice 0.0.0.0/0 scram-sha-256
# Ligne 4 : Tous les autres refusés
host all all 0.0.0.0/0 reject
Scénarios de connexion :
Scénario 1 :
Connexion : local, user=postgres, db=mydb
→ Correspond à la ligne 1
→ Méthode : peer
→ ✅ Accepté si user système = postgres
Scénario 2 :
Connexion : host, user=bob (membre de developers), from=192.168.1.50, db=testdb
→ Ne correspond PAS à la ligne 1 (pas local)
→ Correspond à la ligne 2 (IP dans 192.168.1.0/24 + membre de developers)
→ Méthode : scram-sha-256
→ ✅ Accepté si mot de passe correct
Scénario 3 :
Connexion : hostssl, user=alice, from=203.0.113.10, db=production
→ Ne correspond PAS à la ligne 1 (pas local)
→ Ne correspond PAS à la ligne 2 (IP hors réseau local)
→ Correspond à la ligne 3 (user=alice, SSL)
→ Méthode : scram-sha-256
→ ✅ Accepté si mot de passe correct
Scénario 4 :
Connexion : host, user=charlie, from=203.0.113.20, db=mydb
→ Ne correspond à aucune ligne 1-3
→ Correspond à la ligne 4 (catch-all)
→ Méthode : reject
→ ❌ REFUSÉ explicitement
❌ Configuration Incorrecte :
# ERREUR : Règle trop permissive en premier
host all all 0.0.0.0/0 scram-sha-256
# Cette règle ne sera JAMAIS atteinte
host all +admins 192.168.1.0/24 cert
Ici, la deuxième ligne est inutile car toutes les connexions correspondent déjà à la première ligne.
✅ Configuration Correcte :
# Règles spécifiques d'abord
host all +admins 192.168.1.0/24 cert
# Règle générale après
host all all 0.0.0.0/0 scram-sha-256
Principe d'or : Toujours placer les règles les plus spécifiques en premier, et les plus générales à la fin.
# PostgreSQL Client Authentication Configuration File
# ===================================================
#
# Format : TYPE DATABASE USER ADDRESS METHOD [OPTIONS]
# ──────────────────────────────────────────────────────────
# 1. CONNEXIONS LOCALES (Unix sockets)
# ──────────────────────────────────────────────────────────
# Admin local : peer (user système = user PostgreSQL)
local all postgres peer
# Autres utilisateurs locaux : peer également
local all all peer
# ──────────────────────────────────────────────────────────
# 2. CONNEXIONS LOCALHOST (TCP/IP sur 127.0.0.1)
# ──────────────────────────────────────────────────────────
# IPv4 localhost
host all all 127.0.0.1/32 scram-sha-256
# IPv6 localhost
host all all ::1/128 scram-sha-256
# ──────────────────────────────────────────────────────────
# 3. RÉPLICATION (Streaming Replication)
# ──────────────────────────────────────────────────────────
# Réplication depuis les standby servers
host replication replicator 10.0.2.10/32 scram-sha-256
host replication replicator 10.0.2.11/32 scram-sha-256
# ──────────────────────────────────────────────────────────
# 4. CONNEXIONS RÉSEAU INTERNE (Réseau d'entreprise)
# ──────────────────────────────────────────────────────────
# Admins : certificats obligatoires
hostssl all +admins 10.0.1.0/24 cert clientcert=verify-full
# Développeurs : SCRAM depuis le réseau dev
host all +developers 10.0.3.0/24 scram-sha-256
# Applications : comptes de service
host production app_user 10.0.4.0/24 scram-sha-256
# ──────────────────────────────────────────────────────────
# 5. CONNEXIONS VPN (Utilisateurs distants)
# ──────────────────────────────────────────────────────────
# Utilisateurs via VPN : SSL obligatoire
hostssl all all 192.168.100.0/24 scram-sha-256
# ──────────────────────────────────────────────────────────
# 6. CONNEXIONS EXTERNES (Internet)
# ──────────────────────────────────────────────────────────
# Comptes externes : SSL + SCRAM
hostssl all +external_users 0.0.0.0/0 scram-sha-256
# ──────────────────────────────────────────────────────────
# 7. RÈGLE DE REJET (Catch-all)
# ──────────────────────────────────────────────────────────
# Tout le reste est refusé explicitement
host all all 0.0.0.0/0 reject
host all all ::/0 reject
# Sauvegarder l'original
sudo cp /var/lib/postgresql/data/pg_hba.conf \
/var/lib/postgresql/data/pg_hba.conf.backup
# Éditer avec votre éditeur préféré
sudo nano /var/lib/postgresql/data/pg_hba.conf
# ou
sudo vim /var/lib/postgresql/data/pg_hba.confPostgreSQL 18 offre un outil pour valider pg_hba.conf avant de l'activer :
# Vérifier la syntaxe (ne modifie rien)
sudo -u postgres pg_ctl -D /var/lib/postgresql/data check
# Ou utiliser l'outil dédié
sudo -u postgres pg_hba_file_rules /var/lib/postgresql/data/pg_hba.confAprès modification, PostgreSQL doit recharger le fichier. Trois méthodes :
Méthode 1 : Via SQL (Recommandée)
-- Depuis une connexion PostgreSQL
SELECT pg_reload_conf();
-- Résultat :
-- pg_reload_conf
-- ----------------
-- t
-- (Pas de déconnexion des clients existants)Méthode 2 : Via pg_ctl
sudo -u postgres pg_ctl reload -D /var/lib/postgresql/dataMéthode 3 : Via systemctl (Linux)
# Reload (sans interruption)
sudo systemctl reload postgresql
# Ou
sudo service postgresql reload# ❌ À éviter (sauf si nécessaire)
sudo systemctl restart postgresql-- Voir quand le fichier a été rechargé
SELECT pg_postmaster_start_time(), pg_conf_load_time();
-- Résultat :
-- pg_postmaster_start_time | pg_conf_load_time
-- --------------------------+------------------------
-- 2025-11-22 10:00:00+00 | 2025-11-22 14:30:00+00
-- ↑ ↑
-- Démarrage Dernier reload#!/bin/bash
# test_pg_hba.sh - Tester différentes connexions
echo "=== Test 1 : Connexion locale (peer) ==="
psql -U postgres -c "SELECT current_user;"
echo "=== Test 2 : Connexion TCP localhost (SCRAM) ==="
PGPASSWORD=mypassword psql -h 127.0.0.1 -U myuser -d mydb -c "SELECT current_user;"
echo "=== Test 3 : Connexion réseau (SCRAM) ==="
PGPASSWORD=mypassword psql -h 192.168.1.10 -U appuser -d production -c "SELECT current_user;"
echo "=== Test 4 : Connexion SSL (SCRAM) ==="
PGPASSWORD=mypassword psql "host=pg.company.com user=alice dbname=mydb sslmode=require" -c "SELECT current_user;" Erreur 1 : Aucune règle correspondante
FATAL: no pg_hba.conf entry for host "192.168.1.100", user "alice", database "mydb", SSL off
Cause : Aucune ligne de pg_hba.conf ne correspond à cette connexion.
Solution : Ajouter une règle correspondante :
host mydb alice 192.168.1.100/32 scram-sha-256
Erreur 2 : Authentification échouée
FATAL: password authentication failed for user "alice"
Cause : La règle existe, mais l'authentification a échoué (mauvais mot de passe, certificat invalide, etc.).
Solution : Vérifier les credentials fournis.
Erreur 3 : SSL requis mais non fourni
FATAL: no pg_hba.conf entry for host "192.168.1.100", user "alice", database "mydb", SSL off
Cause : La règle utilise hostssl mais le client se connecte sans SSL.
Solution : Ajouter sslmode=require dans la connexion :
psql "host=pg.company.com user=alice dbname=mydb sslmode=require"# ❌ Trop permissif
host all all 0.0.0.0/0 trust
# ✅ Restrictif et sécurisé
hostssl production app_user 10.0.4.100/32 scram-sha-256
# ✅ Correct : Spécifique → Général
host all +admins 10.0.1.0/24 cert
host all +developers 10.0.2.0/24 scram-sha-256
host all all 0.0.0.0/0 reject
# ❌ Incorrect : Général en premier rend le reste inutile
host all all 0.0.0.0/0 scram-sha-256
host all +admins 10.0.1.0/24 cert # Jamais atteint !
# ✅ SSL obligatoire
hostssl all all 0.0.0.0/0 scram-sha-256
# ❌ Sans SSL (dangereux)
host all all 0.0.0.0/0 scram-sha-256
# ❌ Trop large
host all all 0.0.0.0/0 scram-sha-256
# ✅ Limité aux réseaux connus
host all all 10.0.0.0/8 scram-sha-256 # Réseau interne
hostssl all all 192.168.100.0/24 scram-sha-256 # VPN
# ❌ Répétitif
host all alice 10.0.1.0/24 scram-sha-256
host all bob 10.0.1.0/24 scram-sha-256
host all charlie 10.0.1.0/24 scram-sha-256
# ✅ Groupe
host all +developers 10.0.1.0/24 scram-sha-256
-- Créer le groupe
CREATE ROLE developers;
-- Ajouter les membres
GRANT developers TO alice, bob, charlie;# ... règles normales ...
# Catch-all : rejeter tout le reste
host all all 0.0.0.0/0 reject
host all all ::/0 reject
# ──────────────────────────────────────────────────────────
# PRODUCTION DATABASE - Accès depuis le réseau applicatif
# Contact : ops@company.com
# Dernière modification : 2025-11-22 par alice
# ──────────────────────────────────────────────────────────
host production app_user 10.0.4.0/24 scram-sha-256
# Initialiser un repo Git
cd /var/lib/postgresql/data
git init
git add pg_hba.conf postgresql.conf
git commit -m "Initial configuration"
# Après chaque modification
git add pg_hba.conf
git commit -m "Allow developers from 10.0.3.0/24"
# Voir l'historique
git log pg_hba.conf# Confiance totale en local (développement uniquement)
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
# Rejeter tout le reste
host all all 0.0.0.0/0 reject
# Admin local
local all postgres peer
# Développeurs depuis le réseau test
host all +developers 10.0.10.0/24 scram-sha-256
# Applications de test
host staging test_app_user 10.0.11.0/24 scram-sha-256
# Rejeter le reste
host all all 0.0.0.0/0 reject
# Admin local uniquement (pas de connexion distante pour postgres)
local all postgres peer
# Réplication
hostssl replication replicator 10.0.2.0/24 scram-sha-256
# Admins : Certificats + IP restreinte
hostssl all +admins 10.0.1.0/24 cert clientcert=verify-full
# Applications : Comptes dédiés + IP restreinte
hostssl production app_user 10.0.4.100/32 scram-sha-256
# Monitoring
host all monitoring_user 10.0.5.50/32 scram-sha-256
# Rejeter TOUT le reste (important!)
host all all 0.0.0.0/0 reject
host all all ::/0 reject
# postgresql.conf
# Logger toutes les tentatives de connexion
log_connections = on
log_disconnections = on
# Logger les échecs d'authentification
log_failed_connections = on # PostgreSQL 18+
# Détail des messages
log_line_prefix = '%t [%p] %u@%d from %h '
# Niveau de log
log_min_messages = info
Exemple de log avec succès :
2025-11-22 14:30:00 UTC [12345] alice@mydb from 192.168.1.100 LOG: connection authorized: user=alice database=mydb SSL enabled (protocol=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384, bits=256)
Exemple de log avec échec :
2025-11-22 14:31:00 UTC [12346] bob@production from 203.0.113.50 FATAL: no pg_hba.conf entry for host "203.0.113.50", user "bob", database "production", SSL off
Analyse :
- User : bob
- Database : production
- IP : 203.0.113.50
- SSL : Non
- Problème : Aucune règle pg_hba.conf ne correspond
Solution : Ajouter une règle ou vérifier que l'utilisateur se connecte avec SSL.
PostgreSQL 18 introduit une vue système pour voir les règles pg_hba.conf :
-- Voir toutes les règles pg_hba.conf
SELECT * FROM pg_hba_file_rules;
-- Résultat :
-- line_number | type | database | user_name | address | auth_method
-- -------------+-------+----------+-----------+------------+-------------------
-- 10 | local | {all} | {postgres}| NULL | peer
-- 15 | host | {all} | {all} | 127.0.0.1 | scram-sha-256
-- 20 | hostssl| {all} | {all} | 0.0.0.0/0 | scram-sha-256-- Trouver quelle règle s'applique à une connexion
SELECT * FROM pg_hba_file_rules
WHERE 'mydb' = ANY(database)
AND 'alice' = ANY(user_name);# Base de production : Sécurité maximale
hostssl production app_user 10.0.4.0/24 cert
# Base de développement : SCRAM standard
host development +developers 10.0.3.0/24 scram-sha-256
# Base de test : Trust en local
local test all trust
# Tenant A : Réseau dédié
host tenant_a_db tenant_a_user 10.1.0.0/16 scram-sha-256
# Tenant B : Réseau dédié
host tenant_b_db tenant_b_user 10.2.0.0/16 scram-sha-256
# Tenant C : Réseau dédié
host tenant_c_db tenant_c_user 10.3.0.0/16 scram-sha-256
# Interdire les cross-tenants
host tenant_a_db tenant_b_user 0.0.0.0/0 reject
host tenant_b_db tenant_a_user 0.0.0.0/0 reject
# Pendant la maintenance : Admins seulement
host all +admins 10.0.1.0/24 scram-sha-256
# Bloquer temporairement les utilisateurs normaux
# (Commenter/Décommenter selon besoin)
# host all +normal_users 10.0.0.0/8 scram-sha-256
# Rejeter tout le reste
host all all 0.0.0.0/0 reject
- SSL activé pour toutes les connexions réseau (
hostssl) - Pas de
trustsauf en local pour postgres - Pas de
passwordoumd5(utiliserscram-sha-256) - Adresses IP restreintes (pas de
0.0.0.0/0sans SSL) - Règle de rejet finale (
rejecten catch-all) - Admin
postgresaccessible uniquement en local - Comptes applicatifs avec IP dédiées
- Logs d'authentification activés
- Fichier versionné (Git)
- Sauvegarde de l'ancien fichier avant modification
- Tests de connexion effectués
- Documentation à jour (commentaires dans le fichier)
# Script d'audit pg_hba.conf
#!/bin/bash
echo "=== Audit pg_hba.conf ==="
# 1. Chercher les méthodes faibles
echo "❌ Méthodes faibles trouvées :"
grep -E "trust|password|md5" /var/lib/postgresql/data/pg_hba.conf
# 2. Chercher les règles trop permissives
echo "⚠️ Règles 0.0.0.0/0 trouvées :"
grep "0.0.0.0/0" /var/lib/postgresql/data/pg_hba.conf
# 3. Vérifier les connexions sans SSL
echo "⚠️ Connexions host (non-SSL) trouvées :"
grep "^host " /var/lib/postgresql/data/pg_hba.conf | grep -v "127.0.0.1"
# 4. Compter les règles
echo "📊 Nombre total de règles :"
grep -v "^#" /var/lib/postgresql/data/pg_hba.conf | grep -v "^$" | wc -l
echo "=== Fin de l'audit ==="- PostgreSQL Authentication : https://www.postgresql.org/docs/18/auth-pg-hba-conf.html
- Client Authentication : https://www.postgresql.org/docs/18/client-authentication.html
- pgAdmin : Interface graphique avec éditeur pg_hba.conf intégré
- pg_hba_file_rules : Vue système (PG 18+) pour inspecter les règles
- pg_hba.conf generator : Outils en ligne pour générer des configurations
Disponibles dans :
/usr/share/postgresql/18/pg_hba.conf.sample
Le fichier pg_hba.conf est la pierre angulaire de la sécurité de PostgreSQL. Une configuration correcte est essentielle pour :
- Protéger vos données contre les accès non autorisés
- Permettre les connexions légitimes sans friction
- Auditer et tracer les accès à la base de données
- Se conformer aux standards de sécurité (PCI-DSS, GDPR, etc.)
Points clés à retenir :
- 📝 Structure : TYPE - DATABASE - USER - ADDRESS - METHOD
- 🔢 Ordre : Premier match gagne (règles spécifiques avant générales)
- 🔄 Rechargement :
pg_reload_conf()sans redémarrage - 🔒 Sécurité : SSL + SCRAM-SHA-256 en production
- 🚫 Rejection : Toujours terminer par une règle de rejet
Dans les sections suivantes, nous explorerons en détail chaque méthode d'authentification (SCRAM, certificats, LDAP, OAuth) ainsi que les nouveautés de PostgreSQL 18 qui renforcent encore davantage la sécurité de l'authentification.
⏭️ Méthodes : trust, password, md5, scram-sha-256, cert, ldap