【问题标题】:Snowflake privileges雪花特权
【发布时间】:2021-10-10 10:23:51
【问题描述】:

我创建了一个用户和角色,例如 用户:阿里 角色:分析师

我已将此角色和用户授予 accountadmin 和 systemsecurity 角色。

并且我将数据库管理员和数据库管理员的自定义模式的使用权限授予角色分析师。

还将表“Admin.schema.table1”的选择权限授予角色分析师。

但是当我尝试执行以下查询时 角色“分析员”下的“Admin.information_schema.procedures”显示空表。

当我使用角色“accountadmin”执行“Admin.information_schema.procedures”时,它会显示结果。

为什么我得到带有分析师自定义角色的空结果集?

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    由于Procedure 是一个Schema 对象,除了数据库管理员的USAGE 权限外,您还需要grant 访问Schema“SCHEMA”以及任何目标Procedure。

    您可以通过以帐户管理员身份运行以下语句来完成此操作:

    GRANT USAGE ON SCHEMA ADMIN.SCHEMA TO ROLE ANALYST;
    GRANT USAGE ON PROCEDURE ADMIN.SCHEMA.<PROCEDURE_NAME> TO ROLE ANALYST;
    

    现在您确实可以访问目标过程,您可以在 information_schema.procedures 视图中查询它。

    【讨论】:

    • 谢谢 Mansoor。如果以后添加任何新程序,那么我必须手动授予权限。每次手动授予新程序权限时,我该如何处理这种情况?
    • 您可以使用 FUTURE 授权来处理架构中未来过程的权限,如下所示:GRANT USAGE ON FUTURE PROCEDURES IN SCHEMA "ADMIN"."SCHEMA" TO ROLE ANALYST;
    • 谢谢它正在工作。但是我还有一个疑问,已经存在的程序呢?我是否需要按名称授予每个人的权限,或者有什么方法可以一次授予所有已经存在的 procs 权限?
    • 我尝试在公共模式中执行名为 demo 的过程。公共模式已经有程序。当我尝试获取程序时,它只提供演示程序而不提供已经存在的程序。我需要单独授予吗?
    • 是的,一种方法是明确授予对每个过程的使用权。如果您想一次性完成,对于架构中的所有过程,您可以通过运行以下命令来完成:GRANT USAGE ON ALL PROCEDURES IN SCHEMA ADMIN.SCHEMA TO ROLE ANALYST;
    【解决方案2】:

    鉴于 information_schema.procedures VIEW 上的 Snowflake 文档

    视图只显示当前角色的对象 会话已被授予访问权限。观点不尊重 MANAGE GRANTS 权限,因此可能会显示较少的信息 与 SHOW 命令相比,两者都由持有的用户执行 MANAGE GRANTS 权限。

    因此,因为您的 analyst 角色对架构中的任何过程都没有权限,所以它显示一个空结果。 当您使用 accountadmin 角色查询视图时,该角色获得了您帐户中所有内容的权限,然后您可以看到该角色拥有权限的过程。

    您需要授予该过程的 USAGE 权限,当然还需要授予包含该过程的架构的 USAGE 权限。

    GRANT USAGE ON SCHEMA my_db.admin TO ROLE analyst;
    GRANT USAGE ON PROCEDURE my_db.admin.my_proc TO ROLE analyst;
    

    对于尚不存在的程序

    USE ROLE SECURITYADMIN;
    GRANT USAGE ON FUTURE PROCEDURES IN SCHEMA my_db.admin TO ROLE analyst;
    

    【讨论】:

    • 谢谢CMe,我可以知道如何将程序权限分配给分析师角色
    • 我只需要选择权限即可按分析师角色获取程序
    • 编辑了我上面的答案以提供所需的 GRANT 查询。
    • 谢谢。但每次我如何才能授予具有名称的过程的权限。有没有办法自动为将来创建的过程授予权限?
    • 要授予尚不存在的过程的权限,您必须对 FUTURE 对象使用 GRANT(并为此使用 SECURITYADMIN 角色)。用这个编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2021-11-27
    • 2021-02-13
    • 2021-08-26
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多