スケールアウトでは、多数のノードが存在する可能性があり、各ノードとロールの組合せに対し、個々にユーザーマッピングを定義するのは大変です。
そこで、インスタンスの作成時のスーパーユーザーおよび全ノードに対してログイン可能なロールに対し、それらロールを定義した際、および新たなノードを定義した際に、それらのユーザー/ロールを利用して各ノードに接続するためのユーザーマッピングを自動で定義する機能を提供します。
なお、これらのユーザーマッピングは、クラスタ共通のシステムカタログpgx_shuser_mappingに登録されます。
自動で設定される値
ユーザーマッピングには、以下の値が自動で設定されます。
ロール名
パスワード
ロールの作成時にパスワードを指定した場合
ロールに対する各種SSL証明書のデフォルト値
sslkey '~/.postgresql/(ロール名).key'
sslcert '~/.postgresql/(ロール名).crt'
以下に例を示します。
SET pgx_ddl_target_node = 'ALLNODES' CREATE ROLE role_sc LOGIN PASSWORD 'pw'; SELECT umoptions FROM pgx_shuser_mapping; umoptions ---------------- {user=role_sc,password=pw,sslkey=~/.postgresql/role_sc.key,sslcert=~/.postgresql/role_sc.cert}
ロール情報の変更に伴うユーザーマッピングの値の変更
ALTER文によってロールの情報を変更した場合、自動で作成されたユーザーマッピングの値も変更されます。
新たにパスワードが指定された場合、そのパスワードがpasswordオプションに設定されます。
ロール名が変更された場合、user,sslkey,sslcertオプションが、それぞれ新しいロール名に対応した値に設定されます。
注意
CREATE文やALTER文でロールのパスワードを設定する際、パスワード文字列が既にMD5またはSCRAMの暗号化形式になっている場合は、CREATE文の場合はユーザーマッピングは作成されず、また、ALTER文の場合は、ユーザーマッピングのパスワードの値は変更されません。
これは、ユーザーマッピングのパスワードの値には、暗号化前のパスワード文字列を設定する必要がありますが、指定のパスワードを暗号化した文字列を復号できないためです。
この場合、手動で各ノードに対するユーザーマッピングを作成してください。ただし、このユーザーマッピングを作成する際、パスワードはサーバに平文で送信されます。クライアントのコマンド履歴やサーバのログにこれが残ってしまう可能性があります。パスワード認証ではなく、SSL認証などを利用することで、これを防ぐことができます。