Skip to content

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 postgresroot やその他の一般ユーザーで実行すると、OSユーザー名とデータベースユーザー名(postgres)が一致しないため、認証エラーが発生します。

解決方法

以下の解決方法から、環境に適したものを選択してください。

方法1: ユーザーマッピングの設定(推奨)

最も安全で柔軟な解決方法は、pg_ident.conf を使用してOSユーザーとデータベースユーザーのマッピングを設定することです。

bash
sudo nano /etc/postgresql/14/main/pg_ident.conf
bash
# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
user1           your_username           postgres

your_usernamewhoami コマンドで確認できる現在のOSユーザー名に置き換えてください。

次に、pg_hba.conf を編集してマッピングを参照するように設定します:

bash
sudo nano /etc/postgresql/14/main/pg_hba.conf
bash
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer map=user1

変更後、PostgreSQLを再起動します:

bash
sudo service postgresql restart

方法2: 認証方式の変更

開発環境などセキュリティ要件が低い場合、認証方式を peer から md5(パスワード認証)に変更する方法もあります。

bash
sudo nano /etc/postgresql/14/main/pg_hba.conf
bash
# 変更前
local   all             postgres                                peer

# 変更後
local   all             postgres                                md5

WARNING

md5 方式ではパスワード認証が必要になります。必ずPostgreSQLユーザーのパスワードを設定してください。

変更後、PostgreSQLを再起動します:

bash
sudo service postgresql restart

方法3: ホスト指定での接続

TCP/IP接続を使用することで、Peer認証を回避できます:

bash
psql -h 127.0.0.1 -U postgres -d your_database

この方法では、pg_hba.confhost エントリで定義されている認証方式(通常は scram-sha-256)が使用されます。

方法4: postgresユーザーへの切り替え

最も簡単な方法は、直接postgresユーザーに切り替えることです:

bash
sudo -i -u postgres
psql

または:

bash
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

本番環境ではセキュリティを最優先に考慮してください:

  1. trust 認証は絶対に使用しないでください
  2. 必要最小限の権限を付与する原則を遵守してください
  3. パスワード認証を使用する場合は強力なパスワードを設定してください
  4. ファイアウォールで不必要な外部接続をブロックしてください

まとめ

Peer認証エラーは、OSユーザーとデータベースユーザーの不一致によって発生します。環境やセキュリティ要件に応じて、適切な解決方法を選択してください:

  • 開発環境: ユーザーマッピングまたは認証方式の変更
  • 本番環境: 適切なユーザーマッピングと強固なパスワードポリシー
  • 簡易接続: postgresユーザーへの切り替えまたはホスト指定接続

どの方法を選択する場合も、変更後は必ずPostgreSQLの再起動を忘れないようにしてください。