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 的日志消息?