如何授予角色查看Schema中存储过程权限且禁止调用
Snowflake:让角色查看存储过程元数据但禁止调用的权限配置
问题背景
需为指定角色配置权限,使其能查看某Schema下的存储过程元数据,但完全无法调用这些存储过程。尝试使用MONITOR权限时,执行DESCRIBE SCHEMA仅能返回视图和表,无法获取存储过程信息(参考Snowflake官方《通用DESCRIBE命令》《DESCRIBE SCHEMA命令》文档)。
解决方案
1. 授予REFERENCE_USAGE核心权限
该权限仅允许角色访问存储过程的元数据,不会赋予调用权限,完全匹配需求:
- 授权单个存储过程:
GRANT REFERENCE_USAGE ON PROCEDURE <schema名>.<存储过程名>([参数类型列表]) TO ROLE <角色名>;
- 授权Schema下所有现有存储过程:
GRANT REFERENCE_USAGE ON ALL PROCEDURES IN SCHEMA <schema名> TO ROLE <角色名>;
- 授权Schema下未来创建的存储过程:
GRANT REFERENCE_USAGE ON FUTURE PROCEDURES IN SCHEMA <schema名> TO ROLE <角色名>;
2. 查看存储过程元数据的方式
权限配置完成后,可通过两种方式查看:
- 查看单个存储过程详情:
DESCRIBE PROCEDURE <schema名>.<存储过程名>([参数类型列表]);
- 批量查询Schema下所有存储过程:
SELECT ROUTINE_NAME, ROUTINE_DEFINITION, DATA_TYPE FROM INFORMATION_SCHEMA.PROCEDURES WHERE ROUTINE_SCHEMA = '<schema名>';
注意事项
- 禁止授予
EXECUTE或USAGE权限(针对存储过程或Schema),这类权限会让角色获得调用存储过程的能力。 MONITOR权限仅适用于Schema/数据库级别的对象监控,无法覆盖存储过程的元数据访问,不适用当前需求。
内容的提问来源于stack exchange,提问作者i_am_john
相关产品推荐
相关产品推荐

