web-dev-qa-db-ja.com

pg_dumpを取得して適切に認証するにはどうすればよいですか

ホスト変数PGPASSWORD.pgpassを使用してみましたが、これら2つのどちらもデータベースに対する認証を許可しません。適切な許可にchmod'_.pgpassし、また試してみました:

export PGPASSWORD=mypass and PGPASSWORD=mypass

パスワードには\が含まれていますが、一重引用符PGPASS='mypass\'で囲んでおり、それでも認証されません。

私は走っています:

pg_dump dbname -U username -Fc

そして私はまだ受け取ります

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
90
Kosmonaut

クイックソリューション

問題は、現在のユーザー名に基づいてローカル peer 認証を実行しようとしていることです。パスワードを使用する場合は、-hでホスト名を指定する必要があります。

pg_dump dbname -U username -h localhost -F c

説明

これは、 pg_hba.conf の次のことが原因です。

local   all             all                                     peer
Host    all             all             127.0.0.1/32            md5

これは、Postgresユーザー名が現在のシステムユーザー名と一致することを要求するローカルユーザーに対してpeer認証を使用するようにPostgresに指示します。 2行目は、ホスト名を使用した接続を示し、 md5 メソッドを介してパスワードで認証できるようにします。

私の好みの開発構成

[〜#〜] note [〜#〜]:これは、シングルユーザーワークステーションでのみ使用する必要があります。これにより、実稼働マシンまたはマルチユーザーマシンで重大なセキュリティ脆弱性が発生する可能性があります。

ローカルのpostgresインスタンスに対して開発する場合、ローカル認証方法を trust に変更したいです。これにより、パスワードを持たないすべてのユーザーとして、ローカルUNIXソケットを介してpostgresに接続できます。上記のpeertrustに変更し、postgresをリロードするだけで実行できます。

# Don't require a password for local connections
local   all             all                                     trust
177
Jim Mitchener