POLICY_REFERENCES¶
为每个获分配指定策略的对象返回一行,或者 为分配给指定对象的每个策略返回一行。
另请参阅:POLICY_REFERENCES 视图 (Account Usage 视图)
语法¶
仅适用于网络策略对象:
POLICY_REFERENCES( POLICY_NAME => '<string>' , POLICY_KIND => 'NETWORK_POLICY' )
适用于其他策略对象:
POLICY_REFERENCES( POLICY_NAME => '<string>' )
适用于所有策略对象:
POLICY_REFERENCES( REF_ENTITY_NAME => '<string>' , REF_ENTITY_DOMAIN => '<string>' )
实参¶
POLICY_NAME => 'string'
指定策略名称。
整个策略名称必须放在单引号内。
如果策略名称区分大小写或包含任何特殊字符或空格,则需要使用双引号来处理大小写/字符。双引号必须放在单引号内,即
'"<policy_name>"'
。
目前,Snowflake 在将策略名称指定为实参时支持以下策略:
POLICY_KIND => 'NETWORK_POLICY'
仅当
POLICY_NAME
值是一个网络策略时使用此实参。在指定其他类型的策略的名称时,请勿使用此实参。REF_ENTITY_NAME => 'string'
设置策略的对象的名称,例如表名、视图名称、外部表名或用户名。
整个对象名称必须放在单引号内。
如果对象名称区分大小写或包含任何特殊字符或空格,则需要使用双引号来处理大小写/字符。双引号必须放在单引号内,即
'"<table_name>"'
。
REF_ENTITY_DOMAIN => 'string'
设置策略的对象类型。
如果对象是外部表,请使用
'TABLE'
作为实参值。如果对象是物化视图,请使用
'VIEW'
作为实参值。支持的域包括:
'ACCOUNT'
'INTEGRATION'
'TABLE'
'TAG'
'USER'
'VIEW'
返回¶
该函数返回以下列:
列 |
数据类型 |
描述 |
---|---|---|
POLICY_DB |
VARCHAR |
在其中设置策略的数据库。 |
POLICY_SCHEMA |
VARCHAR |
在其中设置策略的架构。 |
POLICY_NAME |
VARCHAR |
策略的名称。 |
POLICY_KIND |
VARCHAR(17) |
Snowflake 中的策略类型。 |
REF_DATABASE_NAME |
VARCHAR |
包含查询对象引用的对象的数据库的名称。 |
REF_SCHEMA_NAME |
VARCHAR |
包含查询对象引用的对象的架构的名称。 |
REF_ENTITY_NAME |
VARCHAR |
设置策略的对象的名称(即 table_name、view_name、external_table_name)。 |
REF_ENTITY_DOMAIN |
VARCHAR |
设置策略的对象类型(即表、视图)。 |
REF_COLUMN_NAME |
VARCHAR |
设置策略的列名称。 |
REF_ARG_COLUMN_NAMES |
VARCHAR |
对于设置了掩码策略的查询结果中的记录,返回 NULL。 |
TAG_DATABASE |
VARCHAR |
如果已将策略分配给标签,则为包含该标签的数据库的名称;如果未将策略分配给标签,则为 NULL。 |
TAG_SCHEMA |
VARCHAR |
如果已将策略分配给标签,则为包含该标签的架构的名称;如果未将策略分配给标签,则为 NULL。 |
TAG_NAME |
VARCHAR |
如果已将策略分配给标签,则为该标签的名称;如果未将策略分配给标签,则为 NULL。 |
POLICY_STATUS |
VARCHAR |
指定策略的状态,该状态可以是以下四个可能的值之一: |
请注意 POLICY_STATUS 列的以下几点:
ACTIVE
指定列(即 REF_COLUMN_NAME)仅通过标签与单个策略相关联。
MULTIPLE_MASKING_POLICY_ASSIGNED_TO_THE_COLUMN
指定将多个掩码策略分配给同一列。
COLUMN_IS_MISSING_FOR_SECONDARY_ARG
指定策略(即 POLICY_NAME)是条件掩码策略,并且表(即 REF_ENTITY_NAME)没有同名的列。
COLUMN_DATATYPE_MISMATCH_FOR_SECONDARY_ARG
指定策略是条件掩码策略,并且该表有一列与掩码策略签名中的数据类型同名但数据类型不同。
使用说明¶
结果根据授予执行查询的角色的权限返回:
如果角色具有全局 APPLY MASKING POLICY 权限,则 Snowflake 会在查询结果中返回所有掩码策略关联。
如果角色具有全局 APPLY ROW ACCESS POLICY 权限,则 Snowflake 会在查询结果中返回所有行访问策略关联。
如果角色具有给定策略的 APPLY 权限(例如,MASKING POLICY 的 APPLY 权限),Snowflake 仅针对执行查询的角色所拥有的对象返回该策略的关联。
如果角色对策略拥有全局 APPLY 权限或 OWNERSHIP 权限,但对表或视图没有 OWNERSHIP 权限(例如,表上的 SELECT 权限),则 Snowflake 不会在查询结果中显示策略关联。
如果角色没有任何策略权限,但在具有表的 OWNERSHIP 权限,则 Snowflake 将返回错误消息,并且不显示策略关联。
当调用 Information Schema 表函数时,会话必须具有正在使用的 INFORMATION_SCHEMA 架构,或者 函数必须使用完全限定的对象名称。有关更多详细信息,请参阅 Snowflake Information Schema。
选择一种语法变体来执行查询。混合实参会导致错误和查询失败。
实参
ref_entity_name
和ref_entity_domain
必须包含在一起,否则查询将失败。如果指定的对象名称不存在,或者查询操作员无权查看对象上的任何策略,则 Snowflake 将返回错误。如果允许操作员查看策略关联的子集,则 Snowflake 可以返回策略关联的结果集。作为
ref_entity_domain
列出的不受支持的对象类型(例如'stream'
)也会返回错误。如果查询操作员对策略没有 APPLY 或 OWNERSHIP 权限,则 Snowflake 不会返回结果集。
示例¶
为在列上设置了名为 ssn_mask
的掩码策略的每个对象(例如表或视图)返回一行:
use database my_db; use schema information_schema; select * from table(information_schema.policy_references(policy_name => 'my_db.my_schema.ssn_mask'));
为分配给名为 my_table
的表的每个策略返回一行:
use database my_db; use schema information_schema; select * from table(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table'));