我试图创建一个视图来透明地处理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列上做吗?