PostgreSQLの接続/認証設定についてのメモ書き。
概要
PostgreSQLの認証設定はpg_hba.confファイルで行う。
①タイプ ②データベース ③ユーザ ④接続元アドレス ⑤認証方式
をpg_hba.confに記載する。
各項目は別途説明。以下は接続元としてループバックアドレスを指定している。
※ ①〜⑤の数字は説明のために記載。設定時には記載しない事。
# TYPE DATABASE USER ADDRESS METHOD
①host ②all ③all ④127.0.0.1/32 ⑤trust
設定を反映するにはPostgreSQLを再起動するか、pg_ctl reloadコマンドを実行する。
※ マスターサーバプロセス(postmasterプロセス)にSIGHUPシグナルを送ると設定が反映される。pg_ctlコマンドはマスターサーバプロセスの実行ユーザで行う。以下は実行ユーザがpostgresユーザの場合。
# $PGDATA環境変数にデータディレクトリが設定されているか確認
postgres$ echo $PGDATA
/var/lib/postgresql/data
# 設定反映
postgres$ pg_ctl reload
server signaled
# PostgreSQLの稼働確認
postgres$ pg_ctl status
pg_ctl: server is running (PID: 1)
$PGDATA環境変数が設定されていない場合、-Dオプションでデータディレクトリを指定。
postgres$ pg_ctl reload -D /var/lib/postgresql/data
タイプ
指定できるタイプはpostgresql.confファイルのlisten_addressesパラメータで決まる。
PostgreSQLサーバは、listen_addressesパラメータで指定したインターフェースの通信を監視する。
全て監視する場合は’*’を指定。通信は別途ファイアウォールで制御するので、基本これが多い。
listen_addresses = '*'
インターフェースはカンマ区切りで複数指定できる。ローカルのみ(Unixドメインソケット)の場合は空文字を指定する。
listen_addressesパラメータはPostgreSQLサービス起動時に読み込まれる。
listen_addressesパラメータの設定に合わせて、以下タイプを設定する。
通信 | タイプの値 |
---|---|
ローカル(Unixドメインソケット) | local |
リモート(ループバック接続含む) | host、hostsslなど |
データベース
接続を許可するデータベース名を記載。接続先のデータベースが複数ある場合はカンマで区切る。
データベース名の代わりに、以下の値を設定できる。
データベース値 | 説明 |
---|---|
all | 全データベースへの接続許可 |
sameuser | ユーザ名とデータベース名が一致している場合に接続できる |
samerole | ユーザが所属するロール名とデータベース名が一致している場合に接続できる |
replication | プライマリサーバの更新情報をスタンバイサーバにレプリケーションする場合に指定 |
ユーザ
接続ユーザ名を記載。
ロール名を指定する場合は先頭に”+”を付ける。その場合、ロールに所属するユーザが接続できる。
allを指定した場合、全ユーザが接続できる。
接続元アドレス
接続元のIPアドレス範囲(CIDR表記)、名前解決できるホスト名を記載。IPアドレス範囲はIPv4、IPv6どちらでも可。
以下の値も指定できる。
アドレス値 | 説明 |
---|---|
all | 全てのIPアドレスに対して接続を許可 |
samehost | PostgreSQLサーバ自身のIPアドレスに対して接続を許可 |
samenet | PostgreSQLサーバが所属するサブネットに対して接続を許可 |
認証方式
接続時の認証方式を記載。
パスワードの暗号化アルゴリズムはpostgresql.confファイルのpassword_encryptionパラメータで設定。
password_encryptionパラメータ変更は、pg_ctl reloadコマンドで反映する。
認証方式 | 説明 | password_encryption値 |
---|---|---|
trust | ログイン時に認証不要 | – |
reject | 接続拒否 | – |
scram-sha-256 | md5より強力。暗号学的ハッシュ形式でパスワードを保存 | scram-sha-256 |
md5 | 平文よりは良いが、現在MD5は安全ではない。pg_hba.conf ファイルではmd5が設定されているが、パスワード自体がscram-sha-256で保存されている場合、自動的にSCRAM-SHA-256認証方式が使用される | md5 |
保存されているパスワード方式は以下で確認。
# select rolname,rolpassword from pg_authid;
rolname | rolpassword
---------------------------+-----------------------------------------------------------------------
admin | SCRAM-SHA-256$4096:**********************
確認
設定はシステムビューpg_hba_file_rulesで確認。
error列に値が入っている行は問題あり。
# select * from pg_hba_file_rules;
line_number | type | database | user_name | address | netmask | auth_method | options | error
-------------+-------+---------------+-----------+-----------+-----------------------------------------+---------------+---------+-------
89 | local | {all} | {all} | | | trust | |
91 | host | {all} | {all} | 127.0.0.1 | 255.255.255.255 | trust | |
おすすめの書籍はこちら。
改訂前の本を読んだけど、文章が丁寧でとても読みやすかった。
コメント