如何撤销Snowflake角色的数据库所有权限?是否需细化至Schema/表层级?
Snowflake权限撤销:数据库级REVOKE是否覆盖Schema/表权限?
结论很明确:执行REVOKE ALL PRIVILEGES ON DATABASE x FROM ROLE y无法清除该角色在Schema和表层级的权限,必须细化到Schema和表层级单独撤销。
原因说明
Snowflake的权限体系是分层独立的,数据库、Schema、表属于不同层级的对象,权限的授予与撤销仅对当前层级生效:
- 数据库级的
ALL PRIVILEGES仅包含数据库自身的权限(比如CREATE SCHEMA、数据库级USAGE等),不会向下级联影响子对象(Schema、表)上已授予的权限。 - 你提到的Schema级
USAGE、表级SELECT权限,属于Schema和表对象本身的权限,数据库级的撤销命令触达不到这些层级。
正确的权限清理步骤
如果要彻底清除该角色在目标数据库及所有子对象上的权限,需要执行以下命令:
- 撤销数据库级权限(若需清理):
REVOKE ALL PRIVILEGES ON DATABASE x FROM ROLE y; - 撤销现有Schema上的所有权限:
如果之前给过该角色未来创建Schema的权限,还要补充:REVOKE ALL PRIVILEGES ON ALL SCHEMAS IN DATABASE x FROM ROLE y;REVOKE ALL PRIVILEGES ON FUTURE SCHEMAS IN DATABASE x FROM ROLE y; - 撤销现有表上的所有权限:
同理,若有未来创建表的权限,补充:REVOKE ALL PRIVILEGES ON ALL TABLES IN ALL SCHEMAS IN DATABASE x FROM ROLE y;REVOKE ALL PRIVILEGES ON FUTURE TABLES IN ALL SCHEMAS IN DATABASE x FROM ROLE y;
验证权限是否清理完成
可以通过以下命令确认权限状态:
- 查看角色的所有权限:
SHOW GRANTS TO ROLE y; - 查看角色在目标数据库上的权限:
SHOW GRANTS ON DATABASE x TO ROLE y; - 查看角色在目标数据库所有Schema上的权限:
SHOW GRANTS ON SCHEMA x.* TO ROLE y;
内容的提问来源于stack exchange,提问作者Mike Coffey
相关产品推荐
相关产品推荐

