我们可以像在 SQL Server 中那样加密雪花中的存储过程吗?

Posted

技术标签:

【中文标题】我们可以像在 SQL Server 中那样加密雪花中的存储过程吗?【英文标题】:Can we Encrypt Stored procedures in snowflakes similar to what we do in SQL Server? 【发布时间】:2020-04-27 09:50:48 【问题描述】:

我们能否像在 SQL Server 中那样加密 Snowflake 中的存储过程?

例如,类似于

CREATE PROCEDURE #EncryptSP
WITH ENCRYPTION
AS
QUERY HERE
GO

【问题讨论】:

【参考方案1】:

Snowflake 数据库中的所有内容都是加密的,因此我认为问题在于允许用户运行存储过程但看不到其内容。这不是问题。

-- Using a database called TEST
grant usage on database test to role public;
grant usage on schema public to role public;

-- Create a secure procedure and run it as SYSADMIN (or whatever role you want)
create or replace secure procedure test.public.hello_world()
returns string
language javascript
execute as owner
as
$$

    return "Hello world";

$$;

-- Allow users in the PUBLIC role to run the procedure
grant usage on procedure HELLO_WORLD() to role PUBLIC;

-- Test that users in role PUBLIC can run the procedure
use role public;
use database test;
use schema public;
call HELLO_WORLD();

-- However, they cannot see the stored procedure
select get_ddl('procedure', 'HELLO_WORLD()');

-- The owner can.
use role SYSADMIN;
select get_ddl('procedure', 'HELLO_WORLD()');

【讨论】:

嗨,格雷格,感谢您的回答。这似乎是合乎逻辑的。我希望用户使用存储过程,但看不到您指出的内容。那么,只有管理员角色我们才能做到这一点,还是我们也可以创建自定义角色? 您也可以使用自定义角色。 谢谢格雷格!感谢您的及时回复。

以上是关于我们可以像在 SQL Server 中那样加密雪花中的存储过程吗?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以像在处理中那样在 PyQt5 中绘制 3D/2D 对象吗?

SQL Server用户自定义函数(UDF)

我可以将 Flyway 与 SQL Server 加密一起使用吗?

在Snowflake sql中我们可以调用Oracle Sequence函数吗

为啥我们不能像在 java 中那样使用 new ClassName() 而不是使用 new ClassName?

无需密码攻击 Microsoft SQL Server