SHOW GRANTS: Changes to output for grants on functions and procedures (Pending)

注意

此行为变更包含在 2026_01 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

SHOW GRANTS 命令的输出中,函数和过程的名称列中的值正在发生变化:

变更前:

name 列包括实参的名称、类型以及返回类型。

例如,对于以下函数:

CREATE FUNCTION area_of_circle(radius FLOAT)
  RETURNS FLOAT
  ...
Copy

名称列的值为:

MY_DB.MY_SCHEMA."AREA_OF_CIRCLE(RADIUS FLOAT):FLOAT"
Copy

对于以下过程:

CREATE PROCEDURE output_message(message VARCHAR)
  RETURNS VARCHAR
  ...
Copy

名称列中的值为:

MY_DB.MY_SCHEMA."OUTPUT_MESSAGE(MESSAGE VARCHAR):VARCHAR"
Copy
变更后:

name 列仅包含实参的类型。

例如,对于以下函数:

CREATE FUNCTION area_of_circle(radius FLOAT)
  RETURNS FLOAT
  ...
Copy

名称列的值为:

MY_DB.MY_SCHEMA.AREA_OF_CIRCLE(FLOAT)
Copy

对于以下过程:

CREATE PROCEDURE output_message(message VARCHAR)
  RETURNS VARCHAR
  ...
Copy

名称列中的值为:

MY_DB.MY_SCHEMA.OUTPUT_MESSAGE(VARCHAR)
Copy

此更改使您可以更轻松地在想要执行的 GRANTREVOKE 语句中使用名称列中的值。

例如,假设您要撤销授予 my_custom_role 角色的函数和过程权限。您可以运行 SHOW GRANTS 命令:

SHOW GRANTS TO ROLE my_custom_role
  ->> SELECT "privilege", "granted_on", "name"
        FROM $1
        WHERE "granted_on" IN ('FUNCTION', 'PROCEDURE');
Copy
+-----------+------------+-----------------------------------------+
| privilege | granted_on | name                                    |
|-----------+------------+-----------------------------------------|
| USAGE     | FUNCTION   | MY_DB.MY_SCHEMA.AREA_OF_CIRCLE(FLOAT)   |
| USAGE     | PROCEDURE  | MY_DB.MY_SCHEMA.OUTPUT_MESSAGE(VARCHAR) |
+-----------+------------+-----------------------------------------+

然后,您可以将返回的值复制并粘贴到 REVOKE 语句中以撤销这些权限:

REVOKE USAGE ON FUNCTION MY_DB.MY_SCHEMA.AREA_OF_CIRCLE(FLOAT) FROM ROLE my_custom_role;
Copy
REVOKE USAGE ON PROCEDURE MY_DB.MY_SCHEMA.OUTPUT_MESSAGE(VARCHAR) FROM ROLE my_custom_role;
Copy

参考:2190

语言: 中文