pg_dumpall を実行するための権限を取得できません

pg_dumpall を実行するための権限を取得できません

私がやろうとしているのは、Postgresql 9.4.8 から 9.5 にアップグレードするために、既存のデータベース クラスターをバックアップすることだけです。Ubuntu 16.04 を使用しています。

私はこの投稿を知っています:Postgresのパスワード認証が失敗する実際、前回この問題が発生したときからブックマークされていました。私は postgres に関する有意義な知識を主張しているわけではありません。psql コマンドと bash コマンドのどちらが正しいのかが常にわかるわけではありませんし、私が見たブログなどでも必ずしもそれが明確にわかるわけではありません。PG は私の Django プロジェクトのバックエンドにすぎません。なぜこの問題が再び発生するのか、まったく理解できません。

私の Ubuntu ユーザーは malikarumi です。 postgres ユーザーは maikarumi と postgres の 2 つあります。 Postgres はスーパーユーザーです。 以前 malikarumi もスーパーユーザーにしようとしましたが、どうやら失敗したようです。理由はわかりません。

これが今日の私の最初の試みです:

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

次にこれが起こります:

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

何も助けがなく、何が問題なのか、どう対処すべきなのかの指示も何もないことに注意してください。

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

その後、空のパスワードとセミコロンで再度試しました

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

パスワードはpsqlで有効です。

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

しかし、コマンドはセミコロンの有無にかかわらず

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

これはうまくいく

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

どうやら、これはデータベース ユーザーではなく、Unix ユーザーです。ただし、パスワードはこれまでも、これまでも、同じです。

これを変更しました

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

前回の投稿で示唆したように、peer にします (繰り返しますが、どうすれば元に戻るのでしょうか?!)

しかし、postgresを再起動できませんでした

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

psqlからも動作しませんでした

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

しかし、少なくとも psql はまだ私を許可します....

そこでマシン全体を再起動して再度試してみました。何が起こったかはご存じの通りです

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

それで、変更は成功しましたが、まだ動作しません。注: パスワードは求められませんでした。

それから私はこれを試しました

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

これで、最新の情報を入手できました。ところで、私は公式の postgres ドキュメントを何度も参照しましたが、内容が濃くてほとんど理解できないと感じました。私のような非 DB 担当者向けの優れた基本チュートリアルもご存知でしたら、それも役に立ちます。ありがとうございます。

答え1

コンテキストを考慮すると、言及されているすべての障害が発生することが予想されますが、次の障害は例外です。

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

ここでは失敗を報告しますが、次のような状況もあります。

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

成功を報告します。

しかし、それは納得できません。pg_dumpallあなたが言及した正確な状況では、同じパスワードが同じように機能するはずです。つまり、

  • 認証スキーマはmd5inに設定されていますpg_hba.conf(投稿の残りの部分で変更する前)。
  • オプションにより、ターゲット データベース ユーザーは postgres になります-U postgres
  • このコマンドは、自分の Unix ユーザーからはシェルと呼ばれますmalikarumi

認証スキームをpeer(質問の最後の部分) に正常に変更した後、suを使用する代わりにを試行すると問題が発生しますsudo。後者は Ubuntu で推奨される方法です。

シェルプロンプトで次のコマンドを使用します。

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

パスワードの入力を求められます。次のような画面が表示されます。

[sudo] password for malikarumi:

注意:あなたのパスワードmalikarumiこれは、 postgres のパスワードやデータベース パスワードではなく、名前でセッションを開くときに使用するものと同じです。

sudo -u postgres somepostgrescommandsudo someadmincommandこれは、この Ubuntu ワークステーションの管理者であれば実行できる操作のバリエーションにすぎません。

関連情報