SHOW GRANTS: Changes to output for grants on functions and procedures (Pending)¶
在 SHOW GRANTS 命令的输出中,函数和过程的名称列中的值正在发生变化:
- 变更前:
name列包括实参的名称、类型以及返回类型。例如,对于以下函数:
CREATE FUNCTION area_of_circle(radius FLOAT) RETURNS FLOAT ...
名称列的值为:
MY_DB.MY_SCHEMA."AREA_OF_CIRCLE(RADIUS FLOAT):FLOAT"
对于以下过程:
CREATE PROCEDURE output_message(message VARCHAR) RETURNS VARCHAR ...
名称列中的值为:
MY_DB.MY_SCHEMA."OUTPUT_MESSAGE(MESSAGE VARCHAR):VARCHAR"
- 变更后:
name列仅包含实参的类型。例如,对于以下函数:
CREATE FUNCTION area_of_circle(radius FLOAT) RETURNS FLOAT ...
名称列的值为:
MY_DB.MY_SCHEMA.AREA_OF_CIRCLE(FLOAT)
对于以下过程:
CREATE PROCEDURE output_message(message VARCHAR) RETURNS VARCHAR ...
名称列中的值为:
MY_DB.MY_SCHEMA.OUTPUT_MESSAGE(VARCHAR)
此更改使您可以更轻松地在想要执行的 GRANT 和 REVOKE 语句中使用名称列中的值。
例如,假设您要撤销授予 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');
+-----------+------------+-----------------------------------------+
| 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;
REVOKE USAGE ON PROCEDURE MY_DB.MY_SCHEMA.OUTPUT_MESSAGE(VARCHAR) FROM ROLE my_custom_role;
参考:2190