- 类别:
系统函数 (系统信息)
EXPLAIN_PRIVILEGES¶
返回一个 JSON 字符串,说明执行 SQL 语句需要哪些权限。该函数会分析给定 SQL 语句的授权要求,并以结构化格式返回,其中包含所需的权限、对象类型及对象名称。
语法¶
实参¶
statement => 'sql_statement'包含要分析的 SQL 语句的字符串。系统会分析该语句,以确定执行它需要哪些权限。
missing_only => boolean控制输出模式的布尔值:
false– 返回执行该语句所需的所有权限,无论当前用户或指定角色是否已拥有这些权限。true– 仅返回缺失的权限(即当前用户或指定角色目前尚未拥有的权限)。如果存在所有必需的权限,则返回{"authorized": true}。
默认:
falsefor_role => 'role_name'要检查其权限的角色的名称。此实参仅在
missing_only => true时使用。返回该角色(及其被授予的角色)执行此语句所缺失的全部权限。
返回¶
该函数返回一个 VARCHAR 值,其中包含一个 JSON 对象,以层级结构描述所需的各项权限。JSON 可以包含以下节点类型:
权限节点 – 代表单项权限要求:
privilege– 所需权限的名称(例如 USAGE、SELECT、OWNERSHIP)。特殊值<ANY>表示对该对象拥有任意权限即可满足要求。objectType– 对象的类型(例如 DATABASE、TABLE、SCHEMA、ACCOUNT)。objectName– 对象的完全限定名称。
AND 节点 – 需要所有包含的权限:
OR 节点 – 至少需要以下其中一项权限:
决策节点 – 指示授权状态
authorized: true– 存在所有必需的权限。authorized: false– 无法通过授予权限来授权该语句。
访问控制要求¶
在 SQL 语句中按名称引用该对象时,必须具备相应的权限。通常情况下,只需拥有该对象的任意一项权限即可满足此要求。RESOLVE ALL ON ACCOUNT 权限也符合这一要求。
使用说明¶
statement实参必须是常量表达式。不能传递列值或其他非常量表达式。不支持多语句 SQL。该函数仅接受一个 SQL 语句。
某些 SQL 语句不支持权限分析(例如 GRANT、REVOKE、USE ROLE、USE SECONDARY ROLES)。
某些 SQL 语句包含的权限检查不受权限分析功能支持。输出中将省略这些检查。
某些间接权限检查不受权限分析功能支持。输出中将省略这些检查。例如,RESOLVE ALL ON ACCOUNT 并未作为解析数据库的一个选项被包含在内。
当某个对象无法被解析时,该函数会返回一个错误,提示该语句需要访问所有对象。
权限
<ANY>表示拥有该对象的任意权限即可满足要求(例如,在 USAGE 检查中,OWNERSHIP 也同样符合条件)。
示例¶
以下示例调用 EXPLAIN_GRANTABLE_PRIVILEGES 函数:
解释 DESC 命令的权限¶
显示描述架构所需的所有权限:
输出示例:
此输出表明,您需要数据库 MYDB 的任意权限,AND 架构 MYDB.MYSCHEMA 的 MONITOR 权限。
仅检查缺少的权限¶
检查当前用户缺少哪些权限:
如果您拥有所有必需的权限,则返回:
如果缺少权限,则仅返回缺少的权限:
检查特定角色缺少的权限¶
检查特定角色缺少哪些权限:
用于判断 ``analyst_role``(包括其被授予的角色所拥有的权限)是否具备执行 SELECT 语句所需的必要权限;若不具备,则返回缺失的权限。