Encryption 数据库上的FIELDPROC有问题(Iseries上的列加密)

Encryption 数据库上的FIELDPROC有问题(Iseries上的列加密),encryption,passwords,ibm-midrange,password-encryption,db2-400,Encryption,Passwords,Ibm Midrange,Password Encryption,Db2 400,我在下面的链接中使用了清单3来创建一个FIELDPROC程序QGPL/MOBHOMEPAS,它应该加密一个变量char列 我编译了RPGLE程序,并创建了一个单独的数据库DBMLIB/umaap00,如下所示 A R UMAAAF00 TEXT('- A TEST ENCRYPTION') A*

我在下面的链接中使用了清单3来创建一个FIELDPROC程序QGPL/MOBHOMEPAS,它应该加密一个变量char列

我编译了RPGLE程序,并创建了一个单独的数据库DBMLIB/umaap00,如下所示

A          R UMAAAF00                  TEXT('-          
A                                      TEST ENCRYPTION')
A*                                                      
A            IPIAAA        20A         VARLEN(20)       
A            KYGAAA        11S 2       COLHDG('SALARY') 
然后我使用strsql修改表并保护IPIAAA

ALTER TABLE DBMLIB/UMAAAP00 alter column IPIAAA set FIELDPROC
QGPL.MOBHOMEPAS  

ALTER COMPLETED FOR TABLE UMAAAP00 IN DBMLIB.          
出于某种原因,当我通过upddta直接将条目添加到文件本身,然后进行wrkqry查询、归档并查看它们时,我并不认为它们是加密的


这不是应该的工作方式吗?有人能帮我解释一下逻辑吗?最后,我想从头开始创建一个简单的表,它有一个20个字符左右的密码列作为加密

如果命名的FieldProc程序QGPL.MOBHOMEPAS使用的代码是根据OP的URL中找到的源代码[有效副本]建模的[顺便说一句,其中包括请求注释部分的位置…为什么?],那么该代码将使用DB2 for IBM i 7.1 SQL FieldProc支持的基本级别实现,不是添加了屏蔽功能的下一个[增强]支持级别。也就是说,除了函数code=8之外的每个调用都必须始终是不支持数据屏蔽的编码或解码操作,因为更改数据[具有该支持级别]会损坏表中的数据

注意[来自]针对预屏蔽支持[八个参数]描述的编码要求的差异,以及由于屏蔽支持[九个参数]是运行查询(RUNQRY)和更新数据(UPDDTA)功能屏蔽呈现给用户的数据的先决条件:

新的FieldProc掩蔽支持围绕两个主要组件展开。 第一个组件是添加到参数中的新参数 列出DB2引擎在每个 解码呼叫。此新参数控制FieldProc 程序可以返回一个屏蔽值。有一些DB2操作,例如 作为RGZPFM(重新组织物理文件成员)命令和触发器 始终需要数据的明文版本才能执行的处理 被退回。第二个组件是一个新的特殊SQLState值 ('09501'),每当FieldProc程序 在encode调用上传递一个屏蔽值。这就防止了蒙面 值,这将导致原始数据 失去的价值。当返回这个特殊的SQLState值时,DB2 将忽略FieldProc传回的编码值 编程并使用当前存储在 记录该列的图像

由于某种原因,当我通过upddta直接将条目添加到 文件本身,然后执行wrkqry查询、归档并查看它们 不要将它们视为加密的。这不是应该的工作方式吗

不,这不是应该的工作方式。数据将仅在磁盘上编码。
当您查看数据时,FIELDPROC程序将自动对其进行解码,无论您使用什么方式查看数据(WRKQRY[yuck]、DFU、STRSQL,等等)。这就是它在不考虑字段屏蔽(这是不同的/附加功能)的情况下的工作方式。

您是否完全按照提供的示例代码使用?或者您是否添加了任何代码来限制某些用户的解码?运行RUNQRY的作业是否可以使用QGPL.MOBHOMEPAS?