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

7.2.3 機密レベルの定義に従って、機密オブジェクトを分類する

7.2.3.1 機密オブジェクトを定義する

まず、管理対象にしたいスキーマ、テーブルなどの定義の一覧を参照して、機密オブジェクトを定義してください。前述したように、機密オブジェクトの型にはcolumn型やrowset型などの多様な型が用意されているので、データの内容に基づいて機密オブジェクトを定義することができます。

rowset型の機密オブジェクトのアクセス制御は、PostgreSQLの行レベルセキュリティの機能を内部的に使います。ですから、行の集合を指定する方法は、CREATE POLICY文のAS句、USING句、WITH CHECK句の仕様に従います。また、rowset型の機密オブジェクトの定義は、rowset型の機密オブジェクトを機密レベルに登録する関数の引数で指定します。この機能は、rowset型の機密オブジェクトが追加されたときに、POLICYを有効化するために、ENABLE ROW LEVEL SECURITY 句を指定してALTER TABLE文を実行します。

今は、table型の機密オブジェクトとして外部テーブルを登録することはできません。

ポイント

機密オブジェクトへの権限をPUBLICに付与しないことを推奨します。PUBLICへ権限を付与することは、機密マトリクスに登録されたすべてのロールへ権限を与えていることと同じです。機密オブジェクトにアクセスするすべてのロールを、この機能を使って管理するならば、このようなことは意味がありません。もしPUBLICに機密オブジェクトへの権限を付与しても、この機能に含まれる関数は、各ロールに許された権限を超えないように検査し、超えていたならば失敗します。

注意

  • 機密オブジェクトがcolumn型のときには注意が必要です。なぜならば、table型を同時に設定すると、table型の権限が優先されるからです。

    例えば、あるテーブルTの特別なカラムCだけからSELECT権を剥奪したいならば、テーブルTへSELECT権限を付与せずに、カラムC以外のカラムを列挙して、それらにSELECT権を付与してください。このことは、PostgreSQLの列への権限付与の仕様に従っています。

    非常に多くのカラムを列挙しなければならないならば、特別なカラムを新しいテーブルに移動させ、既存のアプリケーションに両方のテーブルをJOINするようなVIEWを見せるのも良いアイディアかもしれません。

  • 機密オブジェクトがrowset型のときには、rowset型に指定する権限と同じ権限をtable型にも設定してください。SQL文でデータにアクセスするときには、最初にテーブルへのアクセス権限があることがチェックされるからです。その後に、条件に合致した行であったときにrowsetの権限がチェックされます。このことは、PostgreSQLの行レベルセキュリティの仕様に従っています。

7.2.3.2 機密オブジェクトを分類する

機密オブジェクトを機密レベルの定義にしたがって分類してください。

異なる機密マトリクスの機密レベルであったとしても、ひとつの機密オブジェクトを複数の機密レベルに分類することはできません。