依赖于策略的对象和原则
为了为应用程序提供安全性并防止策略对象过时或失效,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;