web-dev-qa-db-ja.com

Postgresデータベースをバックアップできません:致命的:ユーザー「postgres」のピア認証に失敗しました

PHP Webサーバー上のスクリプトから、またはPGAdmin3を使用して、リモートでデータベースに問題なく接続できます。

残念ながら、サーバー自体でローカルにpg_dumpバックアップを実行しようとすると、次のようになります。

pg_dump --username=postgres -W omega | gzip > omega.10.10.13.gz
pg_dump: [archiver (db)] connection to database "omega" failed:  
FATAL:  Peer authentication failed for user "postgres"

以前はデータベースにパスワードがまったくありませんでしたが、これを回避するために実際にpostgresユーザーにパスワードを与えました。それでもさいころ、ピア認証は毎回失敗します。

これが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            md5
# 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             70.89.205.250/24        md5 
Host    all             all             23.21.112.163/24        md5 
Host    all             all             24.188.1.163/24         md5 
2
DirtyBirdNJ

Pg_hba.confで、次の行を変更します。

local   all             all                                     peer

に:

local   all             all                                     password

その後、パスワードを使用してローカルにログインできます。

2
Jason Champion

Postgresクライアントの奇妙な奇妙な点は、リモートまたはスクリプト内のクライアントは通常、そのアドレスを使用してサーバーに接続し、その後パスワードによって認証されますが、コマンドラインクライアントを介して同じマシンから接続すると、ピアを使用しようとします認証すると、そのエラーが発生します。これから answer ホストを指定するだけで修正できることがわかりました:

pg_dump -h 127.0.0.1 --username=postgres -W omega | gzip > omega.10.10.13.gz

これは、あなたのPHPスクリプトが内部的に行っていることです。グローバル設定を台無しにせず、あなたもそれについて知りたいと思ったので、私はこの修正を好みます。

1
jeteon

システムユーザーpostgresとしてスクリプトを実行するか、pg_hba.confファイルによると、ピア認証が設定された対応するdbユーザーがいます。彼のコメントで @ Milenはすでに示唆 のように。または、できれば .pgpass file を使用して、システムユーザーのパスワードなしのアクセスを設定します。

この密接に関連する回答の詳細:
PostgreSQLスケジュールデータベースバックアップ

または、SOでのパスワードなしのアクセスに関するこの包括的な回答

1