我试图创建一个视图来透明地处理BLOB列的加密。我正在使用描述这里的方法。
背景
备注 @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文档的说法,这意味着
SQL0440 SQLCODE-440 SQLSTATE 42884 说明:被调用的参数数量必须与过程匹配。
不过,我不太清楚这是甚麽意思。我尝试省略密码提示以及DECRYPT_BIT调用的密码(使用DECRYPT_BIT设置会话的密码)。
我的一个理论是,我的表定义不应该使用BLOB列。在线演示如何在DB2中实现列级加密的大多数示例使用VARCHAR FOR BIT DATA作为保存加密值的列类型。事实上,DB2文档说要使用这个
当数据被加密时,它被存储为二进制数据字符串。因此,加密的数据应该存储在定义为VARCHAR的列中。
但是,VARCHAR列是限制为32,740字节。我需要加密的数据要大得多。
另一方面,这份文件暗示BLOB是保存加密数据的完美的列类型:
DECRYPT_BINARY: DECRYPT_BINARY函数接受BLOB或CLOB类型的encrypted_data大对象作为其第一个参数。必须指定密码作为其第二个参数,除非SET加密语句指定此会话的默认密码与加密第一个参数的密码相同。
这个理论正确吗?这里还有别的事吗?我如何加密我的BLOB列?在SO社区中还有其他人在DB2中实现了列级加密吗?你能在BLOB专栏上做吗?
发布于 2011-02-06 16:13:05
您可能应该看看IBM数据库加密专家。您正在查看的加密/解密函数实际上并不适用于安全应用程序。
第二个可行的选择是开发用于管理数据加密和解密的外部例程。这可能比较便宜,但需要一些关于DB2和密码学的实际开发和知识。
https://stackoverflow.com/questions/3524571
复制相似问题