【问题标题】:Snowflake UDFs and Data Encryption雪花 UDF 和数据加密
【发布时间】:2020-08-14 10:46:00
【问题描述】:

我想知道是否可以创建 UDF 来解密通过使用私钥作为加密值插入到表中的值。我用谷歌搜索真的找不到任何东西。我发现的唯一一件事是,可能有一个使用 JavaScript UDF 和 CryptoJS 的选项,但我不明白是否真的可以导入要在 UDF 中使用的 CryptoJS 模块。从我在文档中收集的内容来看,这是不可能的。

是否有人知道此类功能、可能性或解决方法? 谢谢!

【问题讨论】:

  • 您可以查看crypto.subtle,如此处所述。至少在浏览器中它是原生的。不确定雪花是否也支持它。 stackoverflow.com/a/59194711/4219202 否则,最简单的方法是使用像 Python 这样的客户端读取加密数据,解密并写回纯数据。

标签: javascript encryption user-defined-functions snowflake-cloud-data-platform private-key


【解决方案1】:

您实际上并不需要 UDF 来执行此操作。 Snowflake 支持使用私钥进行加密和解密功能。 (从技术上讲,此示例显示了一个转换为私钥的私有密码。但它也支持直接密钥规范;请继续阅读):

select encrypt('Hello, world.', '531daa2aec446116');  -- Displays as binary jibberish.
select hex_encode(encrypt('Hello, world.', '531daa2aec446116'));  -- Displays as HEX. Convert to hex to store as either binary or string.
create temporary table ENCRYPTED_TABLE(COL1 binary, COL2 string);
insert into ENCRYPTED_TABLE select hex_encode(encrypt('Hello, world.', '531daa2aec446116')), hex_encode(encrypt('Hello, world.', '531daa2aec446116'));
select decrypt(COL1, '531daa2aec446116'), decrypt(hex_decode_binary(COL2), '531daa2aec446116') from ENCRYPTED_TABLE;

如果您正在寻找一种方法来解密另一个系统加密的值,那么解密函数可能会也可能不会起作用。 Snowflake 的加密和解密功能使用 AES256 密码的对称加密。如果源密码是 AES-256,您可能会得到解密工作。如果源密码是其他任何东西,它不会。您可能想尝试 ENCRYPT_RAW 函数,该函数接受密钥,而不是处理如何将密码短语转换为密钥的复杂性。

https://docs.snowflake.com/en/sql-reference/functions/encrypt.html

【讨论】:

    【解决方案2】:

    您可以使用公共预览功能External Tokenization

    外部标记化允许组织标记敏感数据 在将该数据加载到雪花中并动态去标记之前 使用带有外部函数的屏蔽策略在查询运行时获取数据。

    甚至还有integration with Protegrity Data Security Gateway

    目前,Snowflake 支持使用 Protegrity 来管理 跨所有数据存储(例如表、 数据库、数据仓库)在您的组织中。当雪花来电 屏蔽策略中的外部函数,进行 REST API 调用 到 Protegrity 数据安全网关 (DSG)。

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2020-04-09
      • 2021-09-02
      • 1970-01-01
      相关资源
      最近更新 更多