PostgreSQL-Benutzer können nach dem Ändern des Kennworts keine Verbindung zum Server herstellen

10

Ich habe dies mit 4 Rollen getroffen, die ich erstellt habe:
Nachdem ich das Passwort für einen Benutzer in pgAdmin III über die GUI (1) geändert habe, kann sich dieser Benutzer nicht mehr anmelden.
pgAdmin III Fehlermeldung anzeigen:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

Mein System: Postgresql 9.2 unter Ubuntu 12.04

Gibt es eine Möglichkeit, dies zu beheben?

(1): Melden Sie sich mit dem Konto postgres an, klicken Sie mit der rechten Maustaste auf Benutzer in Anmelderollen, gehen Sie zur Registerkarte 'Definition' und geben Sie das Passwort ein

Cao Minh Tu
quelle

Antworten:

15

Es ist möglich, dass Sie von diesem PgAdmin-Fehler ( Changelog ) gebissen werden :

2012-11-28 AV 1.16.1 Steuerelemente für die Datumsauswahl geben standardmäßig einen vollständigen Zeitstempel zurück, was zu versehentlichen Datumsänderungen bei Jobs und Gültigkeitsdaten von Rollen führen kann. Ignorieren Sie den Zeitteil.

Es wurde festgestellt, dass dieser Fehler das Ablaufdatum des Kennworts weit in der Vergangenheit festgelegt hat, z. B. am 1.1.1970. In diesem Fall unterscheidet sich die Fehlermeldung beim Verbindungsversuch nicht von der mit einem falschen Kennwort.

Sie können diese Ablaufdaten überprüfen mit:

SELECT usename,valuntil FROM pg_user;

und wenn sie falsch sind, setzen Sie sie zurück mit:

ALTER USER username VALID UNTIL 'infinity';

und aktualisieren Sie pgAdmin.

Daniel Vérité
quelle
Vielen Dank! Dies löste das Problem. Jedes Mal, wenn ich ein Benutzerkennwort zurücksetze, setzt pgAdmin die Gültigkeitsdauer bis zum 01.01.1970, damit sich der Benutzer nicht mehr anmelden kann.
Cao Minh Tu
du hast es! verdammte Käfer
Carter Cole
Wie genau soll ich mich bei psql anmelden ??? Das ist die Rolle, die ich gerade aktualisiert habe.
Ericpeters0n
1
@ ericpeters0n: Wechselt die Authentifizierungsmethode vorübergehend in trustoder peerin die pg_hba.confDatei für dieses Konto.
Daniel Vérité
Danke, habe es sortiert. Für diejenigen, die später kommen, bedeutet "Vertrauen" Folgendes: Nach dem Neustart von postgres können Sie psql ohne Kennwortauthentifizierung ausführen, wenn Sie ein Benutzer mit demselben Namen wie ein privilegierter Benutzer sind (z. B. Benutzername 'postgres'). Mit 'su - postgres psql' können Sie sich anmelden und das Passwort oder das gültige Datum korrigieren.
Ericpeters0n
3

Am einfachsten ist es, sich mit psql oder pgAdmin und anzumelden

ALTER USER sam WITH PASSWORD 'new_password';

Wenn Sie sich jetzt nicht mit einem Superuser-Konto anmelden können, können Sie die Einstellungen wiederherstellen, indem Sie die Einstellungen für pg_hba.conf für diesen Benutzer ändern und die Konfiguration neu laden (manchmal muss der Server neu gestartet werden, bin mir aber nicht sicher, warum).

Sie können eine Zeile hinzufügen, in der Sie sich mit der Methode ident (Peer in 9.2) anmelden können (wenn Sie ein lokales Systemkonto mit demselben Namen wie der Benutzer verwenden können), um lokale Verbindungen für den Benutzer herzustellen, oder (wenn das ist nicht möglich) auf "vertrauen" setzen (sehr vorübergehend!). Wenn Sie Vertrauen verwenden, setzen Sie es so schnell wie möglich zurück, da dies bedeutet "Vertrauen, dass der Benutzer der ist, den er / sie beansprucht!" Infolgedessen ist es gefährlich, diese Einstellung außerhalb des unmittelbaren Wiederherstellungsbedarfs aktiviert zu lassen.

