首页 > 解决方案 > 雪花撤销表/模式访问

问题描述

我试图为用户提供整个数据库的访问权限,但删除对具有机密数据的特定表或特定模式的访问权限,但它只是没有解决,尝试了多个 - 授予和撤销语句但徒劳无功。

这是我到目前为止测试过的。

最初,我为用户担任这个角色

GRANT ALL ON DATABASE raw TO ROLE transformer; 

检查了赠款并删除了

SHOW GRANTS TO ROLE transformer;
revoke select on all tables in schema raw.<secret_schema> from role transformer;
revoke all on DATABASE raw from ROLE transformer; 

开始授予对单个架构/表的访问权限,但“授予数据库使用权”只是将每个架构/表访问权限授予用户

grant usage on database raw to role transformer ;  -- usage gives all tables access 
grant usage on schema raw.<open_schema> to role transformer ;
grant all on schema raw.<open_schema> to role transformer ;
grant select on all tables raw.<open_schema> to role transformer ;

最后,也尝试了这些撤销,但徒劳无功

revoke select on table raw.<secret_schema>.s from ROLE transformer;
revoke usage on schema raw.<secret_schema> from role transformer;

有关更多信息,此访问权限适用于 DBT 用户和分析师用户,他们可以点击/选择/读取原始数据库,但只有 1 个模式/表不应该被访问,其余的都应该带有“未来表”子句。

深度设计:https ://blog.getdbt.com/how-we-configure-snowflake/

标签: snowflake-cloud-data-platformsnowflake-schemasnowflake-sql

解决方案


将数据库原始使用权授予角色转换器;-- 使用赋予所有表访问权限

这不是授予对表的访问权限的原因;别的东西是。您可以确认运行一个像这样的简单脚本:

use role securityadmin;
create role new_role_1;
grant role new_role_1 to user my_user;
use role sysadmin;
grant usage on database test to role new_role_1;
use role new_role_1;
select * from test.public.foo;  --SQL compilation error: Object 'TEST.PUBLIC.FOO' does not exist or not authorized.
use role sysadmin;
select * from test.public.foo;  -- Works

角色继承自其他角色。默认情况下,所有角色都继承自 PUBLIC 角色。有人可以授予 PUBLIC 角色该角色继承的权限吗?它是否从具有比 PUBLIC 更多权限的角色继承?


推荐阅读