- 类别:
POLICY_CONTEXT¶
根据一个或多个上下文函数的值模拟查询结果,这让您可以确定策略如何影响查询结果。 上下文函数根据查询的当前上下文返回一个值,例如,谁在执行查询或执行查询的账户。策略主体通常使用上下文函数来确定要从策略返回哪个值。
此函数评估以下策略,以确定查询结果:
语法¶
EXECUTE USING
POLICY_CONTEXT( <arg_1> => '<string_literal>' [ , <arg_2> => '<string_literal>' , ... , <arg_n> => '<string_literal>' ] )
AS
SELECT <query>
实参¶
arg_1 => 'string_literal'
将上下文函数及其值指定为字符串。
必填。必须至少指定一个函数及其值。
Snowflake 支持下面的上下文函数及其值作为实参:
要确定用作字符串值的格式,请使用该函数执行查询。例如:
SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+
字符串值应为
'JSMITH'
。请注意,如果指定 CURRENT_AVAILABLE_ROLES 和多个角色值(如
ROLE1
和ROLE2
),请将角色列表括在方括号中,如下所示:['ROLE1', 'ROLE2']
arg_2 => 'string_literal' , ... , arg_n => 'string_literal'
指定上下文函数的逗号分隔列表及其作为字符串的值。
可选。
query
指定要查询一个或多个表或视图的 SQL 表达式。
必填。
使用说明¶
此函数需要:
至少一个实参,用于指定受支持的上下文函数及其值。
如果表受策略保护,则必须为指定的用户或角色授予以下权限:
表或视图的 OWNERSHIP、以及
策略的 APPLY 权限(在账户级别或策略本身上):
ACCOUNT 的 APPLY MASKING POLICY 或 MASKING POLICY
policy_name
的 APPLYACCOUNT 的 APPLY ROW ACCESS POLICY 或 ROW ACCESS POLICY
policy_name
的 APPLYACCOUNT 的 APPLY AGGREGATION POLICY 或 AGGREGATION POLICY
policy_name
的 APPLYACCOUNT 的 APPLY PROJECTION POLICY 或 PROJECTION POLICY
policy_name
的 APPLY
如果符合以下任一条件,Snowflake 将返回错误消息:
使用一个或多个不受支持的函数作为实参。Snowflake 仅支持 实参 部分中列出的函数。
未正确指定函数字符串值,包括将字符串用于不存在的值(例如,没有账户、用户或角色)。
SELECT
query
表达式未正确查询表或视图(例如,根本没有指定表或视图)。某些数据共享用例(请参阅下一个要点)。
数据共享:
数据共享使用者不能使用此函数来模拟数据共享提供商提供的表或视图查询结果。
此外,如果使用者
query
表达式包含通过 Secure Data Sharing 提供的表或视图,以及使用者账户中未与数据共享提供商账户关联的另一个表或视图(即他们自己的表或视图),则 Snowflake 将返回错误消息。数据共享提供商账户可以模拟数据共享使用者账户如何查看通过共享提供的表或视图。
为此,数据共享提供商将使用者账户名称指定为实参。例如:
execute using policy_context(current_account => '<consumer_account_name>') ... ;
结果取决于以下因素:
在列上设置的掩码策略或投影策略(如果有)。
在表或视图上设置的行访问策略或聚合策略(如果有)。
策略定义。
query
表达式。授予角色的权限。
授予用户的角色(包括角色层次结构)。
此函数中的实参。
示例¶
模拟查询 empl_info
表的 PUBLIC 系统角色的效果:
execute using policy_context(current_role => 'PUBLIC') as select * from empl_info;