タイトル: rake aborted! PG::ConnectionBad: FATAL: Ident authentication failed for user "redmine"
SEOタイトル: Redmine「PG::ConnectionBad: Ident authentication
| この記事の要点 |
|
エラー内容
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-data や nginx である環境では「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;"
修正手順
pg_hba.confを root 権限で編集localまたはhost行の認証方式をidentからmd5に変更- PostgreSQL を reload
- アプリ再起動
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 | 無条件で許可(パスワードなし) | ★ ローカル開発のみ。本番禁止 |
| peer | OS ユーザ名 = PG ユーザ名 で許可 | postgres コマンド経由の管理用 |
| ident | peer に類似(remote ident protocol 経由) | 古い設定。現在はあまり使わない |
| md5 | MD5 ハッシュパスワード認証 | 長年の標準 |
| scram-sha-256 | SCRAM SHA-256 認証(推奨) | PG 10 以降の現代標準 |
| password | 平文パスワード | NG(盗聴される) |
| cert | SSL クライアント証明書 | 厳密な認証が必要な環境 |
| 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設定不足