类别:

Information Schema表函数

POLICY_REFERENCES

为每个获分配指定策略的对象返回一行,或者 为分配给指定对象的每个策略返回一行。

另请参阅:POLICY_REFERENCES 视图 (Account Usage 视图)

语法

仅适用于网络策略对象:

POLICY_REFERENCES(
      POLICY_NAME => '<string>' ,
      POLICY_KIND => 'NETWORK_POLICY'
      )
Copy

适用于其他策略对象:

POLICY_REFERENCES(
      POLICY_NAME => '<string>'
      )
Copy

适用于所有策略对象:

POLICY_REFERENCES(
    REF_ENTITY_NAME => '<string>' ,
    REF_ENTITY_DOMAIN => '<string>'
    )
Copy

实参

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

指定策略的状态,该状态可以是以下四个可能的值之一:ACTIVEMULTIPLE_MASKING_POLICY_ASSIGNED_TO_THE_COLUMNCOLUMN_IS_MISSING_FOR_SECONDARY_ARGCOLUMN_DATATYPE_MISMATCH_FOR_SECONDARY_ARG

请注意 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_nameref_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'));
Copy

为分配给名为 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'));
Copy
语言: 中文