Sobald Sie sich angemeldet haben, können Sie das obige Passwort zurücksetzen.

Chris Travers
quelle
Sollte pgAdmin nicht denselben Befehl ausführen?
Dekso
(Ich habe psql oder pgAdmin gesagt. Was kann ich tun, um es klarer zu machen?)
Chris Travers
Nein, nein, ich dachte nur, dass das Ändern von Passwörtern in der GUI genauso funktioniert. Wenn ja, kann ich mir nicht vorstellen, was schief gehen könnte?
Dekso
Was könnte schiefgehen? Tippfehler im Passwort für den Anfang ....
Chris Travers
Kann man das Passwort nicht einfach erneut festlegen, wenn man sich als Postgres angemeldet hat?
Dekso
2

Für Windows-Variante - Auch ich habe diesen bösen Fehler aufgrund von pgAdmin für meine Windows x64-Installation von Version 9.2 erlebt. Meine Produktion war gelähmt.

Im Ordner C:\Program Files\PostgreSQL\9.2\dataoder C:\Program Files (x86)\PostgreSQL\9.**x**\datafinden Sie die Textdatei pg_hba.conf .

Suchen Sie die folgenden Zeilen:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

und ändern Sie METHODE md5 in "Vertrauen" wie folgt:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Vom Windows>RunTyp „services.msc“ und [Eingabe] , um die richtige PostgreSQL - Instanz finden und neu starten.

Ihre DB-Sicherheit ist jetzt weit aufgerissen! Beachten Sie die Warnung, sie nach dem Ändern der Ablaufzeit des Benutzerkennworts auf das Jahr 2099 für alle relevanten Benutzer an md5 zurückzugeben.

Hoang Do.
quelle
1

Wenn Sie dies noch nicht versucht haben, überprüfen Sie Ihre Datei pg_hba.conf. Es wird so etwas wie /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20) heißen; Möglicherweise müssen Sie 'find / -name pg_hba.conf' verwenden, um es zu finden.

Ändern Sie am Ende der Datei die 'METHOD'-Werte für lokale Tests in' trust '(vollständige Informationen finden Sie in den Postgres-Dokumenten). Starten Sie den Computer neu, um sicherzustellen, dass alles sauber gestartet und die neuen Parameter gelesen werden.

Hoffentlich heilt dies Ihre Leiden. Es hat meine Probleme mit Fedora 20 mit PostgreSQL 9.3 gelöst.

UPDATE 14.10.2016:

Unter Ubuntu lautet der benötigte Dateiname /etc/postgresql/9.5/main/pg_hba.conf. Ändern Sie es nur für lokale Tests so , dass es folgendermaßen aussieht:

...
#
# 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
  local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

Die beiden Zeilen mit METHODE "Vertrauen" sind neu. Sie ermöglichen es Ihnen, eine Verbindung ohne Benutzernamen / Passwort herzustellen.

Wenn Sie fertig sind, müssen Sie den Server neu starten über:

sudo systemctl restart postgresql 
Alan Thompson
quelle
Damit pg_hba.confdies wirksam wird, benötigen Sie nur ein erneutes Laden, keinen Neustart. Darüber hinaus sieht Ihr Vorschlag unvollständig aus, da nicht klar ist, wie er das Problem am Ende lösen würde.
Dekso
1

Ich hatte gerade das gleiche Problem und es stellte sich heraus, dass ich mehrere Benutzer mit demselben Namen hatte (unterschiedliche Fälle). Nachdem ich das Eigentum zusammengelegt und eines entfernt hatte, war es zumindest klar. Abhängig von der Verbindungsmethode wurde der Fall nicht unbedingt zur Authentifizierung übertragen.

George
quelle