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

7.5.2 機密オブジェクトやロールを確認する方法

機密マトリクスに登録された内容と、PostgreSQLのシステムカタログで管理される機密オブジェクトやロールの状態とが一致していることを確認する方法を示します。ここで示す方法は、ひとつの例にすぎません。

確認者

確認者は、pg_confidential_management_support拡張が持つ表へのSELECT権限と、システム表における、対象の機密マトリクスに追加された機密オブジェクトとロールの情報へのSELECT権限を付与されていなければなりません。少なくとも、確認対象の機密マトリクスの機密管理ロールとスーパーユーザーは、確実にそのような権限を持っています。

手順

確認するための手順は、以下の3つのフェーズに分かれます。不一致を検出したならば、監査ログを利用して、不一致を発生させた原因を調査してください。そして、一致するように修正してください。

注意

  • 正しい状態に戻すと、様々なオブジェクトが連鎖的に変更(修正)される場合があります。そうすると、不正な操作の痕跡が消されてしまうかもしれません。ですから、設計と一致していない箇所をすべて調査し、調査に必要な監査ログを確保してから、修正することをお勧めします。

  • ここで紹介するpgx_get_privileges_on_matrix()関数は、機密オブジェクトやロールの数が大きいと、非常に大きな表を出力する可能性があります。この表のサイズがPostgreSQLのwork_memパラメータの値をこえると、PostgreSQLの仕様にしたがってI/Oが発生し、遅くなります。ですから、この関数を実行するセッションの中で、できる限り大きな値をwork_memに指定することをお勧めします。

(1) 機密マトリクスの状態が、設計と同じであることを確認する

不一致なものを検出した場合には、この拡張が提供するpgx_alter_confidential_level()などの関数を実行して正しい状態に戻してください。

  • 機密マトリクスの属性

    pgx_confidential_matrixテーブルを使って確認してください。

  • 登録されている機密レベルの数と各機密レベルの属性

    pgx_confidential_levelテーブルの中から、確認対象のclevmatidと一致する行を参照して確認してください。機密マトリクスの識別子を知るためには、pgx_confidential_matrixテーブルのcmatidを参照してください。

  • 登録されている機密グループの数と各機密グループの属性

    pgx_confidential_roleテーブルの中から、ccolmatidが確認対象の機密マトリクスの識別子と一致する行を参照して確認してください。

  • 機密レベルに設定されている機密グループの権限

    pgx_confidential_privilegesテーブルを参照してください。ただし、このテーブルでは、機密レベルや機密グループは識別子として表現されています。機密レベルの名前や機密グループの名前で確認したいならば、pgx_confidential_levelテーブルやpgx_confidential_roleテーブルと結合してください。

(2) 登録されている機密オブジェクトとロールが正しいかを確認する

機密管理支援機能の定義と、機密オブジェクトやロールの定義とが一致していることを確認します。不一致なものを検出した場合には、この拡張が提供するpgx_alter_confidential_level()などの関数を実行して正しい状態に戻してください。

  • 機密レベルに登録されている機密オブジェクトの数が設計と同じか

  • 各機密オブジェクトの属性が、その機密オブジェクトが属する機密レベルの属性と一致しているか

    pgx_get_attribute_of_objects()を使って、これらを確認することをお勧めします。なぜならば、この関数は、機密オブジェクトの状態をPostgreSQLのシステムカタログから得て、定義と比較できるような表を出力するからです。表の形式は、“B.7 定義の参照およびシステムカタログとの比較を支援する関数”を参照してください。

  • 機密グループに登録されているロールの数が設計と同じか。

  • 各ロールの属性が、そのロールが属する機密グループの属性と一致しているか。

    pgx_get_attribute_of_roles()を使って、これらを確認することをお勧めします。この関数が返却する表の形式は、“B.7 定義の参照およびシステムカタログとの比較を支援する関数”を参照してください。

(3) 機密オブジェクトへのアクセス権限を確認する

機密オブジェクトへのアクセス権限を付与されているロールと、権限の内容が機密マトリクスの定義と一致していることを確認します。pgx_get_privileges_on_matrix()関数を使用すると便利です。出力フォーマットの詳細は、“7.3.5 機密権限を機密グループに付与する”を参照してください。

もし、いずれかの機密レベルやロールに着目して調べたい場合は、以下の関数を使用してください。

  • pgx_get_privileges_on_level_and_group()

  • pgx_get_privileges_on_object()

  • pgx_get_privileges_on_role()

ポイント

様々なSQL文で分析するために、大きな表を何度も出力させることは非効率です。以下のように、この関数を実行するクエリをINSERT文に指定すると効率的に分析を行うことができます。

INSERT INTO temp_table_for_analysis SELECT pgx_get_privileges_on_matrix('matrix_foo')