本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Lake Formation 中的数据过滤器
您可以通过以下方式实现列级、行级和单元级安全性:数据筛选器. 在授予SELECT桌子上的Lake Formation 许可。
每个数据筛选器都属于数据目录中的特定表。数据筛选器包括以下信息:
-
筛选器名称
-
与筛选器关联的表的目录 ID
-
表名称
-
包含该表的数据库的名称
-
列规范 — 要在查询结果中包括或排除的列的列表。
-
行筛选器表达式 — 指定要包含在查询结果中的行的表达式。有一些限制,表达式的语法为
WHEREPartiQL 语言中的子句。要指定所有行,请输入true使用控制台中的AllRowsWildcard在 API 调用中。有关行筛选器表达式中支持的内容的更多信息,请参阅行筛选器表达式中的 PartiQL 支持.
您获得的筛选级别取决于填充数据筛选器的方式。
-
如果指定 “all columns” 通配符并提供行筛选器表达式,则仅建立行级安全性(行筛选)。
-
如果包括或排除特定列,并使用全行通配符指定 “所有行”,则仅建立列级安全性(列筛选)。
-
如果包括或排除特定列,同时提供行筛选器表达式,则是在建立单元格级别的安全性(单元格过滤)。
以下来自 Lake Formation 控制台的屏幕截图显示了一个执行单元级过滤的数据筛选器。针对的查询orders表,它限制了对customer_name列在行中product_type列包含 “pharma”。在受限行中,查询结果返回NULL(对于 )customer_namecolumn.
请注意使用单引号将字符串文字括起来,'pharma'.
您可以使用 Lake Formation 控制台创建此数据过滤器,也可以将以下请求对象提供给CreateDataCellsFilterAPI 操作。
{ "Name": "restrict-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type='pharma'"}, "ColumnWildcard": { "ExcludedColumnNames": ["customer_name"] } }
您可以根据需要为表进行任意数量的数据筛选器。要执行该操作,您需要SELECT在表上使用授予选项的权限。默认情况下,数据湖管理员有权创建数据筛选器在该账户的所有表上。在向委托人授予对表的权限时,通常只使用可能的数据筛选器子集。例如,您可以为orders那是一张表 row-security-only 数据筛选器。参考前面的屏幕截图,你可以选择访问所有列选项并包含一个行筛选器表达式product_type<>pharma. 此数据筛选器的名称可能是no-pharma. 它限制对所有具有product_type列设置为 “药房”。
的请求对象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"] }
然后你可以授予SELECT在orders表中带有restrict-pharma管理用户的数据筛选器,以及SELECT在orders表中带有no-pharma非管理用户的数据筛选器。对于医疗保健领域的用户,你可以授予SELECT在orders表具有对所有行和列的完全访问权限(无数据筛选器),或者可能使用另一个限制访问定价信息的数据筛选器。