本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
《Lake Formation》中的数据过滤器
您可以通过创建数据筛选条件来实现列级、行级和单元级和单元级安全性。在授予表的 La SELECT
ke Formation 权限时,可以选择数据筛选器。
每个数据筛选条件都属于数据目录中的特定表。数据筛选条件包括以下信息:
-
过滤器名称
-
与筛选器关联的表的目录 ID
-
表名称
-
包含该表的数据库的名称
-
列规范 — 要在查询结果中包括或排除的列的列表。
-
行筛选表达式-用于指定要包含在查询结果中的行的一种表达式。在某些限制下,该表达式的语法与 PartiQL 语言中的
WHERE
子句相同。要指定所有行,请在控制台true
中输入或在 API 调用AllRowsWildcard
中使用。有关行筛选表达式中支持的内容的更多信息,请参阅行过滤器表达式中支持 PartiQL。
您获得的筛选级别取决于填充数据筛选器的方式。
-
如果指定“所有列”通配符并提供行筛选条件表达式,则仅建立行级安全性(行筛选)。
-
如果包含或排除特定列并使用所有行通配符指定 “所有行”,则仅建立列级安全性(列筛选)。
-
如果包含或排除特定列,同时提供行筛选条件表达式,则建立单元格级别的安全性(单元格筛选)。
以下来自 Lake Formation 控制台的屏幕截图显示了执行单元格级筛选的数据过滤器。对于针对orders
表的查询,它限制对该列的访问权限,并且查询结果仅返回该customer_name
product_type
列包含 “pharma” 的行。

请注意,使用单引号将字符串文字括起来。'pharma'
您可以使用 Lake Formation 控制台创建此数据过滤器,也可以向 CreateDataCellsFilter
API 操作提供以下请求对象。
{ "Name": "restrict-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type='pharma'"}, "ColumnWildcard": { "ExcludedColumnNames": ["customer_name"] } }
您可以根据需要为表创建任意数量的数据筛选条件。为此,您需要在表上使用授予选项的SELECT
权限。默认情况下,Data Lake 管理员有权在该账户中的所有表上创建数据筛选器。在向委托人授予表权限时,通常只使用可能的数据筛选器的子集。例如,您可以为作为数据筛选器的orders
表创建第二个row-security-only数据筛选器。参照前面的屏幕截图,您可以选择 “访问所有列” 选项,并添加行筛选表达式product_type<>pharma
。这个数据过滤器的名称可能是no-pharma
。它限制了对product_type
列设置为 “pharma” 的所有行的访问权限。
此数据筛选器 CreateDataCellsFilter
API 操作的请求对象如下。
{ "Name": "no-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type<>'pharma'"}, "ColumnNames": ["customer_id", "customer_name", "order_num" "product_id", "purchase_date", "product_type", "product_manufacturer", "quantity", "price"] }
然后,您可以将带有restrict-pharma
数据筛选器的orders
表授予SELECT
管理用户,SELECT
将带有no-pharma
数据筛选器的orders
表授予非管理用户。对于医疗保健领域的用户,你可以在orders
表格SELECT
上授予对所有行和列的完全访问权限(无数据筛选器),或者可能使用另一个限制访问定价信息的数据筛选器。