

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 数据筛选限制
<a name="data-filtering-notes"></a>

当您授予对数据目录表的 Lake Formation 权限时，可以包括数据筛选规范，以限制对查询结果中以及与 Lake Formation 集成的引擎中某些数据的访问。Lake Formation 使用数据筛选来实现列级别安全性、行级别安全性以及单元格级别安全性。如果源数据包含嵌套结构，则可以对嵌套列定义和应用数据筛选条件。

## 有关列级别筛选的注意事项和限制
<a name="column-filtering-notes"></a>

指定列筛选的方法有三种：
+ 通过使用数据筛选条件
+ 通过使用简单的列筛选或嵌套列筛选。
+ 通过使用 TAGs.

简单列筛选仅指定要包含或排除的列的列表。Lake Formation 控制台、API 和都 Amazon CLI 支持简单的列筛选。有关示例，请参阅[Grant with Simple Column Filtering](granting-table-permissions.md#simple-column-filter-example)。

以下注意事项和限制适用于列筛选：
+ Amazon Glue 5.0 或更高版本仅支持通过 Lake Formation 对 Apache Hive 和 Apache Iceberg 表进行精细访问控制。
+ 要使用授权选项和列筛选来授予 `SELECT`，必须使用包含列表，而不是排除列表。如果没有授权选项，则可以使用包含列表或排除列表。
+ 要使用列筛选来授予对表的 `SELECT`，您必须已通过授权选项获得了对该表的 `SELECT`，且没有任何行限制。您必须有权访问所有行。
+ 如果您使用授权选项和列筛选向您账户中的主体授予 `SELECT`，则该主体在向其他主体授予权限时，必须为相同列指定列筛选，或指定部分已授权列。如果您使用授权选项和列筛选向外部账户授予 `SELECT`，则外部账户中的数据湖管理员可以将对所有列的 `SELECT` 授予其账户中的其他主体。但是，即使对所有列均具有 `SELECT`，该主体也只能查看授权外部账户查看的列。
+ 您不能对分区键应用列筛选。
+ 不能向对表中部分列拥有 `SELECT` 权限的主体授予对该表的 `ALTER`、`DROP`、`DELETE` 或 `INSERT` 权限。对于对表拥有 `ALTER`、`DROP`、`DELETE` 或 `INSERT` 权限的主体，如果您使用列筛选来授予 `SELECT` 权限，则授予无效。

以下注意事项和限制适用于嵌套列筛选：
+  您可以在数据筛选条件中包含或排除五个级别的嵌套字段。  
**Example**  

  Col1.Col1\_1.Col1\_1\_1.Col1\_1\_1\_1.Col1\_1\_1\_1\_1
+  您不能对分区列中的嵌套字段应用列筛选。
+  如果您的表架构包含顶级列名（“客户”。” ad `address` dress”）在数据筛选器中具有相同的嵌套字段表示模式（具有顶级列名`customer`和嵌套字段名的嵌套列的指定方式与数据筛选器`"customer"."address"`中的嵌套字段名称相同），则无法明确指定对顶级列或嵌套字段的访问权限，因为两者在 inclusion/exclusion 列表中使用相同的模式表示。这是不明确的，如果您指定顶级列或嵌套字段，Lake Formation 将无法解析。
+ 如果顶级列或嵌套字段的名称中包含双引号，则在数据单元格筛选条件的包含和排除列表中指定对嵌套字段的访问权限时，必须包含第二个双引号。  
**Example**  

  带双引号的嵌套列名称示例 – `a.b.double"quote`  
**Example**  

  数据筛选条件中的嵌套列表示形式示例 – ` "a"."b"."double""quote"`

## 单元格级筛选限制
<a name="cell-filtering-notes.title"></a>

请牢记以下关于行级别筛选和单元格级别筛选的注意事项和限制。
+  嵌套列、视图和资源链接不支持单元格级安全性。
+ 嵌套列也支持顶级列支持的所有表达式。但是，定义嵌套的行级别表达式时，**不**应引用分区列下的嵌套字段。
+  使用 Athena 引擎版本 3 或 Amazon Redshift Spectrum 时，所有区域均可提供单元格级别安全性。对于其他服务，只有[支持的区域：](supported-regions.md)上提及的区域提供单元格级别安全性。
+  不支持 `SELECT INTO` 语句。
+ 行筛选条件表达式不支持 `array` 和 `map` 数据类型。支持 `struct` 数据类型。
+ 可以针对表定义的数据筛选条件数量没有限制，但是对于表上的单个主体，则存在 100 个数据筛选条件的限制。
+ 要使用行筛选表达式应用数据筛选条件，必须使用授权选项获得对所有表列的 `SELECT`。当向外部账户授予权限时，此限制不适用于外部账户的管理员。
+ 如果主体是组的成员，并且主体和该组都被授予了对部分行的权限，则主体的有效行权限是主体权限和组权限的并集。
+ 在行级别筛选和单元格级别筛选中，以下列名受限：
  + ctid
  + oid
  + xmin
  + cmin
  + xmax
  + cmax
  + tableoid
  + insertxid
  + deletexid
  + importoid
  + redcatuniqueid
+ 如果将 all-rows 筛选表达式与其他带有谓词的筛选表达式同时应用于表，则 all-rows 表达式将优先于所有其他筛选表达式。
+ 当向外部账户授予行子集的权限，而外部 Amazon 账户的数据湖管理员向该账户中的委托人授予这些权限时，委托人的有效筛选谓词是该账户的谓词和直接授予委托人的任何谓词的交集。

  例如，如果账户通过谓词 `dept='hr'` 获得了行权限，而主体被单独授予了对 `country='us'` 的该权限，则主体只能访问带有 `dept='hr'` 和 `country='us'` 的行。

有关单元格级别筛选的更多信息，请参阅[Lake Formation 中的数据筛选和单元格级别安全性](data-filtering.md)。

有关使用带有行级安全策略的 Amazon Redshift Spectrum 查询表时的注意事项和限制，请参阅《Amazon Redshift 数据库开发人员指南》中的[使用 RLS 策略的注意事项和限制](https://docs.amazonaws.cn/redshift/latest/dg/t_rls_usage.html)。