| この記事の要点 |
|---|
|
pg_hba.conf とは
PostgreSQL のクライアント認証ルールを記述するファイル (Host-Based Authentication)。「どのクライアント (IP) からどのユーザがどのデータベースに、どの認証方式でアクセス可能か」を定義します。
# pg_hba.conf の例
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
host mydb app 192.168.1.0/24 scram-sha-256
host all all 0.0.0.0/0 reject # 危険、参考のみ
変更を反映する 3 つの方法
方法 1: SQL でリロード(推奨・再起動不要)
-- psql で接続して実行
$ psql -U postgres
postgres=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
-- t (true) は再読み込みのシグナルを送れたという意味で、設定ファイルの検証結果ではない
-- 構文エラーがあっても t が返るので、事前に pg_hba_file_rules を確認し、実行後はログも確認
方法 2: pg_ctl reload(コマンドライン)
# PostgreSQL データディレクトリを指定
$ sudo -u postgres pg_ctl reload -D /var/lib/postgresql/15/main
server signaled
# データディレクトリ不明な場合
$ sudo -u postgres pg_ctl reload
方法 3: systemd で reload
# Ubuntu/Debian
$ sudo systemctl reload postgresql
$ sudo systemctl reload postgresql@15-main # バージョン別
# CentOS/RHEL
$ sudo systemctl reload postgresql-15
# 確認
$ sudo systemctl status postgresql
変更が反映されているか確認
-- 現在の認証設定を確認 (PostgreSQL 10+)
postgres=# SELECT * FROM pg_hba_file_rules;
line_number | type | database | user_name | address | netmask | auth_method | options | error
-------------+-------+----------+-----------+-----------+----------------------------+-------------+---------+-------
84 | local | {all} | {all} | | | peer | |
86 | host | {all} | {all} | 127.0.0.1 | 255.255.255.255 | scram-sha-256 | |
88 | host | {all} | {all} | ::1 | ffff:ffff:ffff:ffff:... | scram-sha-256 | |
(3 rows)
-- error カラムが NULL でなければ構文エラー
-- 現在の hba ファイルパス
postgres=# SHOW hba_file;
hba_file
-------------------------
/etc/postgresql/15/main/pg_hba.conf
pg_hba.conf の主要要素
① TYPE(接続方式)
| TYPE | 意味 |
|---|---|
local | Unix ソケット接続(同一マシン内のみ) |
host | TCP/IP(SSL あり/なし問わず) |
hostssl | SSL 接続のみ |
hostnossl | 非 SSL 接続のみ |
hostgssenc | GSSAPI 暗号化のみ (12+) |
② METHOD(認証方式)
| METHOD | 意味 |
|---|---|
trust | 認証なし(開発のみ、本番禁止) |
reject | 常に拒否 |
scram-sha-256 | パスワード認証(推奨、PostgreSQL 10+) |
md5 | 古いパスワード認証(非推奨) |
password | 平文パスワード(非推奨、SSL 必須) |
peer | OS ユーザ名と一致確認 (local のみ) |
ident | ident 経由のユーザ確認 |
cert | SSL クライアント証明書認証 |
ldap | LDAP サーバで認証 |
radius | RADIUS 認証 |
よくある設定例
例 1: 開発環境(緩い)
# 開発用 - 全許可 (本番で絶対禁止)
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
例 2: 本番環境(厳格)
# 本番用
local all postgres peer
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
# アプリサーバから特定 DB のみ許可
hostssl mydb app_user 10.0.1.0/24 scram-sha-256
# レプリケーション用
host replication repl_user 10.0.1.10/32 scram-sha-256
# その他は明示的に拒否
host all all 0.0.0.0/0 reject
リモート接続を許可する手順
- listen_addresses 設定:
postgresql.confで TCP リッスンを有効化(下記) - pg_hba.conf に許可ルール追加(下記)
- リロード:
SELECT pg_reload_conf(); - ファイアウォール: 5432 を許可(下記)
① postgresql.conf
# postgresql.conf
listen_addresses = '*' # または '192.168.1.10' 特定 IP のみ
port = 5432
# 反映には PostgreSQL 再起動が必要
$ sudo systemctl restart postgresql
② pg_hba.conf
# pg_hba.conf
host mydb app 192.168.1.0/24 scram-sha-256
④ ファイアウォール
$ sudo ufw allow from 192.168.1.0/24 to any port 5432
トラブルシュート
接続エラー: FATAL: no pg_hba.conf entry for host
pg_hba.conf にそのクライアント IP のルールがない:
# 適切なルールを追加
host mydb app 192.168.1.50/32 scram-sha-256
# 反映
SELECT pg_reload_conf();
接続エラー: FATAL: password authentication failed
- パスワードが違う
- scram-sha-256 と md5 の不一致 (PostgreSQL 14+ はデフォルト scram)
SELECT rolname, rolpassword FROM pg_authid;で確認
リロードが効かない
-- ファイル構文エラー確認
SELECT * FROM pg_hba_file_rules WHERE error IS NOT NULL;
-- ログ確認
$ tail -f /var/log/postgresql/postgresql-15-main.log
関連記事
子ページ
子ページはありません
同階層のページ
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09