数据筛选限制
当您授予对数据目录表的 Lake Formation 权限时,可以包括数据筛选规范,以限制对查询结果中以及与 Lake Formation 集成的引擎中某些数据的访问。Lake Formation 使用数据筛选来实现列级别安全性、行级别安全性以及单元格级别安全性。如果源数据包含嵌套结构,则可以对嵌套列定义和应用数据筛选条件。
有关列级别筛选的注意事项和限制
指定列筛选的方法有三种:
-
通过使用数据筛选条件
-
通过使用简单的列筛选或嵌套列筛选。
-
通过使用 TAG。
简单列筛选仅指定要包含或排除的列的列表。Lake Formation 控制台、API 和 AWS CLI 均支持简单列筛选。有关示例,请参阅Grant with Simple Column Filtering。
以下注意事项和限制适用于列筛选:
-
AWS Glue ETL 作业不支持列筛选。如果对作业引用的任何表应用列筛选,则作业将失败。
-
要使用授权选项和列筛选来授予
SELECT
,必须使用包含列表,而不是排除列表。如果没有授权选项,则可以使用包含列表或排除列表。 -
要使用列筛选来授予对表的
SELECT
,您必须已通过授权选项获得了对该表的SELECT
,且没有任何行限制。您必须有权访问所有行。 -
如果您使用授权选项和列筛选向您账户中的主体授予
SELECT
,则该主体在向其他主体授予权限时,必须为相同列指定列筛选,或指定部分已授权列。如果您使用授权选项和列筛选向外部账户授予SELECT
,则外部账户中的数据湖管理员可以将对所有列的SELECT
授予其账户中的其他主体。但是,即使对所有列均具有SELECT
,该主体也只能查看授权外部账户查看的列。 -
您不能对分区键应用列筛选。
-
不能向对表中部分列拥有
SELECT
权限的主体授予对该表的ALTER
、DROP
、DELETE
或INSERT
权限。对于对表拥有ALTER
、DROP
、DELETE
或INSERT
权限的主体,如果您使用列筛选来授予SELECT
权限,则授予无效。
以下注意事项和限制适用于嵌套列筛选:
-
您可以在数据筛选条件中包含或排除五个级别的嵌套字段。
Col1.Col1_1.Col1_1_1.Col1_1_1_1.Col1_1_1_1_1
-
您不能对分区列中的嵌套字段应用列筛选。
-
如果您的表架构包含顶级列名称 ("customer"."address"),在数据筛选条件中具有相同的嵌套字段表示形式模式(具有顶级列名称
customer
和嵌套字段名称address
的嵌套列在数据筛选条件中指定为"customer"."address"
),则您无法明确指定对顶级列或嵌套字段的访问权限,因为两者在包含/排除列表中使用相同的模式表示形式。这是不明确的,如果您指定顶级列或嵌套字段,Lake Formation 将无法解析。 -
如果顶级列或嵌套字段的名称中包含双引号,则在数据单元格筛选条件的包含和排除列表中指定对嵌套字段的访问权限时,必须包含第二个双引号。
带双引号的嵌套列名称示例 –
a.b.double"quote
数据筛选条件中的嵌套列表示形式示例 –
"a"."b"."double""quote"
单元格级筛选限制
请牢记以下关于行级别筛选和单元格级别筛选的注意事项和限制。
-
嵌套列、视图和资源链接不支持单元格级安全性。
-
嵌套列也支持顶级列支持的所有表达式。但是,定义嵌套的行级别表达式时,不应引用分区列下的嵌套字段。
-
使用 Athena 引擎版本 3 或 Amazon Redshift Spectrum 时,所有区域均可提供单元格级别安全性。对于其他服务,只有支持的区域上提及的区域提供单元格级别安全性。
-
不支持
SELECT INTO
语句。 -
行筛选条件表达式不支持
array
和map
数据类型。支持struct
数据类型。 -
可以针对表定义的数据筛选条件数量没有限制,但是对于单个主体,最多只能针对一个表定义 100 个数据筛选条件
SELECT
权限。 -
可包含在对一个表的授权中的最大数据筛选条件数量为 100。
-
要使用行筛选表达式应用数据筛选条件,必须使用授权选项获得对所有表列的
SELECT
。当向外部账户授予权限时,此限制不适用于外部账户的管理员。 -
如果主体是组的成员,并且主体和该组都被授予了对部分行的权限,则主体的有效行权限是主体权限和组权限的并集。
-
在行级别筛选和单元格级别筛选中,以下列名受限:
ctid
oid
xmin
cmin
xmax
cmax
tableoid
insertxid
deletexid
importoid
redcatuniqueid
-
如果将 all-rows 筛选表达式与其他带有谓词的筛选表达式同时应用于表,则 all-rows 表达式将优先于所有其他筛选表达式。
-
当向外部 AWS 账户授予对部分行的权限,并且外部账户的数据湖管理员向该账户中的主体授予这些权限时,主体的有效筛选谓词是该账户的谓词和直接向主体授予的任何谓词的交集部分。
例如,如果账户通过谓词
dept='hr'
获得了行权限,而主体被单独授予了对country='us'
的该权限,则主体只能访问带有dept='hr'
和country='us'
的行。
有关单元格级别筛选的更多信息,请参阅Lake Formation 中的数据筛选和单元格级别安全性。