Encryption 如何创建一个视图来加密DB2中的BLOB列?
我试图创建一个视图来透明地处理BLOB列的加密。我正在使用所描述的方法 背景 注 @tc发表评论,询问原因 我正在尝试加密这个,因为 然后将加密密钥存储在 代码中的纯文本。我有一个 加密数据的要求 休息。因为应用程序需要 能够加密和解密 在没有人为干预的情况下,数据 钥匙需要存放在某个地方。这 这样,它存储在应用程序中, 它位于不同于的服务器上 数据库。这种方法似乎是可行的 安抚顺从的人们,但我 对其他建议持开放态度 下面是我使用$作为语句终止字符的表定义:Encryption 如何创建一个视图来加密DB2中的BLOB列?,encryption,views,db2,Encryption,Views,Db2,我试图创建一个视图来透明地处理BLOB列的加密。我正在使用所描述的方法 背景 注 @tc发表评论,询问原因 我正在尝试加密这个,因为 然后将加密密钥存储在 代码中的纯文本。我有一个 加密数据的要求 休息。因为应用程序需要 能够加密和解密 在没有人为干预的情况下,数据 钥匙需要存放在某个地方。这 这样,它存储在应用程序中, 它位于不同于的服务器上 数据库。这种方法似乎是可行的 安抚顺从的人们,但我 对其他建议持开放态度 下面是我使用$作为语句终止字符的表定义: CREATE TABLE fileA
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
到目前为止我所知道的
根据"基本法",这意味着,
SQL0440 SQLCODE-440 SQLSTATE 42884
说明:上的参数数
调用必须与过程匹配
然而,我并不确定这意味着什么。我尝试省略密码提示,以及使用SET ENCRYPTION password为DECRYPT_位调用为会话设置密码
我的一个理论是,我的表定义不应该使用BLOB列。在线展示如何在DB2中实现列级加密的大多数示例都将位数据的VARCHAR用作保存加密值的列类型。事实上,政府:
当数据被加密时,它被存储
作为二进制数据字符串。因此
加密数据应存储在
定义为VARCHAR的列
用于位数据
但是,VARCHAR列是可用的。我需要加密的数据要大得多
另一方面,这意味着BLOB是一种保存加密数据的完美列类型:
解密二进制文件:解密二进制文件
函数接受作为其第一个参数
加密的\u数据类型为的大型对象
一团或一团。您必须指定一个
密码作为其第二个参数,
除非SET加密语句
已指定为此的默认值
会话所使用的密码与
第一个参数是加密的
这个理论正确吗?这里还有别的事吗?如何加密BLOB列?SO社区中还有其他人在DB2中实现了列级加密吗?你能在BLOB列上完成吗?你可能应该看看。您正在查看的加密/解密函数实际上并不适用于安全应用程序
第二个可行的选择是开发数据加密和解密管理。这可能更便宜,但需要一些实际的开发以及DB2和加密技术方面的知识。为什么要加密列,然后将密钥存储在源代码中?我需要加密静态数据。由于应用程序需要能够加密和解密数据,而无需人工干预,因此密钥需要存储在某个地方。这样,它存储在应用程序中,该应用程序位于与数据库不同的服务器上。这种方法似乎安抚了合规人员,但我愿意接受其他建议。