Snowflake授予用户数据库全量权限后如何收回指定Schema/表的访问权限
Snowflake权限配置:全库授权排除指定机密Schema/表的解决方案
你之前操作失效的核心原因如下:
- 首次执行
GRANT ALL ON DATABASE raw TO ROLE transformer;时,不仅授予了当前对象的权限,还默认授予了未来新增对象的全局权限,单独收回当前对象权限不会自动清除future类权限 - 未排查
PUBLIC角色的默认权限:Snowflake默认所有新建角色都会继承PUBLIC角色的权限,如果PUBLIC角色被授予了raw库的全局访问权限,单独对transformer角色执行收回操作不会生效 - 权限残留未清理干净:多次grant/revoke操作留下的交叉权限没有彻底清理,导致新配置的权限被旧权限覆盖
完整实操步骤
步骤1:全量清理transformer角色在raw库的所有残留权限
-- 收回所有现有、未来的库级权限 REVOKE ALL PRIVILEGES ON DATABASE raw FROM ROLE transformer; REVOKE ALL PRIVILEGES ON FUTURE SCHEMAS IN DATABASE raw FROM ROLE transformer; -- 收回所有schema级的现有、未来权限 REVOKE ALL PRIVILEGES ON ALL SCHEMAS IN DATABASE raw FROM ROLE transformer; REVOKE ALL PRIVILEGES ON FUTURE TABLES IN DATABASE raw FROM ROLE transformer; REVOKE ALL PRIVILEGES ON ALL TABLES IN DATABASE raw FROM ROLE transformer;
步骤2:排查清理PUBLIC角色的越权权限
-- 查看PUBLIC角色在raw库的所有权限 SHOW GRANTS TO ROLE PUBLIC; -- 如果查询结果中存在PUBLIC对raw库的访问权限,执行以下语句收回(仅收回raw库相关权限,不要影响其他业务) REVOKE USAGE ON DATABASE raw FROM ROLE PUBLIC; REVOKE SELECT ON ALL TABLES IN DATABASE raw FROM ROLE PUBLIC;
步骤3:按需求重新授予权限(包含future表配置)
场景1:需要排除整个机密Schema
-- 1. 授予数据库级基础USAGE权限(仅允许角色看到raw库,无法直接访问内部Schema) GRANT USAGE ON DATABASE raw TO ROLE transformer; -- 2. 授予开放Schema的USAGE权限,将<open_schema>替换为实际可访问的Schema名,多个开放Schema重复执行即可 GRANT USAGE ON SCHEMA raw.<open_schema> TO ROLE transformer; -- 3. 授予开放Schema下所有现有表的SELECT权限 GRANT SELECT ON ALL TABLES IN SCHEMA raw.<open_schema> TO ROLE transformer; -- 4. 授予开放Schema下未来新增表的SELECT权限,满足future tables配置要求 GRANT SELECT ON FUTURE TABLES IN SCHEMA raw.<open_schema> TO ROLE transformer;
场景2:仅需要排除单个机密表、不需要排除整个Schema
-- 1. 授予对应Schema的基础权限 GRANT USAGE ON SCHEMA raw.<schema_name> TO ROLE transformer; -- 2. 授予Schema下所有现有表+未来新增表的SELECT权限 GRANT SELECT ON ALL TABLES IN SCHEMA raw.<schema_name> TO ROLE transformer; GRANT SELECT ON FUTURE TABLES IN SCHEMA raw.<schema_name> TO ROLE transformer; -- 3. 单独收回机密表的SELECT权限,替换<secret_table>为实际机密表名 REVOKE SELECT ON TABLE raw.<schema_name>.<secret_table> FROM ROLE transformer;
步骤4:权限验证
配置完成后执行以下操作确认权限符合预期:
-- 查看transformer角色的所有权限,确认机密Schema/表无对应访问权限 SHOW GRANTS TO ROLE transformer; -- 切换到transformer角色测试访问 USE ROLE transformer; SELECT * FROM raw.<secret_schema>.<any_table>; -- 预期返回权限不足错误 SELECT * FROM raw.<open_schema>.<any_table>; -- 预期返回正常查询结果
内容的提问来源于stack exchange,提问作者Pravin
相关产品推荐
相关产品推荐

