代码之家  ›  专栏  ›  技术社区  ›  pkaeding

如何在db2中创建一个视图来加密blob列?

  •  0
  • pkaeding  · 技术社区  · 16 年前

    我试图创建一个视图来透明地处理blob列的加密。我使用的方法是 here .

    背景

    笔记

    有@tc的评论,问为什么 我正在尝试加密这个,因为 然后存储加密密钥(在 纯文本)。我有一个 加密数据的要求 休息一下。因为应用程序需要 能够加密和解密 在没有人为干预的情况下, 钥匙需要存放在某处。这个 它存储在应用程序中, 在不同的服务器上 数据库。这种方法似乎 安抚合规人员,但我是 接受其他建议。

    所以,这是我的表定义(我正在使用 $ 作为语句终止字符):

    CREATE TABLE fileAttachmentEncrypted (
        work_item_id integer NOT NULL,
        fileName varchar(100) NOT NULL,
        documentType varchar(100) NOT NULL,
        contentType varchar(100) NOT NULL,
        fileImage BLOB(104857600) NOT NULL, 
        last_update_by varchar(20) NOT NULL,
        last_update timestamp NOT NULL
    )$
    

    此表创建语句执行干净。

    然后,我尝试创建我的视图:

    CREATE VIEW decryptedFileAttachment AS 
    SELECT work_item_id, fileName, documentType, contentType, 
            DECRYPT_BIT(fileImage, 'SUPERSECRETPASSWORD', 'REMINDER'), 
            last_update_by, last_update FROM fileAttachmentEncrypted$
    

    问题

    这将导致以下错误:

    Error: DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=DECRYPT_BIT;FUNCTION, DRIVER=3.50.152
    SQLState:  42884
    ErrorCode: -440
    Error occured in:
    CREATE VIEW decryptedFileAttachment AS 
    SELECT work_item_id, fileName, documentType, contentType, DECRYPT_BIT(fileImage, 'SUPERSECRETPASSWORD', 'REMINDER'), last_update_by, last_update FROM fileAttachmentEncrypted
    

    到目前为止我所知道的

    根据 DB2 documentation ,这意味着

    sql0440 sqlcode-440 sqlstate 42884

    说明:上的参数数 调用必须与过程匹配。

    但是,我不确定这意味着什么。我尝试忽略密码提示和密码(使用 SET ENCRYPTION PASSWORD ) DECRYPT_BIT 打电话。

    我的一个理论是我的表定义不应该使用blob列。大多数在线示例展示了如何在db2中实现列级加密 VARCHAR FOR BIT DATA 作为保存加密值的列类型。事实上, DB2 documentation says to use this :

    当数据被加密时,它被存储 作为二进制数据字符串。因此, 加密数据应存储在 定义为varchar的列 对于位数据。

    但是,varchar列是 limited to 32,740 bytes . 我需要加密的数据会大得多。

    另一方面, this documentation 意味着 BLOB 是用于保存加密数据的完全交叉列类型:

    decrypt_binary:decrypt_binary 函数接受作为其第一个参数 类型为的加密数据大对象 blob或clob。必须指定 密码作为第二个参数, 除非设置加密语句 已指定为此的默认值 会话的密码与 第一个参数已加密。

    这个理论正确吗?这里还有什么事吗?如何加密blob列?so community中是否有其他人在db2中实现了列级加密?你能在blob列上做吗?

    1 回复  |  直到 16 年前
        1
  •  0
  •   erloewe    15 年前

    你应该看看 IBM Database Encryption Expert . 您正在查看的加密/解密功能实际上并不适用于安全应用程序。

    第二个可行的选择可能是 external routines 用于管理数据的加密和解密。这可能更便宜,但需要一些实际的开发和有关db2和密码的知识。