依赖于策略的对象和原则
为了为应用程序提供安全性并防止策略对象过时或失效,Amazon Redshift 不允许删除或更改 RLS 策略引用的对象。
以下示例说明了如何跟踪架构依赖关系。
-- 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;
下面列出了 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 将不允许在此表上创建策略。