python - 授予对雪花中所有存储过程的执行权限
问题描述
授予对雪花中所有存储过程的执行权限。
我在雪花数据库中创建了一个存储过程,但在尝试执行该存储过程时出现错误。
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
我在想它是我需要添加的执行权限,但我不知道在雪花中需要在哪里配置存储过程权限。
有人知道授予存储过程/表的权限吗?
解决方案
一些可能对你有帮助的事情。
我建议在 SELECT 语句中完全限定该表名,这样每当调用存储过程时,只要会话的当前角色可以访问表和模式,用户会话的“上下文”就无关紧要你应该很好。
完全限定表具有以下形式:database_name.schema_name.object_name示例:hr_prod_db.hr_schema.employees
您可以在此链接中阅读有关对象名称解析的更多信息: https ://docs.snowflake.net/manuals/sql-reference/name-resolution.html
我建议您花一点时间阅读以下链接中的“会话状态”,因为该链接讨论了“调用者的权利”与“所有者的权利”存储过程。如果您的过程仅要从具有存储过程所有者角色的会话中调用,这无关紧要,但如果您将过程上的 USAGE 授予另一个角色,了解这一点并正确设置它非常重要. https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#session-state
如果您的过程将由当前角色设置为与“拥有角色”不同的角色的会话调用,则您需要确保将过程(和模式+数据库)正确授权给当前角色将执行该过程。本文档中的所有内容都已详细介绍,请特别注意这一点,因为在您的示例代码中,您的表或视图名称与您的错误消息报告的名称不同,因此 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) TO ROLE other_role_name_here;
我希望这会有所帮助...丰富
推荐阅读
- haxe - 使用 Lime 编译 Android 时出错 (Windows 10)
- powershell - Get-IISSite,对绑定进行排序并导出为 CSV
- python - 如何连接到列代表的信号
- prolog - 选择最佳组件的最佳方法?
- c++ - 基于信号/频谱分析的语音识别
- ruby - 在 Ruby 的 Imap 模块中删除 Gmail 邮件
- javascript - 为 React (react-router) 渲染组件安装后的资产渲染
- swift - Realm Swift - 枚举值“connect_timeout”和“bad_timestamp”未在开关中处理
- gis - TableToTable_conversion 和 FeatureClassToFeatureClass_conversion 在脚本中失败,但使用 Postgres 手动成功
- php - iPhone 6 无法正确加载 CSS