【问题标题】:Is there a way in which I can grant only read access of a procedure in snowflake?有没有一种方法可以让我只授予雪花程序的读取权限?
【发布时间】:2022-08-15 23:07:42
【问题描述】:

我在雪花中创建了一个程序

我想将雪花中该存储过程的读取权限授予其他用户/角色。

GRANT USAGE ON PROCEDURE
    get_column_scale(float) 
    TO ROLE other_role_name_here; 

我相信上面的命令也会提供我不想要的写访问权限。有没有一种方法可以授予只读访问权限

  • 使用将授予执行权限。 Refer 用于存储过程的允许权限。

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


【解决方案1】:

分配给过程的唯一权限是usage,因此如果您希望角色能够读取过程的定义但不能运行它,那么您可以使用定义为以所有者权限执行的存储过程:

create or replace procedure read_procedure(PROCEDURE_PATH string)
returns string
language javascript
execute as owner
as
$$
    let rs = snowflake.execute({sqlText: `select get_ddl('procedure', ?) as DDL`, binds:[PROCEDURE_PATH]});
    rs.next();
    return rs.getColumnValue('DDL');
$$;
    
create or replace procedure FOO(S string)
returns string
language javascript
as
$$
    return S;
$$;

grant usage on procedure READ_PROCEDURE(string) to role MY_ROLE;

call read_procedure('FOO(string)');

在此设置中,确保 MY_ROLE 在过程 read_procedure(string) 上使用,但在过程 foo(string) 上没有使用。这样,该角色将能够查看foo(string) 的定义,而无需执行它(使用)所需的特权。

请注意,由于read_procedure(string) 过程以所有者权限运行,因此调用它的任何人都可以读取所有者角色可以读取的任何过程。

编辑:您还可以在 INFORMATION_SCHEMA.PROCEDURES 视图中分部分阅读 SP。您可以在该视图上授予 select 权限,而无需在过程上授予 USAGE 权限。

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 2017-04-07
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2015-12-26
    • 2010-11-01
    • 2016-03-23
    相关资源
    最近更新 更多