PostgreSQL - l'authentification par mot de passe échoue après l'ajout de rôles de groupe
Je suis assez nouveau à Potresql. J'ai passé toute la matinée à essayer de faire fonctionner correctement les logins des utilisateurs, et je suis terriblement frustré maintenant!
donc, j'ai une base de données PostGIS, version 9.2, qui fait partie de la suite logicielle OpenGeo. Je pourrais accéder à la base de données avec l'utilisateur postgres, mais je veux faire un rôle de groupe et l'utilisateur avec l'accès à une base de données afin qu'il puisse créer des tables et mettre à jour/sélectionner/supprimer etc. dans cette base de données.
je peux créer un l'utilisateur, qui fonctionne, et je peux me connecter avec cet utilisateur. Je peux créer un rôle de groupe et lui donner des privilèges. Je peux alors ajouter l'utilisateur au rôle de groupe, et puis ne peut plus se connecter!
il est même arrivé que lorsque j'ai ajouté l'utilisateur postgres au groupe, cet utilisateur ne peut pas se connecter. - Je supprimer le groupe, mais l'incapacité de se connecter persiste.
Maintenant, j'ai joué avec pg_hba.conf beaucoup. Et je peux maintenant me connecter en tant que postgres, mais seulement si 'trust' est activé, et je vous ne pouvez pas vous connecter avec N'importe quel logiciel, tel que PGAdminIII.
ce serait génial d'obtenir quelques conseils sur ce qui va mal, et d'activer à nouveau les logins authentifiés.
pg_hba:
Code:
# Database administrative login by Unix domain socket
local all postgres trust
local all gisadmin trust
# TYPE DATABASE USER ADDRESS METHOD
local all opengeo md5
local all opengeo md5
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all gisadmin localhost trust
# 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
pour conclure, je voudrais pouvoir me connecter via un tunnel SSH. Je pouvais le faire à l'origine avec l'utilisateur 'postgres', mais maintenant que j'ai ajouté et retiré cet utilisateur d'un groupe, je ne peux pas.
Edit: l'erreur message...
si je me connecte via le tunnel SSH dans PGAdmin avec le mot de passe correct, j'obtiens l'erreur " FATAL: l'authentification mot de passe a échoué pour l'utilisateur ..."
si j'essaie de me connecter via le tunnel SSH dans PGAdmin sans mot de passe, pendant que L'option de confiance est activée, j'obtiens l'erreur:"error connecting to the server: fe_sendauth: no password provided".
la première erreur se produit encore lors de la connexion locale, juste via SSH et psql, mais la deuxième l'un s'en va et je peux me connecter.
sortie de du+:
sortie de dg+
2 réponses
je pense que ce comportement peut être lié à pgAdminIII, parce que j'ai des problèmes similaires et il semble chaque fois que je me connecte à mon db comme postgres en utilisant pgAIII et regarder l'onglet Définition dans les propriétés de l'utilisateur, la case à cocher pour la" date d'expiration " est cochée et soit 1/1/1970 ou 31/12/1969 sont fixés comme date d'expiration. La solution proposée par Daniel fonctionne, donc il est évident que le problème est l'expiration du mot de passe.
Semble que ce bug a été corrigé dans pgAdmin 1.16.2 comme vous pouvez le voir dans le changelog:
http://www.pgadmin.org/development/changelog.php
Cheers
dans la sortie \du+
, le mot de passe valide jusqu'au 01/01/1970 00:00:00+00... semble assez suspect. À proprement parler, les mots de passe pour gisadmin
, postgisrw
et postgres
ne sont plus valides, ce qui pourrait expliquer pourquoi les méthodes d'authentification basées sur le mot de passe échouent pour ces comptes.
Vous pouvez essayer ALTER USER username valid until 'infinity'
sur ces comptes et voir si cela résout le problème.
également lors de la connexion à PG à travers un tunnel SSH, sachez que les entrées pg_hba.conf
commençant par host
sont ignorées. Ces entrées ne sont considérées que pour les connexions aux sockets de domaines Unix. Parfois les utilisateurs confondent cela avec des connexions de localhost
à lui-même.