如何创建一个视图来加密DB2中的BLOB列?

时间:2010-08-19 17:40:35

标签: encryption views db2

我正在尝试创建一个透明地处理BLOB列加密的视图。我正在使用here描述的方法。

背景

  

     

@tc有评论,问为什么   我试图加密这个,因为   然后存储加密密钥(in   纯文本)在代码中。我有一个   要求加密数据   在休息。由于应用程序需要   能够加密和解密   数据,没有人为干预,   密钥需要存储在某个地方。这个   方式,它存储在应用程序中,   这是在不同的服务器上   数据库。这种方法似乎   安抚合规伙伴,但我是   对其他建议持开放态度。

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

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

     

说明:关于的参数数量   CALL必须与程序匹配。

但是,我不确定这意味着什么。我尝试省略密码提示以及密码(使用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   函数接受作为其第一个参数   一个encrypted_data类型的大对象   BLOB或CLOB。你必须指定一个   密码作为其第二个参数,   除非SET ENCRYPTION语句   已指定为此默认值   会话使用相同的密码   第一个参数是加密的。

这个理论是否正确?还有其他事情发生在这里吗?如何加密我的BLOB列? SO社区中的其他任何人是否在DB2中实现了列级加密?你能在BLOB专栏上做到吗?

1 个答案:

答案 0 :(得分:0)

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

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