无法在 DB2 中插入和 ENCRYPT_AES()

问题描述 投票:0回答:0

DB2:版本 7.3 产品:DB2 UDB for AS/400 v07.03.0000 V7R3m0

Client:IBM i Access Client Solutions(64 位)版本:1.1.8.8 Build id: 1380 2021-09-13 13:47:59 C:\Users\Public\IBM\ClientSolutions csbundle.jar

java.version: 11.0.11 java.vendor: AdoptOpenJDK java.home: C:\Users\Public\IBM\ClientSolutions\Start_Programs\Windows_x86-64\jdk-11.0.11+9-jre java.fullversion: 11.0.11+9 JRE 11 Windows 10 amd64-64-Bit Compressed 参考文献 20210421_976 OpenJ9 - b4cc246d9 OMR - 162e6f729 JCL

  • 7796c80419 基于jdk-11.0.11+9

我正在尝试插入 AES 加密数据。我似乎可以通过先插入然后使用 ENCRYPT_AES 更新新记录来做到这一点,但我更愿意一次插入所有记录,因为我认为它会更有效率。

create table POS_CCR_TEST_LOG (
  WEBTX_ID INT generated by default as identity not null primary key,
  CLIENT_APP VARCHAR(9),
  PRODUCT VARCHAR(12),
  POLICY_NUMBER CHAR(9),
  TX_REQUEST VARCHAR(10000) FOR BIT DATA,
  TX_RESPONSE VARCHAR(10000) FOR BIT DATA,
  FAULT VARCHAR(1000) FOR BIT DATA,
  CREATE_DATE TIMESTAMP default CURRENT_TIMESTAMP
);
LABEL ON TABLE POS_CCR_TEST_LOG is 'CCR Web Testing' ; 

测试以下工作以确保我们的表格按我们预期的方式工作:

insert into POS_CCR_TEST_LOG (CLIENT_APP, PRODUCT, POLICY_NUMBER, TX_REQUEST, TX_RESPONSE, FAULT)
values
    ('Clien1', 'MVR', '123456789', x'', x'9091', '')
  , ('Clien2', 'MVR', '123456789', x'12345434556676555667', x'564312', '')
  , ('Clien3', 'MVR', '123243569', x'25250611234726042013', x'40', '')
 ;  

我们想使用 ENCRYPT_AES() 插入,但是下面的方法不起作用:

insert into POS_CCR_TEST_LOG (CLIENT_APP, PRODUCT, POLICY_NUMBER, TX_REQUEST, TX_RESPONSE, FAULT) values ('Clien4', 'MVX', '00000000', ENCRYPT_AES('Inserted Request', 'key0123456789'), ENCRYPT_AES('Inserted Response', 'key0123456789'), 'bingo!');

DB2 回复:

[ 02/25/2023, 08:20:55 PM ] Run Selected... 插入到 POS_CCR_WEBTX_LOG(CLIENT_APP,产品,POLICY_NUMBER,TX_REQUEST, TX_RESPONSE, FAULT) 值('Client', 'MVX', '00000000', ENCRYPT_AES('插入请求', 'key123'), ENCRYPT_AES('插入 响应', 'key123'), ENCRYPT_AES('插入故障', 'key123')) SQL 状态:02000 供应商代码:100 消息:[SQL0100] 找不到行 插入。原因 。 . . . . : 具有以下条件之一 occurred: -- 如果这是一个 FETCH 语句,则不再有行满足 选择值(文件结尾)。游标的名称是 INSERT 并且 结果集标识符为 0。如果结果集标识符为 非零,此游标的结果表作为 存储过程结果集。 -- 如果这是一个 FETCH 语句 可滚动游标,未找到记录。如果指定了 NEXT,则结束 达到了文件。如果指定了 PRIOR,则 文件到达。如果指定了 RELATIVE,则要么 文件或已到达文件末尾,具体取决于指定的值。 如果指定了 FIRST 或 LAST,则没有记录满足选择 标准。游标的名称是 INSERT。 -- 如果这是嵌入式 SELECT 语句,没有行满足选择值。 -- 如果这是 UPDATE、INSERT、DELETE 或 MERGE 语句,没有行满足 子选择、WHERE 子句或 MERGE 条件。没有行被更新, 插入或删除。 -- 如果指定了 SKIP LOCKED DATA,则不 符合返回条件的可用行。恢复 。 . . :没有恢复 是必要的。语句成功运行,但出现警告(217 毫秒)0 行受到语句的影响

以下工作,先插入然后使用 ENCRYPT_AES 更新,但这是一个我们希望避免的两步过程:

insert into POS_CCR_TEST_LOG (CLIENT_APP, PRODUCT, POLICY_NUMBER, FAULT) values ('Clien5', 'MVX', '00000000', 'bingo!') ;

update POS_CCR_TEST_LOG set TX_REQUEST = ENCRYPT_AES('If you can read this request, it is decrypted.', 'xxx0123456789') where WEBTX_ID = 4;

update POS_CCR_TEST_LOG set TX_RESPONSE = ENCRYPT_AES('If you can read this response, it is decrypted.', 'xxx0123456789') where WEBTX_ID = 4; 
select CLIENT_APP, DECRYPT_CHAR(TX_REQUEST, 'xxx0123456789') Request, DECRYPT_CHAR(TX_RESPONSE, 'xxx0123456789') Response from POS_CCR_TEST_LOG where WEBTX_ID = 4; 

目标是在单个 INSERT 中执行所有操作。可能吗?

sql db2 aes db2-400
© www.soinside.com 2019 - 2024. All rights reserved.