Ich kann keine Autorisierung zum Ausführen von pg_dumpall erhalten.

Ich kann keine Autorisierung zum Ausführen von pg_dumpall erhalten.

Ich versuche lediglich, mein vorhandenes Datenbankcluster zu sichern, um ein Upgrade von Postgresql 9.4.8 auf 9.5 durchzuführen. Ich verwende Ubuntu 16.04.

Dieser Beitrag ist mir bekannt:Postgres-Passwortauthentifizierung schlägt fehl. Tatsächlich war es bereits als Lesezeichen gespeichert, seit ich das letzte Mal dieses Problem hatte. Ich behaupte nicht, dass ich über bedeutsame Postgres-Kenntnisse verfüge. Ich verstehe nicht immer, was ein psql-Befehl und was ein bash-Befehl sein soll, und die Blogs und was nicht, die ich gesehen habe, machen mir das nicht immer klar. PG ist nur mein Backend für meine Django-Projekte. Ich verstehe wirklich nicht, wie ich dieses Problem wieder habe.

Mein Ubuntu-Benutzer ist malikarumi. Ich habe zwei Postgres-Benutzer, maikarumi und postgres. Postgres ist der Superuser. Ich habe vor einiger Zeit versucht, malikarumi ebenfalls zum Superuser zu machen, aber das ist anscheinend fehlgeschlagen und nein, ich weiß nicht, warum.

Hier ist mein erster Versuch heute:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup
pg_dumpall: query failed: ERROR:  permission denied for relation pg_authid
pg_dumpall: query was: SELECT oid, rolname, rolsuper, rolinherit,rolcreaterole, rolcreatedb, rolcanlogin, rolconnlimit, rolpassword, rolvaliduntil, rolreplication, pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, rolname = current_user AS is_current_user FROM pg_authid ORDER BY 2

Das kam als nächstes:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

Beachten Sie, dass dort nichts zu sehen ist: keine Hilfe, kein Hinweis darauf, was nicht stimmt oder was man dagegen tun kann.

Password: 
Password: 
pg_dump: [archiver (db)] connection to database "esselldb" failed: FATAL:  password authentication failed for user "postgres"
pg_dumpall: pg_dump failed on database "esselldb", exiting

Dann habe ich es noch einmal mit einem leeren Passwort und einem Semikolon versucht

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres;
Password: 
pg_dumpall: could not connect to database "template1": fe_sendauth: no password supplied

Beachten Sie, dass das Passwort für psql funktioniert

malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql
psql (9.4.8)
Type "help" for help.

Aber der Befehl funktioniert nicht, mit oder ohne Semikolon

postgres=# pg_dumpall > 9-4-backup
postgres-# pg_dumpall > 9-4-backup;
ERROR:  syntax error at or near "pg_dumpall"
LINE 1: pg_dumpall > 9-4-backup

Das funktioniert

malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ sudo cat pg_hba.conf
[sudo] password for malikarumi: 

Offensichtlich ist dies der Unix-Benutzer, nicht der Datenbankbenutzer. Aber es ist und war schon immer dasselbe Passwort.

Ich habe dies geändert

# Database administrative login by Unix domain socket
local   all             postgres                                md5

zum Peer, wie im vorherigen Beitrag vorgeschlagen (nochmals – wie könnte es wieder geändert werden?!)

Aber ich konnte postgres nicht neu starten

malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ pg_ctl stop
pg_ctl: command not found
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ cd ~
malikarumi@Tetuoan2:~$ pg_ctl stop
pg_ctl: command not found

Es hat auch von psql aus nicht funktioniert

postgres=# pg_ctl stop
postgres-# pg_ctl stop;
ERROR:  syntax error at or near "pg_ctl"
LINE 1: pg_ctl stop
        ^
postgres=# 

Aber zumindest lässt mich psql noch rein …

Also habe ich die ganze Maschine neugestartet und es noch einmal versucht. Du weißt, was passiert ist

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
pg_dumpall: could not connect to database "template1": FATAL:  Peer authentication failed for user "postgres"   

Ich habe es also erfolgreich geändert, aber ich bekomme es immer noch nicht zum Laufen. HINWEIS: Ich wurde NICHT nach meinem Passwort gefragt!

Dann habe ich dies versucht

malikarumi@Tetuoan2:~$ su postgres
Password: the right one
su: Authentication failure
malikarumi@Tetuoan2:~$ su postgres
Password: a blank one
su: Authentication failure

Und jetzt sind Sie auf dem neuesten Stand. Übrigens habe ich mir die offiziellen Postgres-Dokumente schon oft angesehen und finde sie dicht und kaum verständlich. Wenn Sie auch ein gutes Basis-Tutorial für einen Nicht-DB-Benutzer wie mich kennen, wäre das hilfreich. Danke.

Antwort1

Angesichts des Kontexts ist mit allen genannten Fehlern zu rechnen, mit Ausnahme eines:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

Hier melden Sie einen Fehler, aber in der anderen Situation unten:

malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql

Sie melden einen Erfolg.

Aber das ergibt keinen Sinn. Das gleiche Passwort muss pg_dumpallin dem von Ihnen genannten Kontext genauso gut funktionieren, nämlich:

  • Das Authentifizierungsschema ist auf „ md5in“ eingestellt pg_hba.conf(bevor Sie es im Rest des Beitrags ändern).
  • Der Zieldatenbankbenutzer ist durch die -U postgresOption Postgres.
  • Der Befehl wird von der Shell Ihres eigenen Unix-Benutzers aufgerufen malikarumi.

Nachdem Sie das Authentifizierungsschema erfolgreich in peer(letzter Teil Ihrer Frage) geändert haben, besteht der Fehler darin, dass Sie es suanstelle von versuchen sudo, wobei letzteres die empfohlene Methode unter Ubuntu ist.

Verwenden Sie diesen Befehl an der Shell-Eingabeaufforderung:

malikarumi@Tetuoan2:~$ sudo -u postgres pg_dumpall >9-4-backup

Sie werden nach einem Passwort gefragt und es wird etwa Folgendes angezeigt:

[sudo] password for malikarumi:

Beachten Sie, dass erwartet wirdIhr Passwort, dasselbe, das Sie beim Öffnen Ihrer Sitzung unter dem malikarumiNamen verwenden, im Gegensatz zum Passwort von Postgres oder einem Datenbankpasswort.

sudo -u postgres somepostgrescommandist nur eine Variante dessen, was sudo someadmincommandSie tun dürfen, wenn Sie der Administrator dieser Ubuntu-Workstation sind.

verwandte Informationen