雪花中所有存储过程的GRANT EXECUTE许可

时间:2019-11-20 11:53:37

标签: python snowflake-schema snowflake-data-warehouse

雪花中所有存储过程的GRANT EXECUTE权限。

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

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位

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

有人想授予存储过程/表权限吗?

1 个答案:

答案 0 :(得分:4)

一些可以帮助您的事情。

  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 注意:当/如果您将此过程的用法授予其他角色,则需要包括参数的数据类型,例如:

    GRANT在数据库名称.schema_name.get_column_scale(float)上的用法要在other_role_name_here起作用;

我希望这对您有帮助...丰富