ポリシーに依存するオブジェクトと原則
アプリケーションにセキュリティを提供し、ポリシーオブジェクトが古くなったり、無効になったりすることを防止するため、Amazon Redshift は RLS ポリシーによって参照されるオブジェクトの削除や変更を許可していません。
以下のものは、Amazon Redshift が RLS ポリシー用にトラッキングするスキーマオブジェクトの従属関係を一覧表示します。
-
ターゲットテーブルのスキーマオブジェクトの従属関係をトラッキングするとき、Amazon Redshift は次のルールに従います。
ターゲットテーブルを削除するとき、Amazon Redshift は関係、ユーザー、ロール、パブリックからポリシーをデタッチします。
ターゲットテーブル名の名前を変更しても、アタッチされたポリシーには影響しません。
最初にポリシーを削除またはデタッチしない限り、ポリシー定義内で参照対象のターゲットテーブルの列を削除することはできません。これは、CASCADE オプションが指定されている場合にも当てはまります。ターゲットテーブルの他の列を削除できます。
ターゲットテーブルの参照列の名前を変更することはできません。参照列の名前を変更するには、まずポリシーをデタッチします。これは、CASCADE オプションが指定されている場合にも当てはまります。
CASCADE オプションを指定しても、参照列のタイプを変更できません。
ルックアップテーブルのスキーマオブジェクトの依存をトラッキングするとき、Amazon Redshift は次のルールに従います。
ルックアップテーブルは削除できません。ルックアップテーブルを削除するには、まずルックアップテーブルが参照対象のポリシーを削除します。
ルックアップテーブルの名前を変更することはできません。ルックアップテーブルの名前を変更するには、まずルックアップテーブルが参照対象のポリシーを削除します。これは、CASCADE オプションが指定されている場合にも当てはまります。
ポリシー定義で使用されているルックアップテーブルの列は削除できません。ポリシー定義で使用されているルックアップテーブルの列を削除するには、まずルックアップテーブルが参照対象のポリシーを削除します。これは、ALTER TABLE DROP COLUMN ステートメントで CASCADE オプションが指定されているときにも適用されます。ルックアップテーブルの他の列を削除できます。
ルックアップテーブルの参照列の名前を変更することはできません。参照列の名前を変更するには、まずルックアップテーブルの参照対象となるポリシーを削除します。これは、CASCADE オプションが指定されている場合にも当てはまります。
参照列のタイプを変更することはできません。
ユーザーまたはロールを削除すると、Amazon Redshift はそのユーザーまたはロールにアタッチされているすべてのポリシーを自動的にデタッチします。
DROP SCHEMA ステートメントで CASCADE オプションを使用するとき、Amazon Redshift はスキーマの関係も削除します。削除されたスキーマの関係に依存する他のスキーマの関係もすべて削除します。ポリシーのルックアップテーブルである関係の場合、Amazon Redshift は DROP SCHEMA DDL に失敗します。DROP SCHEMA ステートメントによって削除された関係の場合、Amazon Redshift はそれらの関係にアタッチされているすべてのポリシーをデタッチします。
ルックアップ関数 (ポリシー定義内で参照される関数) は、ポリシーも削除する場合に限り、削除できます。これは、CASCADE オプションが指定されている場合にも当てはまります。
ポリシーがテーブルにアタッチされると、Amazon Redshift はこのテーブルが別のポリシーのルックアップテーブルであるかどうか確認します。この場合、Amazon Redshift はこのテーブルにポリシーのアタッチを許可しません。
RLS ポリシーの作成時に、Amazon Redshift はこのテーブルが他の RLS ポリシーのターゲットテーブルであるかどうか確認します。この場合、Amazon Redshift はこのテーブルにポリシーの作成を許可しません。
例
次の例では、スキーマの依存がどのようにトラッキングされるかについて示しています。
-- The CREATE and ATTACH policy statements for `policy_events` references some -- target and lookup tables. -- Target tables are tickit_event_redshift and target_schema.target_event_table. -- Lookup table is tickit_sales_redshift. -- Policy `policy_events` has following dependencies: -- table tickit_sales_redshift column eventid, qtysold -- table tickit_event_redshift column eventid -- table target_event_table column eventid -- schema public and target_schema CREATE RLS POLICY policy_events WITH (eventid INTEGER) USING ( eventid IN (SELECT eventid FROM tickit_sales_redshift WHERE qtysold <3) ); ATTACH RLS POLICY policy_events ON tickit_event_redshift TO ROLE analyst; ATTACH RLS POLICY policy_events ON target_schema.target_event_table TO ROLE consumer;