Erreur PostgreSQL : no pg_hba.conf entry for host

FATAL:  no pg_hba.conf entry for host "10.0.0.23", user "app_user", database "appdb", SSL encryption

Bonne nouvelle d'abord : le chemin réseau fonctionne et vous avez atteint PostgreSQL. Il vous a refusé parce qu'aucune ligne de pg_hba.conf ne correspond à la combinaison du message : adresse cliente, base, utilisateur, et si la connexion utilise SSL. L'erreur vous donne les quatre — la solution consiste à écrire une règle qui leur correspond.

Ce que signifie cette erreur

pg_hba.conf est évalué de haut en bas, la première correspondance l'emporte — et une connexion qui ne correspond à aucune ligne obtient cette erreur. Chaque ligne correspond sur le type de connexion (local, host, hostssl, hostnossl), la base, l'utilisateur et l'adresse cliente, puis nomme la méthode d'authentification à appliquer.

La fin du message (« SSL encryption » / « no encryption ») compte plus qu'il n'y paraît : une ligne hostssl ne peut jamais correspondre à une tentative non-SSL, et vice versa. Si le message dit « no encryption » et que toutes vos règles disent hostssl, la solution est côté client (sslmode=require), pas dans le fichier.

Causes fréquentes

Comment la diagnostiquer

Prenez les quatre valeurs du message d'erreur et parcourez les règles avec elles :

-- La vue montre les règles telles que le serveur les a lues,
-- avec d'éventuelles erreurs d'analyse par ligne :
SELECT line_number, type, database, user_name, address, auth_method, error
FROM pg_hba_file_rules;

Vérifiez, dans l'ordre : y a-t-il une ligne dont le type de connexion correspond (SSL !) ? dont la liste de bases inclut la vôtre ? dont la liste d'utilisateurs inclut le vôtre ? dont l'adresse contient l'IP cliente du message ?

Comment la corriger

Ajoutez une règle aussi étroite que le besoin réel, puis rechargez :

# /etc/postgresql/.../pg_hba.conf — exemple : app depuis le sous-réseau privé, SSL, SCRAM
hostssl  appdb  app_user  10.0.0.0/24  scram-sha-256
SELECT pg_reload_conf();   -- ou bien : systemctl reload postgresql
🔍 Un pas plus loin : password authentication failed — une règle a correspondu, mais la vérification de l'identifiant a échoué.