PostgreSQLでは、データベースへのアクセスを制御するためにさまざまな認証方式が提供されています。本記事では、代表的な3つの認証方式「Peer認証」「MD5認証」「SCRAM-SHA-256認証」について、それぞれの特徴やセキュリティ面の考慮点を詳しく解説します。
1. Peer認証
概要
Peer認証は、PostgreSQLがローカル接続を処理する際に使用できる認証方式の一つです。これは、カーネルを通じてOSのユーザー名を取得し、それをデータベースのユーザー名として使用する仕組みになっています。
特徴
- 動作原理: OSのユーザー名をそのままデータベースのユーザー名として利用。
- 適用範囲: Unixドメインソケット経由のローカル接続のみ。
- 認証プロセス: PostgreSQLのユーザー名とOSのユーザー名が一致する場合にのみ接続を許可。
-
設定方法:
pg_hba.conf
のMETHOD
をpeer
に設定。
セキュリティ面
- メリット: シンプルでパスワード不要のため、ローカルの開発環境などで便利。
- デメリット: OSのユーザー名管理が必要であり、不適切な管理が行われると不正アクセスのリスクがある。
- 制限: PostgreSQLのロールに対応するOSユーザーを作成する必要がある。
2. MD5認証
概要
MD5認証は、従来のPostgreSQLで広く使用されていたパスワードベースの認証方式です。クライアント側でMD5ハッシュ化されたパスワードを送信し、サーバー側で照合を行います。
特徴
- 暗号アルゴリズム: MD5ハッシュ関数を使用(128ビットのハッシュ値を生成)。
- 認証プロセス: クライアントがMD5ハッシュ化したパスワードを送信し、サーバー側で検証。
-
設定方法:
pg_hba.conf
のMETHOD
をmd5
に設定。 - メリット: 平文のパスワードを送信しないため、より安全な認証が可能。
セキュリティ面
- メリット: パスワードを直接送信しないため、盗聴のリスクを軽減。
- デメリット: MD5の暗号強度は現在では脆弱とされており、レインボーテーブル攻撃の対象になりやすい。
-
推奨される代替手段: 最新のPostgreSQLでは
SCRAM-SHA-256
の使用が推奨されている。
3. SCRAM-SHA-256認証
概要
SCRAM-SHA-256(Salted Challenge Response Authentication Mechanism)は、最新のPostgreSQLで推奨されている強力な認証方式であり、MD5認証の代替として使用されます。
特徴
- 暗号アルゴリズム: SHA-256を使用。
- 認証プロセス: クライアントとサーバー間でチャレンジ・レスポンスを行い、パスワードを直接送信しない。
-
設定方法:
password_encryption
をscram-sha-256
に設定し、pg_hba.conf
のMETHOD
をscram-sha-256
に変更。 - メリット: レインボーテーブル攻撃や中間者攻撃への耐性が向上。
セキュリティ面
- メリット: 強力な暗号化方式により、パスワード漏洩リスクを低減。
- DDoS攻撃対策: 認証負荷の一部をクライアント側に分散することで、サーバーの負荷軽減。
-
推奨設定: 最新のPostgreSQLバージョンでは、デフォルトで
SCRAM-SHA-256
が採用される傾向にある。
4. 認証方式の比較表
認証方式 | 方式 | セキュリティレベル | 使用環境 | 設定ファイル |
---|---|---|---|---|
Peer | OSのユーザー名を使用 | 低 | ローカル開発環境 | pg_hba.conf |
MD5 | MD5ハッシュ化パスワード | 中 | レガシー環境 | pg_hba.conf |
SCRAM-SHA-256 | SHA-256ハッシュ化パスワード | 高 | 本番環境 | pg_hba.conf |
5. まとめ
PostgreSQL の認証方式にはそれぞれの利点と適用シナリオがあります。
- 開発環境で簡単に使うなら → Peer認証
- 従来の方式を使いたい場合 → MD5認証(ただし非推奨)
- 本番環境やセキュリティを強化したいなら → SCRAM-SHA-256認証
最新の PostgreSQL では SCRAM-SHA-256 が推奨されているため、可能であればこの方式に移行するのが望ましいです。特にセキュリティ要件が厳しい場合は、適切な認証方式を選択することが重要です。
本記事が PostgreSQL の認証設定を見直す際の参考になれば幸いです。