DML オペレーションのマスキング動作について
pg_columnmask は、INSERT、UPDATE、DELETE、MERGE ステートメントを含むすべての DML オペレーションに一貫して適用されます。これらのオペレーションを実行すると、Aurora PostgreSQL はコア原則に従ってデータをマスクします。ストレージから読み取られたデータは、現在のユーザーの適用可能なポリシーに従ってマスクされます。
マスキングは、次のようなクエリコンポーネントの一部に影響します。
WHERE 句
JOIN 条件
サブクエリ
RETURNING 句
これらのコンポーネントはすべて、元のデータではなくマスクされた値で動作します。データはマスクされていない状態でストレージに書き込まれますが、ユーザーが読み返すときにはマスクされたビューのみが表示されます。
Aurora PostgreSQL は、マスクされた値ではなく、実際の保存値に対してすべてのデータベース制約 (NOT NULL、UNIQUE、CHECK、FOREIGN KEY) を適用します。これにより、マスキング関数が慎重に設計されていない場合に、明らかな不整合が生じることがあります。
マスキングは列レベルのアクセス許可とともに機能します。
SELECT 権限のないユーザーは列を読み取ることができません
SELECT 権限を持つユーザーは、該当するポリシーに従ってマスクされた値を表示します。