gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:27 24 4
gpt4 key购买 nike

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

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com