se connecter au serveur PostgreSQL: FATAL: pas d'entrée pg_hba.conf pour l'hôte


178

Bonjour, j'essaie de lancer un site Web mais après, cette erreur est apparue

connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "4X.XXX.XX.XXX", user "userXXX", database "dbXXX", SSL off in C:\xampp\htdocs\xmastool\index.php on line 37

après avoir googlé , il indique que je dois juste ajouter une entrée dans le fichier pg_hba.conf pour cet utilisateur particulier. c'est mon fichier pg_hba.conf.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
local dbXXX userXXX md5
host    dbXXX  userXXX  XX.XXX.XXX.XXX           md5
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

mais après cela, l'erreur persiste. J'ai redémarré mon serveur XAMPP plusieurs fois mais aucune modification ne s'affiche. Merci d'avance


Avez-vous redémarré PostgreSQL lui-même, pas seulement le serveur Web? Essayez SELECT pg_reload_conf().
Craig Ringer

Réponses:


220

Ajoutez ou modifiez la ligne suivante dans votre postgresql.conf:

listen_addresses = '*'

Ajoutez la ligne suivante comme première ligne de pg_hba.conf. Il permet d'accéder à toutes les bases de données pour tous les utilisateurs avec un mot de passe crypté:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

Redémarrez Postgresql après avoir ajouté ceci avec service postgresql restartou la commande équivalente pour votre configuration.


5
Notez que pour que cela fonctionne, un mot de passe doit avoir été défini pour l'utilisateur : sudo -u <username> psql postgres, puis \passwordà l'invite sql résultante demandera un réglage.
ijoseph

2
N'oubliez pas de redémarrer postgresql après avoir ajouté ceci: service postgresql restart
ammills01

Si vous souhaitez renforcer la sécurité en limitant les connexions aux domaines privés (au sein d’un bureau, et non du reste d’Internet), vous pouvez modifier le premier numéro en 10, 172 ou 192 pour qu’il corresponde à votre réseau: par exemple 172.0. 0.0 / 0 au lieu de 0.0.0.0/0
Nate Wanner le

22

Cette solution fonctionne pour IPv4 / IPv6

nano /var/lib/pgsql/data/pg_hba.conf

ajouter au final

host all all      ::1/128      md5
host all postgres 127.0.0.1/32 md5

puis redémarrez le service postgresql

/etc/init.d/postgresql restart

12

La façon dont j'ai résolu ceci était:

Ajout de la ligne ci-dessous dans pg_hba.conf:

hostnossl    all          all            0.0.0.0/0  trust        

et cela a été modifié dans postgresql.conf, comme indiqué:

listen_addresses = '*'  

Cette instance s’exécutait sur une machine virtuelle Azure sous Centos 7.3 et Postgres 9.5, puisqu’il s’agissait d’un POC (preuve de concept) que vous ne voudriez pas connecter sans SSL dans votre environnement de production actuel.

Pour me connecter à l'instance, j'utilisais pgAdmin 4 sur macOS Sierra .


4
Pas seulement SSL ... sur tout ce qui n'est pas une preuve de concept et qui est accessible au réseau, vous ne feriez pas confiance aux connexions, vous auriez besoin d'une certaine authentification .
joanolo

5

Nouvelle installation de Postgres 9.5, Ubuntu.

La clé était le type de connexion locale , car psql utilise une connexion par socket de domaine.

pg_hba.conf

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
local all all md5
host  all  all 0.0.0.0/0 md5

3

J'ai eu la même erreur lorsque j'ai essayé de me connecter à une base de données locale à l'aide d'un tunnel SSH. Je l'ai résolu en changeant le nom d'hôte de localhosten 127.0.0.1.


3
  1. Ajoutez la ligne suivante au bas de pg_hba.conf:

    hostnossl all all 0.0.0.0/0 md5

  2. Ajouter / modifier la ligne dans postgresql.conf:

    listen_addresses = '*'

  3. VÉRIFIEZ QUE l’utilisateur qui se connecte a un mot de passe: (Exemple, utilisateur de connexion nommé postgres)

    une. Exécutez la psqlcommande suivante avec le postgrescompte d'utilisateur:

    sudo -u postgres psql postgres

    b. Définissez le mot de passe:

    # \password postgres

entrez la description de l'image ici


1
N'utilisez pas la confiance pour les connexions à distance
eckes

2

Trouvez le bon fichier de configuration:

su - postgres -c "psql -t -P format=unaligned -c 'show hba_file';"

Ajoutez ce qui suit à la fin du fichier:

local all all peer

Puis redémarrez votre application PostgreSQL:

/bin/systemctl restart postgresql*.service

1

Dans mon cas, je devais ajouter la ligne exacte comme suggéré par les informations d'erreur. Impossible de le contourner en ajoutant "tous" les utilisateurs avec toutes les adresses IP comme règle. Maintenant, c'est comme:

PosgreSQL 10.5 sur CentOS 7.

# IPv4 local connections:
host    all             all             127.0.0.1/32                    md5
host    <db_name>       postgres        <my_client_machine_ip>/32       md5

1

Ce qui suit a fonctionné pour moi: (pg_hba.conf)

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only     
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
host    all             all             0.0.0.0/0               trust

confiance

Autoriser la connexion sans condition. Cette méthode permet à toute personne pouvant se connecter au serveur de base de données PostgreSQL de se connecter comme n'importe quel utilisateur PostgreSQL de son choix, sans avoir besoin d'un mot de passe ou de toute autre authentification.

md5

Demander au client de fournir un mot de passe à double hachage MD5 pour l'authentification.

se référer pour plus ici


0

Instructions pour les utilisateurs Debian.

Connectez-vous en tant qu'utilisateur posgres:

$ sudo su - postgres

Obtenez l'emplacement de pg_hba.conf en interrogeant la base de données:

$ psql -c "SHOW hba_file;"

              hba_file               
-------------------------------------
/etc/postgresql/11/main/pg_hba.conf
(1 row)

Ouvrez pg_hba.conf:

nano /etc/postgresql/11/main/pg_hba.conf

Ajoutez une configuration où il est écrit "Mettez votre configuration actuelle ici":

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

Déconnexion de votre utilisateur:

$ exit
logout

Redémarrez votre serveur postgres pour que les modifications prennent effet:

$ sudo systemctl restart postgresql

-1

Cela ne fonctionne que pour moi en ajoutant la configuration ci-dessous:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host    all             all             0.0.0.0/0               md5


-4

Il suffit d'écrire la séquence suivante dans le fichier de configuration:

const 
  pg                = require('pg'),
config          = require('./db-config'),
    dbOption    = {
      host    : ,
      port    : ,
      user    : ,
      password  :,
      database  : 
    },

  pool          = new pg.Pool(dbOption)
  pg.defaults.ssl = true;

C'est tout. Le fichier db-configcontient les données de spécification de l'hôte, de l'utilisateur, du mot de passe et de la base de données. Avec ce petit changement, il fonctionne parfaitement à la fois localement et dans un service de pass (Heroku). Entièrement testé.


Qu'est-ce (et où) est-ce db-config? Est-ce un fichier de configuration XAMPP?
Ypercubeᵀᴹ
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.