Vous n'êtes pas identifié(e).
Bonjour
Je veux que ma connexion à mon serveur PostgeSql distant ne soit autorisée qu'en donnant un password.
Dans mon pg_hba.conf je mets :
host all all 0.0.0.0/0 password
Rien ne marche, pour aucun utilisateur même postgres (le rôle postgres et l'utilisateur postgres ont le même password)
Par contre :
host all all 0.0.0.0/0 trust
aucun problème (ce qui est normal).
Qui peut me dire où est mon erreur ?
Merci
Hors ligne
Bonjour,
quel est le message d'erreur retourné par postgres ? A priori la seule erreur serait due à un mot de passe erroné.
Sinon, il est préférable de choisir la méthode "md5" plutôt que password, sinon le mot de passe est transmis en clair sur le réseau.
Julien.
https://rjuju.github.io/
Hors ligne
Bonjour,
Je suis d'accord avec Julien pour md5.
Pour la connexion à distance il faut peut être penser à désactiver le FW sur le serveur de la base de donner ou autoriser la machine à se connecter dessus en plus la vérification du fichier pg_hba.conf s'il est bien fait.
Pour finir le message d'erreur sera la moitié de la réponse.
Bien à vous
Hors ligne
Le message est peu explicite pour moi :
2013-09-08 16:36:19 CEST LOG: unexpected EOF on client connection
2013-09-08 16:37:00 CEST LOG: could not receive data from client: Connection reset by peer
Hors ligne
Il n'y a pas d'autre message d'erreur dans les logs ? Sinon cela ressemble effectivement à un firewall ou un autre équipement réseau qui aurait coupé la connexion.
Julien.
https://rjuju.github.io/
Hors ligne
Mon server PostgreSQL 9.1 est sous ubuntu 12.
J'ai fait
ufw disabled
Ca ne change rien !
J'accède à tous les services du serveur ubuntu sans problème.
Hors ligne
Essayez depuis le serveur de vous connecter en local avec mot de passe : psql -h 127.0.0.1 -W -U utilisateur.
Si cela fonctionne mais pas depuis une autre machine, c'est le réseau. Sinon il faudrait afficher le reste des informations dans les logs pour voir l'erreur.
Julien.
https://rjuju.github.io/
Hors ligne
Aïe !
postgres@xxx : ~ >> psql -h 127.0.0.1 -W -U robert
Password for user robert:
2013-09-11 16:30:25 CEST FATAL: password authentication failed for user "robert"
2013-09-11 16:30:25 CEST FATAL: password authentication failed for user "robert"
psql: FATAL: password authentication failed for user "robert"
FATAL: password authentication failed for user "robert"
Voici le contenu de pg_hba.conf :
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 password
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
host all all 0.0.0.0/0 trust
Toujours rien de plus dans les logs.
Hors ligne
C'est juste le mot de passe que vous utilisez pour l'utilisateur robert qui n'est pas le bon.
Hors ligne
De quel utilisateur parlez vous ?
robert : utilisateur ubuntu
robert : rôle de connexion
robert : autre...
Hors ligne
Utilisateur au niveau PostgreSQL (ce que vous appelez le rôle de connexion).
Guillaume.
Hors ligne
J'utilise pgadmin3 sur osx7.5
J'ai changé le mot de passe du rôle de connexion avec pgadmin3.
Idem avec psql.
Toujours impossible de me connecter.
Il doit y avoir qq chose incorrect qq part, mais je ne vois pas où ?
Hors ligne
Y a-t-il toujours le même message d'erreur dans les logs (FATAL: password authentication failed for user "robert") ?
Si c'est le cas, vous avez peut être un problème sur le mot de passe saisi (caractère accentué, caps lock ...), où vous avez plusieurs instances de démarrées.
Julien.
https://rjuju.github.io/
Hors ligne
Je ne pense vraiment pas que ce soit un problème d'écriture du mot de passe: j'utilise les caractères comme "6Me:=", ce qui est standard.
Comment puis-je savoir les instances démarrées ?
Dans "ps -aux" j'ai les lignes :
root 11009 0.0 0.3 9996 3428 ? Ss 16:16 0:00 sshd: postgres [priv]
postgres 11100 0.0 0.1 9996 1572 ? S 16:17 0:00 sshd: postgres@pts/1
...
postgres 18259 0.0 0.7 49756 7844 ? S Sep14 0:13 /usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1
postgres 18261 0.0 0.1 49756 2040 ? Ss Sep14 0:15 postgres: writer process
postgres 18262 0.0 0.1 49756 1432 ? Ss Sep14 0:15 postgres: wal writer process
postgres 18263 0.0 0.2 50468 2696 ? Ss Sep14 0:12 postgres: autovacuum launcher process
postgres 18264 0.0 0.1 20260 1560 ? Ss Sep14 0:16 postgres: stats collector process
Hors ligne
Vous n'auriez pas de message dans le fichier pg_log si l'instance n'était pas démarrée.
Je pense comme rjuju qu'il s'agit ici d'un problème de mot de passe.
Pour l'instance il s'agit de celle dont les datas se trouvent dans /var/lib/postgresql/9.1
Hors ligne
Merci
Mon mot de passe comprend : majuscules, minuscules, chiffres, =, :
Il marche depuis longtemps, notamment avec pgadmin3
Hors ligne
À tout hasard est-ce que vous passez par un pooler de connexion ?
Julien.
https://rjuju.github.io/
Hors ligne
Qu'est-ce que "pooler connexion" ?
Hors ligne
pgbouncer ou pgpool par exemple
Julien.
https://rjuju.github.io/
Hors ligne
pgbouncer et pgpool2 sont visibles, mais pas installés.
Hors ligne
Après pas mal de recherches et d'essais.
Je n'ai pas un problème d'écriture du mot de passe : "aaaaaaaa" ne marche pas tout autant.
Je n'ai pas un problème de réseau : avec METHOD=trust la connexion à distance se fait sans problème.
J'ai un problème quelque part lorsque METHOD=password dans pg_hba.conf
J'ai examiné plusieurs fois les fichiers de configurations dans /etc/postgresql/9.1/main
Je n'ai rien vu qui puisse expliquer mon problème selon moi.
Faut-il réinstaller PostgreSQL ?
Si je sauvegarde toutes les bases de données de mon serveur distant
Si je supprime l'installation existante de PG et tous les fichiers associés à PG, sauf /var/lib/postgresql/9.1/main qui contient les données, je crois
Si je réinstalle PG
Si je restaure les BdD
Y a-t-il un risque de perdre toutes mes données ?
Hors ligne
Réinstaller ne devrait rien changer.
Si vous pouviez nous donner exactement toutes les opérations que vous faites, le contenu du fichier de configuration que vous modifiez, etc, ce serait plus simple pour vous apporter une aide.
Quant à votre "procédure" de sauvegarde/réinstallation/restauration, à priori, vous ne risquez pas de perdre quelque chose, à moins d'une fausse manipulation.
Guillaume.
Hors ligne
Voici les fichiers de configuration.
...>> vi environment
"vide"
..>> vi pg_ctl.conf
pg_ctl_options = ''
...>> vi pg_hba.conf
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 password
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
host all all 0.0.0.0/0 trust
...>> vi pg_ident
"vide"
..>> vi vi postgresql.conf // J'ai supprimé la plupart des lignes commentées
#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------
# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir.
data_directory = '/var/lib/postgresql/9.1/main' # use data in another directory
# (change requires restart)
hba_file = '/etc/postgresql/9.1/main/pg_hba.conf' # host-based authentication file
# (change requires restart)
ident_file = '/etc/postgresql/9.1/main/pg_ident.conf' # ident configuration file
# (change requires restart)
# If external_pid_file is not explicitly set, no extra PID file is written.
external_pid_file = '/var/run/postgresql/9.1-main.pid' # write an extra PID file
# (change requires restart)
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*'
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
# Note: Increasing max_connections costs ~400 bytes of shared memory per
# connection slot, plus lock space (see max_locks_per_transaction).
#superuser_reserved_connections = 3 # (change requires restart)
unix_socket_directory = '/var/run/postgresql' # (change requires restart)
#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------
# - Memory -
shared_buffers = 24MB # min 128kB
# (change requires restart)
...>>vi postmaster.opts
/usr/lib/postgresql/9.1/bin/postgres "-D" "/var/lib/postgresql/9.1/main" "-c" "config_file=/etc/postgresql/9.1/main/postgresql.conf"
...>>vi postmaster.pid
3976
/var/lib/postgresql/9.1/main
1378740363
5432
/var/run/postgresql
*
5432001 32768
...>> vi start.conf
# Automatic startup configuration
# auto: automatically start/stop the cluster in the init script
# manual: do not start/stop in init scripts, but allow manual startup with
# pg_ctlcluster
# disabled: do not allow manual startup with pg_ctlcluster (this can be easily
# circumvented and is only meant to be a small protection for
# accidents).
auto
Avec cette configuration.
...>> psql -h 127.0.0.1 -W -d BdD -U username
Password for user username:
psql: FATAL: password authentication failed for user "username"
...>> psql -h domain.tld -W -d BdD -U username
Password for user username:
psql (9.1.9)
Type "help" for help.
BdD=> select * from plantes;
id | nom_latin | nom_commun
----+---------------------------------+-----------------------------
1 | Achillea millefolia | Achillée millefeuille
2 | Agastache mexicana | Agastache mexicaine
3 | Agastache rupestris | Agastache rupestre
BdD=>
La connexion locale ne marche pas, ce qui n'est pas normal.
La connexion à distance marche ce qui est normal.
Maintenant si je change
host all all 0.0.0.0/0 trust
en
host all all 0.0.0.0/0 password
j'obtiens
...>> psql -h domain.tld -W -d BdD -U username
Password for user username:
psql: FATAL: password authentication failed for user "username"
Que puis-je ajouter ?
Hors ligne
Si je comprends bien tous vos tests, ils montrent que la connexion par mot de passe ne fonctionne pas, dans aucun cas, que ce soit à distance ou pas.
Étant donné le message d'erreur que vous obtenez, j'en conclus que le mot de passe que vous saisissez n'est pas le bon.
Voici ce que je vous conseille de faire.
1. Remettez "host all all 0.0.0.0/0 trust" à la place de "host all all 0.0.0.0/0 password" dans le pg_hba.conf
2. Rechargez la configuration
3. Connectez-vous avec "psql -h domain.tld -d BdD -U username" (pas de -W, c'est inutile)
4. Exécutez "ALTER USER username PASSWORD'toto';"
5. Quittez psql
6. Remettez "host all all 0.0.0.0/0 password" à la place de "host all all 0.0.0.0/0 trust" dans le pg_hba.conf
7. Rechargez la configuration
8. Connectez-vous avec "psql -h domain.tld -d BdD -U username" (pas de -W, c'est vraiment inutile)
9. Il vous demandera le mot de passe, saisissez toto.
10. Vous devriez être connecté.
11. Quittez psql
12. Connectez-vous avec "psql -h localhost -d BdD -U username" (pas de -W, c'est vraiment inutile)
13. Il vous demandera le mot de passe, saisissez toto.
14. Vous devriez être connecté.
Si tout s'est bien passé, n'oubliez pas de changer le mot de passe par quelque chose de plus sécurisé.
Guillaume.
Hors ligne
Hélas, rien de changé.
J'ai basculé mon serveur courant sur un serveur de secours.
J'ai tout réinstallé, y compris PostgreSQL, et restauré tous mes données.
Et tout marche parfaitement pour PG !
Il y a sans doute quelque chose de pourri dans le PG de mon serveur courant, ou peut-être ailleurs que dans le PG.
Désolé pour le temps que je vous ai fait perdre.
Grand merci à tous.
Hors ligne