雪花视图特权
Posted
技术标签:
【中文标题】雪花视图特权【英文标题】:Snowflake view privileges 【发布时间】:2020-12-29 02:58:34 【问题描述】:我有两个 Snowflake 数据库/模式:database.schema.A 和 database.schema.B。 Database.schema.A 有自己的用户 - UserA。我需要使用 UserA 的权限在 database.schema.B 中创建或替换视图。 UserA 可以对 database.schema.B 中的表执行选择、插入和删除操作,但不能对 database.schema.B 中的视图执行选择、插入和删除操作。 如果 UserA 具有完全/所有权限,UserA 是否应该能够创建或替换 database.schema.B 中的视图?如果没有,当更新的记录可用时,UserA 是否有其他方法可以删除并重新创建视图?
【问题讨论】:
【参考方案1】:如果用户A 有权在该数据库中创建视图,则用户A 可以在database.schema.B 中创建或替换视图。授予 UserA 权限并可以更新视图。
【讨论】:
我验证 UsetA 有权在我的数据库上创建视图。B shema 但仍然没有足够的权限来操作视图消息。 UserA 应该对数据库 B 及其相关架构具有使用权限。尝试向 UserA 提供 GRANT USAGE ON DATABASE 和 SCHEMA。【参考方案2】:在 Snowflake 中不能为用户分配权限,只有 角色 可以。假设您的意思是 RoleA 和 RoleB 而不是 UserA 和 UserB 那么:
如果 RoleB 创建了视图 database.schema.B
,那么只有 RoleB(“所有者”)或包含它作为成员的角色(在角色层次结构中更高)可以删除或替换它。即使您将所有权限提供给另一个角色,它也无法删除它。
用户可以担任不同的角色。如果您使用 UserA 登录,如果它需要执行 RoleB 拥有的删除/替换操作,它可以假定 RoleB。当然,这意味着您需要将 UserA 分配给 RoleB。
【讨论】:
感谢您的帮助。我授予roleA 权限以在database.B 上创建视图。是否需要授予其他权限才能将 RoleA 分配给 RoleB? 查看下面链接的grant
文档以了解如何将一个角色授予另一个角色:docs.snowflake.com/en/sql-reference/sql/grant-role.html【参考方案3】:
对视图拥有 OWNERSHIP 权限的角色是可以重新创建/删除视图的角色。这对任何对象都是一样的。
此外,角色需要在视图的数据库/模式上使用 USAGE 并访问基础数据(例如,如果视图是从表中创建的,则他们需要访问表,包括数据库上的 USAGE 和架构的表)。
【讨论】:
以上是关于雪花视图特权的主要内容,如果未能解决你的问题,请参考以下文章
通过创建视图绕过表特权和 WITH GRANT OPTION