首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 內建加密函數實戰:ENCRYPT / DECRYPT_CHAR 範例

     編輯:DB2 教學

需求背景

敏感欄位(如密碼、身分證號)落地加密,應用層不想管理金鑰,直接使用 DB2 內建函數搭配 Session 級金鑰。

完整操作步驟

-- 1. 建表,欄位用 FOR BIT DATA 儲存二進位密文
CREATE TABLE encode_demo (col1 VARCHAR(100) FOR BIT DATA);

-- 2. 設定 Session 級加密密碼(全域變數)
SET ENCRYPTION PASSWORD = 'loveunix';

-- 3. 預覽加密結果
VALUES ENCRYPT('loveunix');
-- 回傳類似 x'08BC44FF6A05A3D5240E86CFB2CE60F243AA83C41B7221D7'

-- 4. 寫入加密資料
INSERT INTO encode_demo VALUES (ENCRYPT('loveunix'));

-- 5. 查詢解密
SELECT DECRYPT_CHAR(col1) AS plain_text FROM encode_demo;
-- 回傳 loveunix

關鍵說明

  • FOR BIT DATA:確保 VARCHAR 儲存二進位密文,避免字碼頁轉換損壞資料
  • SET ENCRYPTION PASSWORD:Session 級別,連線斷開自動失效,適合應用連線池模式
  • ENCRYPT() 預設使用 RC2 加密,亦可指定演算法:ENCRYPT(data, password, 'AES')
  • DECRYPT_CHAR() 回傳 VARCHAR;二進位資料用 DECRYPT_BINARY()
  • 金鑰不儲存於資料庫,安全性取決於應用端傳遞密碼的管控

適用場景與限制

優點缺點/注意
零程式碼加密、金鑰不落地同一 Session 密碼固定,需應用層輪換
SQL 層面即可完成,無需外部套件大量資料加解密有 CPU 開銷
支援 AES/RC2/3DES 多種演算法不支援欄位級不同金鑰(需應用層自行管理)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved