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

Oracle Spatial 空間資料加密策略:從應用層到硬體綁定的多層防護

     編輯:Oracle 資料庫基礎

背景:空間資料資產保護需求

GIS 資料 (客戶分布、管線網路、國防設施) 屬高價值智慧財產。Oracle Spatial (9i Release 2+) 提供 SDO_GEOMETRY 物件型別,配合可回傳自訂型別的函數、Java/C 外部程序,可建立多層次加密架構。

Oracle 9i R2 關鍵特性支撐

  • 函數可回傳 SDO_GEOMETRY 等自訂物件型別。
  • 支援 Java / C 語言撰寫預存程序 (JPublisher / OCI)。

方案一:應用層加密 (簡易版)

架構

[Client App] --(加密金鑰)--> [PL/SQL Function] --> [解密 BLOB → SDO_GEOMETRY] --> [Client]

實作步驟

  1. 資料寫入時:Client 端以對稱加密 (AES/DES) 將 SDO_GEOMETRY 序列化加密為 BLOB 存入資料表。
  2. 建立函數 F_DECRYPT_GEOM(p_blob BLOB, p_key VARCHAR2) RETURN SDO_GEOMETRY。
  3. 查詢時:SELECT F_DECRYPT_GEOM(geom_blob, :app_key) FROM spatial_table ...。
  4. 金鑰由 Client App 管理 (配置檔、Keystore、HSM),資料庫端不知金鑰明文。

優缺點

  • ✅ 實作簡單,累 PL/SQL/Java 即可。
  • ❌ 金鑰在網路傳輸、Client 記憶體中暴露風險。
  • ❌ DBA 可繞過應用直接呼叫函數 (若知金鑰)。

方案二:硬體綁定雙因子加密 (高階版)

核心概念:雙金鑰衍生

Final_Key = KDF(Server_HW_Key, Client_App_Key)

  • Server_HW_Key:C 外部程序讀取伺服器硬體特徵 (CPU ID、主機板序號、TPM、MAC) 經 KDF 衍生,永不離開資料庫進程記憶體。
  • Client_App_Key:應用層傳入,每次查詢攜帶。
  • 僅當特定伺服器 + 合法 Client同時在場,才能解密。

實作關鍵 (C 外部程序 + OCI)


// 概念程式碼片段
#include 
#include 

SDO_GEOMETRY* decrypt_geom(OCIExtProcContext* ctx, OCIBlobLocator* blob, char* client_key) {
  // 1. 讀取硬體特徵 → 衍生 Server Key
  char hw_id[256];
  get_hardware_fingerprint(hw_id);  // 如 CPUID, dmidecode, TPM_Quote
  char server_key[64];
  kdf(hw_id, server_key);

  // 2. 結合 Client Key → Final Key
  char final_key[64];
  kdf_combine(server_key, client_key, final_key);

  // 3. 解密 BLOB → 建構 SDO_GEOMETRY 物件回傳
  //    需使用 OCIObjectNew, OCINumber, OCIArray 等建構 SDO_GEOMETRY 屬性
  return construct_sdo_geometry(decrypted_bytes);
}

註:需具備 OCI 程式設計經驗,編譯為 Shared Library (.so/.dll),於資料庫註冊 CREATE LIBRARY / CREATE FUNCTION ... AS LANGUAGE C。

資料寫入對稱流程

  1. Client 取得 Client_Key。
  2. 呼叫 F_ENCRYPT_GEOM(geom, client_key) → 內部同樣衍生 Final_Key 加密 → 回傳 BLOB。
  3. 寫入資料表。

安全性比較

維度方案一 (應用層)方案二 (硬體綁定)
實作難度低 (PL/SQL/Java)高 (C/OCI + 硬體介面)
金鑰洩露風險中 (Client 端/網路)極低 (Server Key 不出記憶體)
資料庫被盜風險高 (有金鑰即可解)極低 (離開特定伺服器無法解)
備份/遷移影響無遷移伺服器需重新加密/授權
效能影響低中 (C 函數較快,但硬體指紋計算一次)

部署建議

  • 方案一適用:一般商業 GIS、內部系統、金鑰管理成熟環境。
  • 方案二適用:國防、關鍵基礎設施、高價值資料授權分發、SaaS 多租戶隔離。
  • 兩者可共存:敏感圖層用方案二,一般圖層用方案一。
  • 金鑰輪換機制:定期更新 Client Key,Server Key 隨硬體固定,需重新加密歷史資料。

結語

Oracle Spatial 結合 9i R2 物件型別回傳與外部程序能力,提供從輕量到軍規級的空間資料加密彈性。選擇哪一層防護,取決於資料價值、威脅模型與開發資源。核心原則:金鑰不落地、解密不離庫、硬體綁定身分。

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