敏感欄位(如密碼、身分證號)落地加密,應用層不想管理金鑰,直接使用 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 多種演算法 | 不支援欄位級不同金鑰(需應用層自行管理) |