PostgreSQLのPeer認証エラーの解決方法
PostgreSQLを使用中に、psql -U postgres
コマンドを実行すると以下のエラーが発生することがあります:
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres"
しかし、sudo -u postgres psql
では正常に接続できる場合は、PostgreSQLの認証設定に関連する問題です。
問題の原因
Peer認証は、オペレーティングシステムのユーザー名とデータベースユーザー名が一致する場合にのみ接続を許可する認証方式です。
psql -U postgres
を root
やその他の一般ユーザーで実行すると、OSユーザー名とデータベースユーザー名(postgres)が一致しないため、認証エラーが発生します。
解決方法
以下の解決方法から、環境に適したものを選択してください。
方法1: ユーザーマッピングの設定(推奨)
最も安全で柔軟な解決方法は、pg_ident.conf
を使用してOSユーザーとデータベースユーザーのマッピングを設定することです。
sudo nano /etc/postgresql/14/main/pg_ident.conf
# MAPNAME SYSTEM-USERNAME PG-USERNAME
user1 your_username postgres
your_username
は whoami
コマンドで確認できる現在のOSユーザー名に置き換えてください。
次に、pg_hba.conf
を編集してマッピングを参照するように設定します:
sudo nano /etc/postgresql/14/main/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
local all postgres peer map=user1
変更後、PostgreSQLを再起動します:
sudo service postgresql restart
方法2: 認証方式の変更
開発環境などセキュリティ要件が低い場合、認証方式を peer
から md5
(パスワード認証)に変更する方法もあります。
sudo nano /etc/postgresql/14/main/pg_hba.conf
# 変更前
local all postgres peer
# 変更後
local all postgres md5
WARNING
md5
方式ではパスワード認証が必要になります。必ずPostgreSQLユーザーのパスワードを設定してください。
変更後、PostgreSQLを再起動します:
sudo service postgresql restart
方法3: ホスト指定での接続
TCP/IP接続を使用することで、Peer認証を回避できます:
psql -h 127.0.0.1 -U postgres -d your_database
この方法では、pg_hba.conf
の host
エントリで定義されている認証方式(通常は scram-sha-256
)が使用されます。
方法4: postgresユーザーへの切り替え
最も簡単な方法は、直接postgresユーザーに切り替えることです:
sudo -i -u postgres
psql
または:
sudo su - postgres
psql
設定ファイルの場所について
PostgreSQLのバージョンやインストール方法によって、設定ファイルのパスが異なる場合があります:
/etc/postgresql/[version]/main/pg_hba.conf
/var/lib/pgsql/data/pg_hba.conf
(ソースインストールの場合)/usr/local/var/postgres/pg_hba.conf
(Homebrewインストールの場合)
本番環境での注意点
DANGER
本番環境ではセキュリティを最優先に考慮してください:
trust
認証は絶対に使用しないでください- 必要最小限の権限を付与する原則を遵守してください
- パスワード認証を使用する場合は強力なパスワードを設定してください
- ファイアウォールで不必要な外部接続をブロックしてください
まとめ
Peer認証エラーは、OSユーザーとデータベースユーザーの不一致によって発生します。環境やセキュリティ要件に応じて、適切な解決方法を選択してください:
- 開発環境: ユーザーマッピングまたは認証方式の変更
- 本番環境: 適切なユーザーマッピングと強固なパスワードポリシー
- 簡易接続: postgresユーザーへの切り替えまたはホスト指定接続
どの方法を選択する場合も、変更後は必ずPostgreSQLの再起動を忘れないようにしてください。