类别:

系统函数 (系统信息)

EXPLAIN_GRANTABLE_PRIVILEGES

返回一个 JSON 字符串,表示 Snowflake 中每种对象类型的所有可授予权限。此函数提供关于不同对象类型上可授予哪些权限的全面信息,包括每种权限对应的可用授权类型。

另请参阅:

GRANT <privileges> ... TO ROLEGRANT CALLER

语法

EXPLAIN_GRANTABLE_PRIVILEGES(
  [ grantee => '<grantee_type>' ]
  [, object_type => '<object_type_name>' ]
  [, grant_type => '<grant_type_name>' ])

实参

所有实参都是可选的,并使用命名参数语法:

grantee => 'grantee_type'

按授权对象类型筛选结果。有效值:模型监视器名称字符串。

  • ROLE

  • APPLICATION

默认:ROLE

被授权者类型决定了哪些权限可用。例如,应用程序无法单独拥有对象的所有权。

object_type => 'object_type_name'

将筛选结果限定为单一对象类型。接受对象类型名称的单数形式(例如,'DATABASE''TABLE''SCHEMA')。文本不区分大小写。

grant_type => 'grant_type_name'

将筛选结果限定为支持特定授权类型的权限。有效值:模型监视器名称字符串。

文本不区分大小写。

返回

该函数返回一个包含 JSON 数组的 VARCHAR。数组中的每个元素都是一个 JSON 对象,代表一种对象类型,并具有以下结构:

{
  "parent": "<parent_object_type>",
  "singular": "<singular_name>",
  "plural": "<plural_name>",
  "privileges": {
    "<privilege_name>": ["<grant_type>", /* ... additional grant types */],
    /* ... additional privileges */
  }
}

JSON 字段:

  • parent – 对象层次结构中的父对象类型(例如,SCHEMA 是 TABLE 的父级)。对于像 ACCOUNT 这样的顶级对象,该字符串为空。

  • singular – 对象类型名称的单数形式(例如,DATABASE)。用于个人授权。

  • plural – 对象类型名称的复数形式(例如 DATABASES)。用于批量授权。

  • privileges – 一个映射,其中每个键为一个权限名称,每个值为一个授权类型名称数组,用于指明该权限可通过哪些授权类型进行授予。

使用说明

  • 所有实参都必须是常量表达式。不能传递列值或其他非常量表达式。

  • 如果未提供实参,则该函数将返回所有对象类型中角色的所有可授予权限。

示例

以下示例调用 EXPLAIN_GRANTABLE_PRIVILEGES 函数:

获取角色的所有可授予权限

返回角色的所有对象类型及其可授予的权限:

CALL EXPLAIN_GRANTABLE_PRIVILEGES();

获取特定对象类型的权限

仅返回 'DATABASE' 对象类型的权限:

CALL EXPLAIN_GRANTABLE_PRIVILEGES(object_type => 'DATABASE');

输出示例:

[
  {
    "parent": "ACCOUNT",
    "singular": "DATABASE",
    "plural": "DATABASES",
    "privileges": {
      "APPLYBUDGET": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
      "CREATE SCHEMA": ["INDIVIDUAL"],
      "IMPORTED PRIVILEGES": ["INDIVIDUAL"],
      "MODIFY": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
      "MONITOR": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
      "OWNERSHIP": ["INDIVIDUAL"],
      "REFERENCE_USAGE": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
      "USAGE": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"]
    }
  }
]

按授权对象类型筛选

可用于应用程序的返回权限:

CALL EXPLAIN_GRANTABLE_PRIVILEGES(grantee => 'APPLICATION');

应用程序不能拥有个人所有权,因此 OWNERSHIP 仅显示授权类型,例如 'ALL''FUTURE''INHERITED'