【问题标题】:GRANT EXECUTE permission to ALL STORED PROCEDURES in snowflake授予对雪花中所有存储过程的执行权限
【发布时间】:2020-03-16 03:17:35
【问题描述】:

对雪花中的所有存储过程授予执行权限。

我在雪花数据库中创建了一个存储过程,但在尝试执行该存储过程时出现错误。

create or replace procedure get_column_scale(column_index float)
    returns float not null
    language javascript
    as
    $$
    var stmt = snowflake.createStatement(
        {sqlText: "select EmployeeKey, EmployeeCode from stproc_test_employees;"}
        );
    stmt.execute();  // ignore the result set; we just want the scale.
    return stmt.getColumnScale(COLUMN_INDEX); // Get by column index (1-based)
    $$
    ;

我正在执行如下

CALL get_column_scale(1);

我在尝试使用 Snowflake 执行存储过程时遇到此错误

错误 [100183] [P0000]:存储过程 GET_COLUMN_SCALE 中的执行错误:
编译错误:
“SYEMPLOYEES”不存在或未经授权。
Statement.execute,第 5 行位置 9

我认为这是我需要添加的执行权限,但我不知道在 Snowflake 中需要在哪里配置存储过程权限。

有人知道授予存储过程/表的权限吗?

【问题讨论】:

    标签: python snowflake-schema snowflake-cloud-data-platform


    【解决方案1】:

    一些可能对你有帮助的事情。

    1. 我建议在 SELECT 语句中完全限定该表名,这样每当调用存储过程时,用户会话的“上下文”就无关紧要了,只要会话的当前角色可以访问表和架构你应该很好。
      完全限定表具有以下形式:database_name.schema_name.object_name

      示例:hr_prod_db.hr_schema.employees

    您可以在此链接中阅读有关对象名称解析的更多信息:https://docs.snowflake.net/manuals/sql-reference/name-resolution.html

    1. 我建议您花一点时间阅读以下链接中的“会话状态”,因为该链接讨论了“调用者权限”与“所有者权限”存储过程。如果您的过程仅要从具有存储过程所有者角色的会话中调用,这无关紧要,但如果您将过程上的 USAGE 授予另一个角色,了解这一点并正确设置它非常重要. https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#session-state

    2. 如果您的过程将由当前角色设置为与“拥有角色”不同的角色的会话调用,您需要确保对过程(和架构 + 数据库)的正确授权将执行该过程的角色。这一切都在本文档中进行了非常详尽的概述,请特别注意这一点,因为在您的示例代码中,您的表或视图名称与您的错误消息报告的名称不同,所以也许 stproc_test_employees 是 SYEMPLOYEES 之上的视图: https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#access-control-privileges 注意:当/如果您将此过程的使用权授予另一个角色,您将需要包含参数的数据类型,例如:

      在 database_name.schema_name.get_column_scale(float) 上授予使用权限,以 ROLE other_role_name_here;

    我希望这会有所帮助...丰富

    【讨论】:

      【解决方案2】:

      对于那些在 2022 年阅读此答案的人,授予执行程序权限的正确语法如下:

      GRANT USAGE ON PROCEDURE
          get_column_scale(float) 
          TO ROLE other_role_name_here;
      

      【讨论】:

        猜你喜欢
        • 2011-07-03
        • 2011-07-22
        • 1970-01-01
        • 2018-04-07
        • 1970-01-01
        • 2017-08-12
        • 2021-02-13
        • 2021-10-01
        • 1970-01-01
        相关资源
        最近更新 更多