web-dev-qa-db-fra.com

Connexion à une base de données externe avec pgAdmin III

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 tout SQL 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 le pg_hba.conf éditeur intégré à pgAdmin III pour modifier le pg_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 de pg_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?

7
Sean Allred

Cette ligne:

 Hébergez tous tous 192.168.0.0/24 md5 

laissera passer les connexions des IP correspondant à 192.168.0.XX 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 .

7
Daniel Vérité

Deux choses viennent à l'esprit.

  1. 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 = '*'
    
  2. 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.

2
sehrope