1

我用清單3在下面的鏈接以創建FIELDPROC程序QGPL/MOBHOMEPAS應加密變量char列Field Encryption in DB2 for i具有數據庫與FIELDPROC麻煩(在iSeries列加密)

予編譯RPGLE程序和我創建一個單獨的數據庫DBMLIB/UMAAAP00如下

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個字符左右的密碼列作爲加密。

+0

您是否完全按照提供的使用示例代碼?或者你是否添加了任何代碼來限制某些用戶的解碼? QGPL.MOBHOMEPAS是否可用於運行RUNQRY的作業? – user2338816 2015-04-03 22:22:18

回答

1

如果用於命名FieldProc程序QGPL.MOBHOMEPAS的代碼是在源自OP的URL [源代碼的有效副本]之後建模的,BT源代碼位於 - 請求位置註釋部分...爲什麼?],那麼代碼是使用DB2基本級別的IBM i 7.1 SQL FieldProc支持實現的,而不是下一個 [增強]級別的支持,其中添加了屏蔽功能。也就是說,除了函數代碼= 8以外,每個調用都必須始終是一個編碼或解碼操作,因爲數據的任何掩碼都不被支持,因爲更改[具有該支持級別]的數據會破壞數據在表中。

注意[來自http://www.mcpressonline.com/rpg/db2-field-procedures-finally-support-conditional-masking.html]描述的預掩碼支持[8個參數]和自掩碼 - 支持[9個參數]的編碼要求的差異作爲運行查詢(RUNQRY)的先決條件,和更新數據(UPDDTA)設有掩模被呈現給用戶的數據

新FieldProc遮蔽支撐圍繞着兩個主要組件。 第一個組件是一個新參數,該參數被添加到參數 列表中,DB2引擎將每個 解碼調用傳遞給FieldProc程序。這個新參數控制FieldProc程序是否可以返回一個被屏蔽的值。有一些DB2操作 - 例如 作爲RGZPFM(重組物理文件成員)命令和觸發 處理 - 總是要求返回 的明文數據版本。第二個組件是一個新的特殊SQLState值 ('09501'),只要 在編碼調用上傳遞了一個屏蔽值,它將由FieldProc程序返回。這樣可以防止掩碼的 值被編碼,這會導致原始數據丟失值 。當返回此特殊SQLState值時,DB2 將忽略由FieldProc 程序傳回的編碼值,而是使用當前存儲在該列的 記錄映像中的值。