概要
- クライアントの接続認証を設定するファイル
- hbaとは、host-based authentication(ホストベース認証)の略
ファイルの場所
- $PGDATA(DBクラスタ)直下
$PGDATA/pg_hba.conf
フォーマット
- どの接続方法で、どのDBに対して、どのユーザ名を使って、どのIPアドレス(CIDR)から、どの認証方式を利用して接続を許可するのかを指定する
接続方法 DB DBユーザ IPアドレス(CIDR) 認証方式
- デフォルトでいくつかの設定されている
接続方法
-
local
:Unix ドメインソケットを使用する場合に使用されるもので、Windows 環境の場合は使用しない。 -
host
:TCP/IP を使った接続を行う場合に使用する。 host を指定した場合はSSLまたは非 SSLでの接続を許可する。
認証方式
-
trust
:パスワードなしで常に接続を許可 -
reject
:常に接続を拒否 -
password
:パスワード認証。パスワードを平文で認証する -
md5
:パスワード認証。ハッシュ化されたパスワードで認証する -
scram-sha-256
:パスワード認証。最も安全とされている
認証順序
- 認証の設定は上から1行ずつ順番に判定が行われ、最初に一致した行のみが認証処理に使用される。
- どれも一致しない場合は、接続が拒否される
- 接続時の認証において、ある行の認証が選択されて認証に失敗した場合、それ以降の行は無視される。(それ以降の認証が判定されることはない)つまり接続が拒否される
- デフォルトでは、ローカルホストからの接続しか許可されていないので、リモートから接続できない
- デフォルトの設定をコメントアウトしてから独自の設定を追加することが多い印象
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
# host all all 127.0.0.1/32 md5
# IPv6 local connections:
# host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
# host replication all 127.0.0.1/32 md5
# host replication all ::1/128 md5
host mydb postgres 127.0.0.1/32 md5
- デフォルトの設定をコメントアウトし、新たな設定を末尾に追加した
接続が許可される場合
$ psql -U postgres -d mydb
- 上記のコマンドでmydb(DB)に、postgres(DBユーザ)で接続する
- コマンド実行後は、パスワード入力待ちとなるため、postgres(DBユーザ)のパスワードを入力する。パスワードに問題がなければmydb(DB)に接続できる
- ※DBユーザのパスワードは、デフォルトでは設定されていない。そのため、パスワード認証が行えない。
- DBユーザのパスワードは、ユーザ作成時、または後から設定することができる。
接続が拒否される場合
$ psql -U postgres -d postgres
- postgres(DB)についての認証をpg_hba.confに設定していないため、エラーとなり接続が拒否される
設定反映
-
$ pg_ctl reload
を指定することで変更内容が反映される - つまり、再起動ではなく、再読み込み
その他アクセス制限の設定(postgresql.conf)
-
listen_addresses
パラメータ(設定の変更には再起動が必要)- サーバー側の接続を受け付けるIPアドレスを設定するパラメータ
- 接続先のホスト名、またはIPアドレスをカンマ区切りで指定する
- デフォルトでは、
listen_addresses = localhost
- 接続元のアドレスを指定するパラメータではないことに注意。これは、pg_hba.confで設定するもの
-
listen_addresses = *
に変更して使用することが多い印象
デフォルト
#listen_addresses = 'localhost'
- デフォルトでは、クライアントからの接続はローカルホスト宛しか監視しないので、リモートホストからDBサーバのアドレス宛には接続できない
- そのため、以下のように値を変更する
変更後
listen_addresses = '*'