初めに
PostgreSQLではサーバーへのアクセスの際にクライアント認証が行われています。
- クライアント認証とは
例えば、クライアントが自身のIDとパスワードをサーバーに提供します。サーバーは、これらの情報がデータベースに格納されている情報と一致するかどうかを確認します。もし一致した場合、クライアントの身元が確認され、リクエストされたサービスへのアクセスが許可されます。
PostgreSQLではpg_hba.conf1で管理しています。
pg_hba.confとは
pg_hba.conf
の中身は以下のようになっている。
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all md5
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
特徴としては以下の通り
- 1行につき1つのレコード
- スペース区切り
- #以降の文字は無視される
- 最初に条件を満たした認証方式で認証を行う
- 条件を満たさなかった場合に、認証は拒否される
また、書く順番としては、対象アドレスの範囲が狭いものから、認証方式の条件が緩いレコードを書きます。
認証方式はいくつかあります。
設定値 | 種別 | 説明 |
---|---|---|
trust | 無条件 | 無条件で許可 |
reject | 無条件 | 無条件で拒否 |
md5 | パスワード認証 | md5暗号化によるパスワード認証 |
password | パスワード認証 | 平文のパスワード認証 |
scram-sha-256 | パスワード認証 | scram-sha-256暗号化による認証 |
ident | Ident認証 | クライアントのマシン上の「Identification Protocol、RFC1413」サービスに依存 |
PostgreSQL13まではmd5が
PostgreSQL14以降ではscram-sha-256がデフォルト暗号化手法となっている。
まとめ
DBなので接続元は基本的には限定的なはずなのでpg_hba.confで明確に設定しておくことは大事ですね。
-
hbaとは?
host-based authenticationの略。 ↩