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

Encryption 如何创建一个视图来加密DB2中的BLOB列?,encryption,views,db2,Encryption,Views,Db2,我试图创建一个视图来透明地处理BLOB列的加密。我正在使用所描述的方法 背景 注 @tc发表评论,询问原因 我正在尝试加密这个,因为 然后将加密密钥存储在 代码中的纯文本。我有一个 加密数据的要求 休息。因为应用程序需要 能够加密和解密 在没有人为干预的情况下,数据 钥匙需要存放在某个地方。这 这样,它存储在应用程序中, 它位于不同于的服务器上 数据库。这种方法似乎是可行的 安抚顺从的人们,但我 对其他建议持开放态度 下面是我使用$作为语句终止字符的表定义: CREATE TABLE fileA

我试图创建一个视图来透明地处理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
到目前为止我所知道的

根据"基本法",这意味着,

SQL0440 SQLCODE-440 SQLSTATE 42884

说明:上的参数数 调用必须与过程匹配

然而,我并不确定这意味着什么。我尝试省略密码提示,以及使用SET ENCRYPTION password为DECRYPT_位调用为会话设置密码

我的一个理论是,我的表定义不应该使用BLOB列。在线展示如何在DB2中实现列级加密的大多数示例都将位数据的VARCHAR用作保存加密值的列类型。事实上,政府:

当数据被加密时,它被存储 作为二进制数据字符串。因此 加密数据应存储在 定义为VARCHAR的列 用于位数据

但是,VARCHAR列是可用的。我需要加密的数据要大得多

另一方面,这意味着BLOB是一种保存加密数据的完美列类型:

解密二进制文件:解密二进制文件 函数接受作为其第一个参数 加密的\u数据类型为的大型对象 一团或一团。您必须指定一个 密码作为其第二个参数, 除非SET加密语句 已指定为此的默认值 会话所使用的密码与 第一个参数是加密的


这个理论正确吗?这里还有别的事吗?如何加密BLOB列?SO社区中还有其他人在DB2中实现了列级加密吗?你能在BLOB列上完成吗?

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


第二个可行的选择是开发数据加密和解密管理。这可能更便宜,但需要一些实际的开发以及DB2和加密技术方面的知识。

为什么要加密列,然后将密钥存储在源代码中?我需要加密静态数据。由于应用程序需要能够加密和解密数据,而无需人工干预,因此密钥需要存储在某个地方。这样,它存储在应用程序中,该应用程序位于与数据库不同的服务器上。这种方法似乎安抚了合规人员,但我愿意接受其他建议。