Oracle 11g 強化 LOB 儲存能力,核心動力是資料安全合規需求(如醫療資訊 HIPAA、電子病歷)。本文探討如何擴展 TDE 至 LOB 與表空間,保護非結構化敏感資料(如 DICOM 醫學影像)。
Oracle 11g 將 SecureFile LOB 定位為敏感資料儲存首選,TDE 在欄位層提供工業標準加密演算法:3DES168、AES128、AES192、AES256。
11g 簡化設定:僅需在 SQLNET.ORA 指定 Wallet 目錄,再開啟加密金鑰。
-- SQLNET.ORA
ENCRYPTION_WALLET_LOCATION =
(SOURCE = (METHOD = FILE)
(METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin/orcl/wallet)))
-- SQL*Plus
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "r3aL1y!T16ht";
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "r3aL1y!T16ht";
-- 預設加密 (AES192)
ALTER TABLE trbtkt.secure_tickets MODIFY (document CLOB ENCRYPT);
-- 指定 AES256
ALTER TABLE trbtkt.secure_tickets MODIFY (scrnimg CLOB ENCRYPT USING 'AES256');
-- 重新加密 (演算法變更或金鑰輪換)
ALTER TABLE trbtkt.secure_tickets MODIFY (scrnimg CLOB REKEY USING 'AES192');
-- 分區層級加密
ALTER TABLE trbtkt.secure_tickets MODIFY PARTITION sts_open (LOB(document) (ENCRYPT));
-- 移除加密
ALTER TABLE trbtkt.secure_tickets MODIFY (scrnimg CLOB DECRYPT);
注意:同一 LOB 分區下所有 SecureFile 必須使用相同加密演算法,分區層級可獨立控制啟用/停用。
10g R2 支援表/索引加密,但識別加密對象工作量大。11g 引入表空間加密,區塊層級實現,建立時指定演算法,所有內部物件自動加密。
DROP TABLESPACE patimages INCLUDING CONTENTS AND DATAFILES;
CREATE TABLESPACE patimages
DATAFILE '/u01/app/oracle/oradata/orcl/patimages01.dbf'
SIZE 64M REUSE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO
ENCRYPTION USING 'AES256'
DEFAULT STORAGE (ENCRYPT);
ALTER TABLE ... MOVE TABLESPACE patimagesALTER INDEX ... REBUILD ONLINE TABLESPACE patimagesDICOM (Digital Imaging and Communications in Medicine) 是醫學影像儲存傳輸國際標準。Oracle 11g 擴充 ORDDicom 物件型別,支援 SecureFile LOB 儲存,享有壓縮、去重、加密三重優勢。
CREATE TABLE mips.patient_images (
patient_id NUMBER,
name VARCHAR2(30),
ssn VARCHAR2(11),
dob DATE,
dicom_image ORDSYS.ORDDICOM,
anonymous ORDSYS.ORDDICOM,
thumbprint ORDSYS.ORDIMAGE
)
TABLESPACE patimages
LOB (dicom_image.source.localData) STORE AS SECUREFILE (
TABLESPACE patimages, DISABLE STORAGE IN ROW,
DEDUPLICATE, COMPRESS HIGH, CACHE READS)
LOB (anonymous.source.localData) STORE AS SECUREFILE (
TABLESPACE patimages, DISABLE STORAGE IN ROW,
DEDUPLICATE, COMPRESS HIGH, CACHE READS)
LOB (thumbprint.source.localData) STORE AS SECUREFILE (
TABLESPACE patimages, DISABLE STORAGE IN ROW,
DEDUPLICATE, COMPRESS HIGH, CACHE READS);
使用控制檔指定 LOBFILE 參數,將 DICOM 檔案直接載入 ORDDicom 物件屬性,同步初始化匿名版與縮圖欄位。
BEGIN
ORD_DICOM.SETDATAMODEL; -- 載入 DICOM 資料模型
FOR rec IN (SELECT patient_id, dicom_image, anonymous, thumbprint
FROM mips.patient_images FOR UPDATE) LOOP
rec.dicom_image.setProperties();
-- 產生 150x200 JPEG 縮圖
rec.dicom_image.processCopy('fileFormat=JPEG fixedScale=150,200', rec.thumbprint);
-- 產生匿名版本 (移除病患隱私欄位)
rec.dicom_image.makeAnonymous(GEN_UID(rec.patient_id), rec.anonymous);
-- 寫回
UPDATE mips.patient_images
SET dicom_image = rec.dicom_image,
anonymous = rec.anonymous,
thumbprint = rec.thumbprint
WHERE patient_id = rec.patient_id;
END LOOP;
COMMIT;
END;
/
SELECT pi.patient_id, pi.name, pi.ssn,
pi.dicom_image.sop_instance_uid AS dicom_sop_uid,
pi.thumbprint.getContentLength() AS thumb_size
FROM mips.patient_images pi
ORDER BY pi.patient_id;
Oracle 11g SecureFile + TDE 為非結構化敏感資料提供:壓縮/去重節省空間、區塊級加密合規、DICOM 原生支援醫療場景,成為政府/醫療資訊系統首選資料庫平台。