向角色授予 MANAGE GRANTS

Posted

技术标签:

【中文标题】向角色授予 MANAGE GRANTS【英文标题】:Giving MANAGE GRANTS to a Role 【发布时间】:2019-11-19 00:50:55 【问题描述】:

我正在编写一个过程,该过程将在多个模式中创建对象(视图),其中这些视图需要具有不同的所有者。我希望该过程在创建视图后将其授予适当的角色,但是我新创建的用于创建和维护过程的 DEV_PROC_ROLE 无法执行 GRANT OWNERSHIP。我们更高级别的角色可以,但我不希望在该级别管理和执行该过程。

这里有一些上下文 https://docs.snowflake.net/manuals/sql-reference/sql/grant-ownership.html

“具有 MANAGE GRANTS 权限的角色可以将对象的所有权转移给任何角色;相反,没有 MANAGE GRANTS 权限的角色只能将所有权从自身转移给角色层次结构。”

那么我需要在更高级别的角色中执行什么命令才能将 MANAGE GRANTS 权限授予 DEV_PROC_ROLE?

我在文档中找不到如何将 MANAGE GRANTS 权限授予角色。

注意 - 一旦 DEV_PROC_ROLE 可以授予所有权,它将发出这样的命令来更改所有权并保留针对该架构设置的所有 Future Select priv 的其他角色。授予所有权以查看当前授予的角色;

【问题讨论】:

【参考方案1】:

在文档https://docs.snowflake.net/manuals/sql-reference/sql/grant-privilege.html中,可以找到语法:

GRANT    globalPrivileges        | ALL [ PRIVILEGES ]  ON ACCOUNT
       |  accountObjectPrivileges | ALL [ PRIVILEGES ]  ON  RESOURCE MONITOR | WAREHOUSE | DATABASE | INTEGRATION  <object_name>
       |  schemaPrivileges        | ALL [ PRIVILEGES ]  ON  SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> 
       |  schemaObjectPrivileges  | ALL [ PRIVILEGES ]  ON  <object_type> <object_name> | ALL <object_type>S IN SCHEMA <schema_name> 
       |  schemaObjectPrivileges  | ALL [ PRIVILEGES ]  ON FUTURE <object_type>S IN SCHEMA <schema_name>
      
 TO [ ROLE ] <role_name> [ WITH GRANT OPTION ]

globalPrivileges 在哪里

globalPrivileges ::=
    CREATE  ROLE | USER | WAREHOUSE | DATABASE | INTEGRATION   | MANAGE GRANTS | MONITOR USAGE  [ , ... ]

所以基本上,您可以通过GRANT MANAGE GRANTS ON ACCOUNT TO DEV_PROC_ROLE 将 MANAGE GRANTS 权限授予 DEV_PROC_ROLE。

【讨论】:

感谢嘉兴 - 缺少的是 ON ACCOUNT 部分。然而,最后,我们决定新的 DEV_PROC_ROLE 不应该有那么广泛的范围(我们将其名称更改为 DEV_SUPER_ROLE),我们最终将授予所有权所需的角色更改为子角色:GRANT ROLE DEV_BASIC_ROLE TO ROLE DEV_SUPER_ROLE;

以上是关于向角色授予 MANAGE GRANTS的主要内容,如果未能解决你的问题,请参考以下文章

通过 rails 向 mongo 用户授予角色

Cloud Endpoints,向 API 密钥授予角色以限制某些方法/路径(例如:读/写角色)

自动授予 ACTION_MANAGE_OVERLAY_PERMISSION

授予者没有 GRANT 权限 - 问题

如何在Dynamics 365中向用户授予对实体的特定记录的读写访问请求?

Discord Bot 选择角色不会将角色授予用户