J'essaie de me connecter à une base de données externe de pgAdmin III (qui est installée sur les deux machines). Le client se plaint:
Accès à la base de données refusé
Le serveur n'accorde pas l'accès à la base de données: le serveur rapporte
FATAL: no pg_hba.conf entry for Host "192.168.108.161", user "postgres", database "postgres", SSL off
Pour accéder à une base de données sur un serveur PostgreSQL, vous devez d'abord accorder un accès principal au serveur à votre client (authentification basée sur l'hôte). PostgreSQL vérifiera le
pg_hba.conf
fichier si un modèle qui correspond à votre adresse client/nom d'utilisateur/base de données est présent et activé avant toutSQL GRANT
les listes de contrôle d'accès sont évaluées.Les paramètres initiaux dans pg_hba.conf sont assez restrictifs, afin d'éviter les failles de sécurité indésirables causées par des paramètres système non révisés mais obligatoires. Vous voudrez probablement ajouter quelque chose comme
Host all all 192.168.0.0/24 md5
Cet exemple accorde un accès par mot de passe chiffré MD5 à toutes les bases de données à tous les utilisateurs du réseau privé
192.168.0.0/24
. Vous pouvez utiliser lepg_hba.conf
éditeur intégré à pgAdmin III pour modifier lepg_hba.conf
fichier de configuration.Après avoir changé
pg_hba.conf
, vous devez déclencher un rechargement de la configuration du serveur à l'aide depg_ctl
ou en arrêtant et en redémarrant le processus serveur.
Lorsque le serveur indique explicitement que toutes les connexions du réseau interne sont acceptées.
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
Host all all 127.0.0.1/32 md5
Host all all ::1/128 md5
Host all all 192.168.0.0/24 md5
J'ai déjà redémarré le postmaster pour que les modifications prennent effet, et suis allé jusqu'à redémarrer la machine entière. Quoi d'autre pourrait mal se passer ici?
Cette ligne:
Hébergez tous tous 192.168.0.0/24 md5
laissera passer les connexions des IP correspondant à 192.168.0.X
où X
est n'importe quel octet.
L'adresse IP de votre message d'erreur étant 192.168.108.161
, il ne correspond pas à ce modèle car 108
n'est pas 0
.
Pour activer des adresses telles que 192.168.X.Y
, vous auriez besoin d'un /16
au lieu de /24
ce qui signifie que les 16 premiers bits seulement sont fixes.
Comme ça:
Hébergez tous tous les 192.168.0.0/16 md5
N'oubliez pas de recharger Postgresql. Dans les documents officiels, utilisez pg_ctl reload
. Si cela ne fonctionne pas, il existe d'autres moyens de le faire répertoriés dans cette question .
Deux choses viennent à l'esprit.
La première consiste à s'assurer que le serveur écoute sur l'interface réseau. Par défaut, il n'écoute que sur l'hôte local. Modifiez votre postgresql.conf
fichier et modification:
listen_addresses = 'localhost'
Pour ressembler à ceci à la place:
listen_addresses = '*'
Si vous vous connectez à distance, votre utilisateur postgres
a besoin d'un mot de passe. Par défaut, aucun mot de passe n'est associé à ce compte, donc seule la connexion basée sur la confiance locale fonctionne. Pour la connexion à distance par mot de passe (par exemple. md5
dans pg_hba.conf`) pour fonctionner, ajoutez un mot de passe ou créez un nouvel utilisateur avec un mot de passe.
De plus, au lieu d'utiliser Host
dans pg_hba.conf
envisagez d'utiliser hostssl
pour exiger que les connexions à distance utilisent SSL. Sinon, les informations d'identification du nom d'utilisateur/mot de passe sont envoyées par câble en clair.