1.

Redmine「PG::ConnectionBad: Ident authentication

編集
この記事の要点
  • Redmine の PG::ConnectionBad: Ident authentication failed
  • 原因: pg_hba.conf の認証方式が ident になっており、OS ユーザ名と PG ユーザ名の一致を要求
  • 対処: pg_hba.confidentmd5 または scram-sha-256 に変更
  • PostgreSQL を 再起動 / reload して設定反映
  • パスワード認証になればアプリ側 (database.yml) で接続可能

エラー内容

Redmine をセットアップして rake db:migrate 等を実行すると以下のエラーが出ます:

rake aborted!
PG::ConnectionBad: FATAL:  Ident authentication failed for user "redmine"
  /var/lib/gems/2.7.0/gems/pg-1.3.5/lib/pg.rb:nn:in `initialize'
  /var/lib/gems/2.7.0/gems/pg-1.3.5/lib/pg.rb:nn:in `new'
  /var/lib/gems/2.7.0/gems/pg-1.3.5/lib/pg.rb:nn:in `connect'
  ...
  /var/lib/gems/2.7.0/gems/activerecord-6.1.7/lib/active_record/connection_adapters/postgresql_adapter.rb:nn:in `new_client'
  ...

Tasks: TOP => db:migrate => db:load_config

原因: PostgreSQL の ident 認証

PostgreSQL は pg_hba.conf でクライアント認証方式を制御します。ident 認証は OS のユーザ名と PG のユーザ名が一致するかをチェックする方式で、Web アプリのような OS ユーザが www-datanginx である環境では「redmine」OS ユーザがいないため失敗します。

pg_hba.conf の場所

# Ubuntu / Debian
/etc/postgresql/14/main/pg_hba.conf
/etc/postgresql/15/main/pg_hba.conf
# (バージョン 14, 15 の部分はインストール版による)

# CentOS / RHEL
/var/lib/pgsql/data/pg_hba.conf
/var/lib/pgsql/14/data/pg_hba.conf

# macOS (Homebrew)
/usr/local/var/postgres/pg_hba.conf

# Docker (postgres 公式イメージ)
/var/lib/postgresql/data/pg_hba.conf

# 確認コマンド
sudo -u postgres psql -c "SHOW hba_file;"

修正手順

  1. pg_hba.conf を root 権限で編集
  2. local または host 行の認証方式を ident から md5 に変更
  3. PostgreSQL を reload
  4. アプリ再起動
sudo vi /etc/postgresql/14/main/pg_hba.conf

変更前

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

# "local" is for Unix domain socket connections only
local   all             all                                     ident   ← ★
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident   ← ★
# IPv6 local connections:
host    all             all             ::1/128                 ident   ← ★

変更後

# TYPE  DATABASE        USER            ADDRESS                 METHOD

local   all             postgres                                peer

local   all             all                                     md5     ← 変更
host    all             all             127.0.0.1/32            md5     ← 変更
host    all             all             ::1/128                 md5     ← 変更

認証方式の種類

方式意味用途
trust無条件で許可(パスワードなし)★ ローカル開発のみ。本番禁止
peerOS ユーザ名 = PG ユーザ名 で許可postgres コマンド経由の管理用
identpeer に類似(remote ident protocol 経由)古い設定。現在はあまり使わない
md5MD5 ハッシュパスワード認証長年の標準
scram-sha-256SCRAM SHA-256 認証(推奨)PG 10 以降の現代標準
password平文パスワードNG(盗聴される)
certSSL クライアント証明書厳密な認証が必要な環境
ldap / kerberos外部認証連携企業内システム

再起動 / reload

# 設定再読み込み(接続中セッションは維持される)
sudo systemctl reload postgresql

# 完全再起動(接続が一旦切断)
sudo systemctl restart postgresql

# pg_ctl 経由(PG ユーザで)
sudo -u postgres pg_ctl reload -D /var/lib/postgresql/14/main

# Docker の場合
docker exec postgres-container pg_ctl reload

PG ユーザにパスワードを設定

md5 認証にしただけだとパスワードが未設定の可能性。redmine ユーザにパスワードを設定:

sudo -u postgres psql

ALTER USER redmine WITH PASSWORD 'YourStrongPassword';

# または新規作成
CREATE USER redmine WITH PASSWORD 'YourStrongPassword';
CREATE DATABASE redmine OWNER redmine ENCODING 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE redmine TO redmine;
\q

Redmine 側の設定 (database.yml)

# config/database.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "YourStrongPassword"
  encoding: utf8

# 環境変数経由が安全
production:
  adapter: postgresql
  database: <%= ENV['DB_NAME'] %>
  host: <%= ENV['DB_HOST'] %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  encoding: utf8

動作確認

# コマンドラインで接続テスト
psql -U redmine -d redmine -h localhost
# パスワードプロンプト → 接続できれば成功

# Redmine の rake コマンド再実行
cd /var/www/redmine
bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

セキュリティ Tips

  • 本番では scram-sha-256 を使う(PG 10+)
  • パスワードは強固に(最低 16 文字、英数記号混在)
  • local 接続のみ許可: listen_addresses = 'localhost' で外部接続不可に
  • 専用 DB ユーザ: Redmine 用のユーザは Redmine DB だけに権限を持たせる
  • ファイアウォールで 5432 ポートを外部から遮断

関連エラー

  • "could not connect to server" — PG サーバ自体が起動していない / listen_addresses で許可されていない
  • "password authentication failed" — md5 認証になっているがパスワードが違う
  • "FATAL: database does not exist" — CREATE DATABASE 忘れ
  • "FATAL: role does not exist" — CREATE USER 忘れ
  • "too many connections"max_connections 設定不足
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. rake aborted! PG::ConnectionBad: FATAL: Ident authentication failed for user "redmine"
  2. ctl.sh : httpd could not be started