PostgreSQL認証設定

PostgreSQL psqlメタコマンドIT

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アドレスに対して接続を許可
samehostPostgreSQLサーバ自身のIPアドレスに対して接続を許可
samenetPostgreSQLサーバが所属するサブネットに対して接続を許可

認証方式

接続時の認証方式を記載。
パスワードの暗号化アルゴリズムはpostgresql.confファイルのpassword_encryptionパラメータで設定。
password_encryptionパラメータ変更は、pg_ctl reloadコマンドで反映する。

認証方式説明password_encryption値
trustログイン時に認証不要
reject接続拒否
scram-sha-256md5より強力。暗号学的ハッシュ形式でパスワードを保存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         |         |

おすすめの書籍はこちら。
改訂前の本を読んだけど、文章が丁寧でとても読みやすかった。

コメント

タイトルとURLをコピーしました