ページの先頭行へ戻る
Enterprise Postgres 15 セキュリティ運用ガイド

B.4 機密権限操作関数

関数名

戻り値

説明

pgx_grant_confidential_privilege(confidential_matrix_name varchar, confidential_level_name varchar, confidential_group_name varchar, privilege json)

void

機密権限を付与します。

指定された機密マトリクスの機密管理ロールだけが、この関数を実行できます。

confidential_level_nameで指定された機密レベルへのアクセス権限を、confidential_group_nameで指定された機密グループに付与します。

繰り返してこの関数を実行したときには、単に付与する権限を追加します。同じ権限を重複して付与してもエラーにはなりません。

付与する権限は、privilegeで指定します。privilegeは、以下のように、キーに機密オブジェクトの型を指定し、値に権限の配列を指定します。

'{
  "table":["SELECT", "INSERT", "UPDATE", "DELETE"],
  "schema":["CREATE", "USAGE"],
  "rowset":["ALL"]
}'

指定できる権限は、機密オブジェクトの型に依存して、異なります。

rowset型は、CREATE POLICY文のFOR句に指定できる権限です。

rowset型以外では、機密オブジェクトの型に応じた、GRANT文で付与できる権限です。

ALLを指定した場合には、その型で指定できるすべての権限を列挙したとみなします。

つまり、pgx_confidential_privilegeテーブルのcpriaclカラムには、ALLが現れません。

GRANT文のWITH GRANT OPTION句と同じような指定はできません。なぜならば、機密管理ロールだけが、この機能を使って、機密オブジェクトへのアクセス権限を変更するべきだからです。

PUBLICへ権限を付与した機密オブジェクトをターゲットにするときには、注意が必要です。なぜならば、PUBLICへ権限を付与することは、機密マトリクスに登録されたすべてのロールへ権限を与えていることと同じだからです。もし、各ロールにPUBLICを利用して間接的に付与された権限が、そのロールに与えられるべきではないことが機密権限で定義されているならば、この関数は失敗します。同様に、機密マトリクスに登録されていないグループロールを利用して間接的に付与された権限も、この関数は検査します。このとき、継承のチェインを再帰的に検査します。

pgx_revoke_confidential_privilege(confidential_matrix_name varchar, confidential_level_name varchar, confidential_group_name varchar, privilege json)

void

機密権限を剥奪します。

指定された機密マトリクスの機密管理ロールだけが、この関数を実行できます。

confidential_level_nameで指定された機密レベルへのアクセス権限を、confidential_group_nameで指定された機密グループから剥奪します。

付与されていない権限を剥奪しても失敗しません。

剥奪する権限は、privilegeで指定します。指定方法は、pgx_grant_confidential_privilege()と同しです。

PUBLICへ権限を付与した機密オブジェクトをターゲットにするときには、注意が必要です。なぜならば、PUBLICへ権限を付与することは、機密マトリクスに登録されたすべてのロールへ権限を与えていることと同じだからです。もし、各ロールにPUBLICを利用して間接的に付与された権限が、そのロールに与えられるべきではないことが機密権限で定義されているならば、この関数は失敗します。同様に、機密マトリクスに登録されていないグループロールを利用して間接的に付与された権限も、この関数は検査します。このとき、継承のチェインを先祖まで検査します。