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

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

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

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

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 执行存储过程时出现此错误

Error [100183] [P0000]: Execution error in stored procedure GET_COLUMN_SCALE:
compilation error:
'SYEMPLOYEES' does not exist or not authorized.
Statement.execute, line 5 position 9

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

有没有人知道要为存储过程/表授予权限?

最佳答案

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

  1. 我建议在 SELECT 语句中完全限定该表名,这样无论何时调用存储过程,用户 session 的“上下文”都无关紧要,只要 session 的当前角色具有您应该能够很好地访问表和模式。
    完全限定表的形式为:database_name.schema_name.object_name

    示例:hr_prod_db.hr_schema.employees

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

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

  2. 如果您的过程将由一个 session 调用,该 session 将其当前角色设置为与“所有者角色”不同的角色,您需要确保对过程(和模式 + 数据库)进行适当的授权) 到将要执行该过程的角色。本文档中对此进行了非常详尽的概述,请特别注意这一点,因为在您的示例代码中,您的表或 View 名称与您的错误消息不同报告,所以 stproc_test_employees 可能是 SYEMPLOYEES 之上的 View : 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;

希望对你有帮助...丰富

关于python - 对雪花中的所有存储过程授予执行权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953774/

相关文章:

python - Python 中的单元测试接口(interface)

mysql - 我可以使用 Snowflake 作为关系数据库吗?

sql - 计算雪花中的警报洪水

aws-lambda - Snowflake 的异步外部函数不遵守 HttpStatus 429

snowflake-schema - Snowflake 数据库中的 PUBLIC Schema

liquibase - 雪花上的 liquibase 入门

error-handling - Snowflake - 处理错误 : String. 时出错.. 太长并且会被截断错误

python - 如何安装 Pylint,克服错误

python - Boto3 - 等待 AWS 数据库迁移任务被删除

python - Jupyter笔记本上的显示错误