Snowflake 中是不是有办法允许用户在程序上获取 ddl 但没有使用或所有权权限?

Posted

技术标签:

【中文标题】Snowflake 中是不是有办法允许用户在程序上获取 ddl 但没有使用或所有权权限?【英文标题】:Is there a way in Snowflake to allow users to get ddl on a procedure but not have USAGE or OWNERSHIP rights on it?Snowflake 中是否有办法允许用户在程序上获取 ddl 但没有使用或所有权权限? 【发布时间】:2019-12-26 22:11:58 【问题描述】:

我正在尝试以允许任何用户(甚至是只读用户)发现和理解数据库中的对象的方式设计我的 Snowflake DB 权限。我有办法对大多数对象执行此操作,但在处理过程时遇到了问题。

似乎程序的唯一权限是 USAGE 和 OWNERSHIP。理想情况下,我可以授予像 MONITOR 这样的另一个权限,以便它显示在 SHOW 语句中,这也将允许我 GET_DDL()。

如果我想授予只读人员查看该过程的权限,我可以看到的唯一解决方法是确保所有过程在调用者的权限下运行,然后授予他们使用权限。这样,如果程序中有任何禁止他们使用的东西,他们将无法实际运行它。

【问题讨论】:

【参考方案1】:

你可以使用information_schema.procedures。

用法示例:select * from information_schema.procedures;

【讨论】:

这只会显示你有权限的程序。【参考方案2】:

更改过程执行的上下文。 默认情况下,该过程在创建该过程的人的上下文中运行,并且对其内容的访问受到限制。 使用EXECUTE AS CALLER 子句将上下文替换为调用者。 示例:

CREATE OR REPLACE PROCEDURE PROC_NAME ()
   RETURNS VARCHAR
   LANGUAGE javascript
   EXECUTE AS CALLER
   AS

【讨论】:

嗨,米哈尔。谢谢你的建议。这正是我在原始问题中所建议的(见最后一段)。如果可能的话,我不想那样做。

以上是关于Snowflake 中是不是有办法允许用户在程序上获取 ddl 但没有使用或所有权权限?的主要内容,如果未能解决你的问题,请参考以下文章

运行队列如何在 Snowflake 中工作?是不是有概念时间片?

在 Snowflake 中,“加载表”功能是不是需要由执行加载的同一用户/角色创建目标表?

在没有 JavaScript 的情况下将 Oracle PL/SQL 移植到 Snowflake

Snowflake 是不是有类似于 Teradata 的日志消息?

Snowflake 是不是向 DataGrip 等 SQL 客户端提供解释计划中的成本信息?

Snowflake 我们如何在字段数组上运行非透视查询而不是显式声明每个字段?