我应该如何为Snowflake数据库设置超级用户角色?

时间:2019-11-03 04:15:53

标签: snowflake-data-warehouse

我基本上想要

  1. 我的“ DBA”用户;具有SYSADMIN和ACCOUNTADMIN角色的原始帐户,以便能够查看数据库中的任何对象及其数据。看来,至少在ACCOUNTADMIN级别,我应该能够做到这一点。
  2. “超级”用户;通过角色(dr_uce_role),我可以在数据库级别进行分配,用户可以在其中进行数据库中的几乎所有操作。

我以为我已经通过以下代码成为了超级用户角色:

<script async src="//jsfiddle.net/arabhossain/Lskq4nar/4/embed/"></script>

然后,该用户在架构中创建对象。但是,我在SYSADMIN上的“ DBA”用户根本看不到对象。使用角色ACCOUNTADMIN,用户可以看到对象,但不能查询它们。我的理解是ACCOUNTADMIN是顶级帐户,并且无论如何都可以拥有这些对象的所有权,因此,如果这应该是一种安全功能,我真的不理解它是如何提供很多保护的,因为它总是可以窃取所有权? / p>

我尝试将对象的所有权从ACCOUNTADMIN更改为SYSADMIN,以发现它具有阻止特权;

--grant power to engineer
grant all privileges on database dr_ev to dr_uce_role;
grant all privileges on all schemas in database dr_ev to dr_uce_role;
grant all privileges on all tables in schema dr_ev.public to dr_uce_role;
grant all privileges on all views in schema dr_ev.public to dr_uce_role;
grant select on future tables in schema dr_ev.public to dr_uce_role;
grant select on future views in schema dr_ev.public to dr_uce_role;
grant all privileges on all tables in schema dr_ev.stg to dr_uce_role;
grant all privileges on all views in schema dr_ev.stg to dr_uce_role;
grant select on future tables in schema dr_ev.stg to dr_uce_role;
grant select on future views in schema dr_ev.stg to dr_uce_role;
  

SQL执行错误:对安全性“ DR_EV.STG.LOAD_OPPORTUNITY”授予角色“ DR_UCE_ROLE”的特权“ DELETE”已得到依赖。必须先将其撤销。可能存在多个从属授予:使用“ SHOW GRANTS”命令查看它们。要在转移对象所有权时撤消所有从属授予,请使用便捷命令“ GRANT OWNERSHIP ON来撤回当前格兰特”。

我曾尝试与

取得所有权
grant ownership on dr_ev.stg.load_opportunity to sysadmin;

确实有效-尽管它使我的超级用户无法看到这些物体。所以我给了他们

grant ownership on all tables in schema dr_ev.stg to sysadmin revoke current grants;

但是,我希望高级用户能够创建或替换此表。我相信这需要DROP TABLE特权,尽管显然我的超级用户授权不提供它,而且我不清楚应如何提供它?

我不会说我对Snowflake特权有最深刻的了解,并且想知道上面的语句grant all privileges on all tables in schema dr_ev.stg to dr_uce_role; 是否不存在于模式级别以覆盖所有表,而是实际上设置了对象级别权限,而我最初的方法太细粒度了,因为我实际上并不希望在对象级别上进行任何管理。话虽这么说,但如果该语句实际上只是设置许多对象特权的捷径,那么我在文档中仍不清楚如何以比对象更高的级别进行管理。我怎样才能实现最初的目标?

3 个答案:

答案 0 :(得分:2)

对于这种情况,最佳实践是将所有自定义角色授予SYSADMIN角色。这使系统管理员可以执行SYSADMIN可以执行的所有操作,以及所有其他角色可以执行的所有操作。您的帖子中有很多问题,但是我认为这可以解决很多问题。

答案 1 :(得分:0)

我做的方法是创建一个超级角色“ superole”,并将sysadmin,securityadmin和accountadmin授予该角色。然后,我将超级角色附加到我想成为DBA的任何人身上。

答案 2 :(得分:0)

这可以使用ROLE到ROLE映射或通常使用“ ROLE层次结构”来实现。

const data = "hai";
const objec = {
    [data]:{"dddd":"dfdfdf"}
}
console.log(objec)  

Here's a detailed article