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

Oracle 11g 透明資料加密 (TDE) 深度解析:SecureFile LOB 與表空間加密實戰

     編輯:Oracle 資料庫基礎

背景:資料安全需求驅動 LOB 儲存升級

Oracle 11g 強化 LOB 儲存能力,核心動力是資料安全合規需求(如醫療資訊 HIPAA、電子病歷)。本文探討如何擴展 TDE 至 LOB 與表空間,保護非結構化敏感資料(如 DICOM 醫學影像)。

一、SecureFile LOB 加密:將安全內建於儲存層

Oracle 11g 將 SecureFile LOB 定位為敏感資料儲存首選,TDE 在欄位層提供工業標準加密演算法:3DES168、AES128、AES192、AES256。

1. 啟用 TDE 基礎環境

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";

2. SecureFile LOB 加密控制

-- 預設加密 (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 patimages
  • 索引遷移:ALTER INDEX ... REBUILD ONLINE TABLESPACE patimages
  • 臨時表空間、UNDO 表空間、BFILE 不支援加密
  • 加密金鑰在表層套用,表空間層級無法統一 REKEY(僅初始建立時可指定)
  • 跨資料庫傳輸加密表空間:需相同 endianness 並共享 Wallet

三、DICOM 醫學影像加密儲存實戰

DICOM (Digital Imaging and Communications in Medicine) 是醫學影像儲存傳輸國際標準。Oracle 11g 擴充 ORDDicom 物件型別,支援 SecureFile LOB 儲存,享有壓縮、去重、加密三重優勢。

建立 DICOM 儲存表 (含加密、壓縮、去重)

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);

SQL*Loader 直接載入 DICOM 檔案

使用控制檔指定 LOBFILE 參數,將 DICOM 檔案直接載入 ORDDicom 物件屬性,同步初始化匿名版與縮圖欄位。

PL/SQL 後處理:產生縮圖與匿名資料

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;
/

查詢 DICOM 中繼資料

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 原生支援醫療場景,成為政府/醫療資訊系統首選資料庫平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved