向角色授予 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的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Endpoints,向 API 密钥授予角色以限制某些方法/路径(例如:读/写角色)
自动授予 ACTION_MANAGE_OVERLAY_PERMISSION