【发布时间】:2020-02-28 19:44:36
【问题描述】:
基本上我想要
- 我的“DBA”用户;具有 SYSADMIN 和 ACCOUNTADMIN 角色的原始帐户,以便能够查看数据库中的任何对象及其数据。看来至少在 ACCOUNTADMIN 级别我应该能够做到这一点。
- “超级”用户;通过角色 (dr_uce_role),我可以在数据库级别进行分配,用户几乎可以在数据库中执行所有操作。
我以为我已经使用以下代码创建了超级用户角色:
--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;
该用户随后在模式中创建了对象。然而,我在 SYSADMIN 的“DBA”用户根本看不到这些对象。使用角色 ACCOUNTADMIN,用户可以查看对象,但不能查询它们。我的理解是 ACCOUNTADMIN 是顶级帐户,无论如何都可以拥有这些对象的所有权,所以如果这应该是一个安全功能,我真的不明白它是如何提供很多保护的,因为它总是可以窃取所有权?
我尝试将一个对象的所有权从 ACCOUNTADMIN 更改为 SYSADMIN,发现它具有阻塞权限;
grant ownership on dr_ev.stg.load_opportunity to sysadmin;
SQL 执行错误:存在从安全的“DR_EV.STG.LOAD_OPPORTUNITY”到角色“DR_UCE_ROLE”的相关权限“DELETE”授予。必须先撤销。可能存在多个相关授权:使用“SHOW GRANTS”命令查看它们。要在转移对象所有权时撤销所有相关授权,请使用便捷命令“GRANT OWNERSHIP ON TO REVOKE CURRENT GRANTS”。`
我尝试过拥有所有权
grant ownership on all tables in schema dr_ev.stg to sysadmin revoke current grants;
确实有效 - 尽管它让我的高级用户无法看到这些对象。所以我给了他们
grant all privileges on all tables in schema dr_ev.stg to dr_uce_role;
但是,我希望我的高级用户能够创建或替换此表。我相信这需要 DROP TABLE 特权,尽管我的高级用户授权显然没有提供它,而且我不清楚我应该如何提供它?
我不会说我对 Snowflake 权限有最深的了解,我想知道上面的语句(如 grant all privileges on all tables in schema)是否不存在于架构级别以全面适用于所有表,但实际上设置了对象级别权限和我的原始方法只是太细化了,因为我实际上并不希望在对象级别管理任何东西。话虽如此,如果该语句实际上只是设置许多对象权限的快捷方式,我在文档中不清楚如何在比对象更高的级别上进行管理。我怎样才能实现我最初的目标?
【问题讨论】:
标签: snowflake-cloud-data-platform