首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建视图来加密DB2中的BLOB列?

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

Stack Overflow用户
提问于 2010-08-19 17:40:35
回答 1查看 1.9K关注 0票数 0

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

背景

备注 @tc发表了一条评论,询问我为什么要对此进行加密,因为加密密钥随后被存储在代码中(以纯文本形式)。我需要在休息时加密数据。由于应用程序需要能够加密和解密数据,无需人工干预,所以密钥需要存储在某个地方。这样,它就存储在与数据库不同的服务器上的应用程序中。这种方法似乎让合规人员感到满意,但我愿意听取其他建议。

下面是我的表定义(我使用$作为语句终止字符):

代码语言:javascript
运行
复制
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
)$

这个表创建语句执行的很干净。

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

代码语言:javascript
运行
复制
CREATE VIEW decryptedFileAttachment AS 
SELECT work_item_id, fileName, documentType, contentType, 
        DECRYPT_BIT(fileImage, 'SUPERSECRETPASSWORD', 'REMINDER'), 
        last_update_by, last_update FROM fileAttachmentEncrypted$

问题

这将导致以下错误:

代码语言:javascript
运行
复制
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专栏上做吗?

EN

回答 1

Stack Overflow用户

发布于 2011-02-06 16:13:05

您可能应该看看IBM数据库加密专家。您正在查看的加密/解密函数实际上并不适用于安全应用程序。

第二个可行的选择是开发用于管理数据加密和解密的外部例程。这可能比较便宜,但需要一些关于DB2和密码学的实际开发和知识。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3524571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档