

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 依赖于策略的对象和原则
<a name="t_rls_object_dependency"></a>

为了为应用程序提供安全性并防止策略对象过时或失效，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 将不允许在此表上创建策略。

## 示例
<a name="t_rls_object_dependency-example"></a>

下面的示例说明了如何跟踪架构依赖关系。

```
-- 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;
```