我正在编写一个过程,该过程将跨多个模式创建对象(视图),其中这些视图需要具有不同的所有者。我希望过程在创建视图之后将GRANT OWNERSHIP授予适当的角色,但是用于创建和维护过程的新创建的DEV_PROC_ROLE无法执行GRANT OWNERSHIP。我们的较高级别的角色可以,但我不希望在该级别上管理和执行该过程。
这里有一些背景 https://docs.snowflake.net/manuals/sql-reference/sql/grant-ownership.html
”具有“ MANAGE GRANTS”特权的角色可以将对象的所有权转让给任何角色;相反,没有“ MANAGE GRANTS”特权的角色只能将所有权从其自身的所有权转让给子角色。角色层次结构。”
那么我需要在我的更高级别角色中执行什么命令来赋予DEV_PROC_ROLE MANAGE GRANTS特权?
我无法在文档中找到如何向角色授予MANAGE GRANTS特权。
注意-DEV_PROC_ROLE可以授予所有权后,它将发出这样的命令来更改所有权并针对该模式保留所有其他角色设置的Future Select priv。授予当前复制许可以授予所有权;
答案 0 :(得分:0)
在文档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
来授予DEV_PROC_ROLE MANAGE GRANTS特权。