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

Oracle Spatial 空間數據加密技術探討:從自定義函數到硬件綁定雙因子方案

     編輯:Oracle 資料庫基礎

前言:Spatial 獨特的加密切入點

Oracle 9i+ 引入 SDO_GEOMETRY 類型與自定義函數返回對象類型特性,配合 Java/C 外部過程,為空間數據提供了原生加密能力。本文系統對比兩種方案架構。

一、 Oracle 9i Spatial 關鍵特性支撐

  • 自定義函數返回對象類型:CREATE FUNCTION ... RETURN SDO_GEOMETRY
  • Java/C 存儲過程:AS LANGUAGE JAVA / AS EXTERNAL LIBRARY ... LANGUAGE C
  • 幾何列透明訪問:應用層調用解密函數即可獲取明文幾何對象,無感知加密存儲

二、 方案一:簡單加密 — 應用層單密鑰

架構

  1. 入庫:應用層 AES_Encrypt(geom, K_app) → 存 BLOB
  2. 出庫:CREATE FUNCTION decrypt_geom(p_blob BLOB, p_key VARCHAR2) RETURN SDO_GEOMETRY AS LANGUAGE JAVA ...
  3. 查詢:SELECT decrypt_geom(geom_blob, :app_key) FROM spatial_tbl

優缺點

優點缺點
開發簡單 (純 Java SP)密鑰在網絡/內存傳輸暴露
跨平台部署易DBA 可攔截 SQL 獲取密鑰
性能尚可備份文件離線破解風險

三、 方案二:高級加密 — C/OCI 雙因子硬件綁定

核心模型

K_session = KDF( H(Server_Hardware_ID) || K_Client )

  • 服務端因子:CPU ID / 主板序列號 / TPM EK 憑證 → K_srv (不可導出)
  • 客戶端因子:應用生成一次性 K_cli 或從 HSM 獲取
  • 雙方缺一不可,數據文件拷貝到他機無法解密

實現棧

  1. C 外部過程 (需 OCI 編程):
      1. 讀取硬件指紋 (SMBIOS/IOCTL/TPM) 2. 派生 K_srv 3. 接收 K_cli 參數 4. KDF 組合 K_session 5. 解密 BLOB → 構造 SDO_GEOMETRY (需 OCIObjectNew/SetAttr 等) 6. 返回對象句柄
  2. 共享庫編譯:gcc -shared -o spatial_crypto.so spatial_crypto.c -I$ORACLE_HOME/rdbms/public -L$ORACLE_HOME/lib -lclntsh
  3. 配置 listener.ora (SID_LIST 增加 PROGRAM=extproc)、tnsnames.ora (HS=OK)
  4. 創建 Library 對象:CREATE LIBRARY spatial_crypto_lib AS '$ORACLE_HOME/lib/spatial_crypto.so';
  5. 發布函數:
    CREATE OR REPLACE FUNCTION decrypt_geom_adv(p_blob BLOB, p_cli_key VARCHAR2)
    RETURN SDO_GEOMETRY
    AS EXTERNAL
    LIBRARY spatial_crypto_lib
    NAME "decrypt_geom_adv"
    LANGUAGE C
    PARAMETERS (p_blob OCILOBLOCATOR, p_cli_key STRING, RETURN OCIOBJECT);

安全性矩陣

四、 現代替代方案:TDE + Data Redaction

Oracle 12c+ 推薦原生方案:

  • TDE 列加密:ALTER TABLE spatial_tbl MODIFY (geom_blob ENCRYPT USING 'AES256') — 存儲層透明加密,無需代碼
  • Data Redaction:DBMS_REDACT.ADD_POLICY(..., function_type => DBMS_REDACT.FULL, expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''GIS_ADMIN''') — 查詢時動態遮罩
  • 優勢:無開發成本、合規認證、與備份/Data Guard/GoldenGate 無縫集成

五、 選型建議

  • 一般 GIS 業務:TDE 列加密 足夠
  • 軍事/測繪/核心資產坐標:方案二硬件綁定 實現「數據不出域」
  • 舊版本 (11g-) 必須自研:方案一 Java SP 為最低成本選擇

六、 總結

Oracle Spatial 加密利用對象類型返回值 + 外部過程 獨特架構。簡單加密適合快速交付,高級加密通過硬件指紋綁定 實現物理級隔離。現代項目優先評估 TDE + Data Redaction 原生組合,僅在極高機密或舊版本環境下自研。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
威脅方案一方案二
備份盜竊離線破解可嘗試暴力破解 K_app無硬件指紋無法構造 K_session
DBA 惡意查詢可獲取 SQL 綁定變量中的密鑰無法在數據庫層面構造 K_srv
客戶端內存掃描獲取 K_app 即解密所有需同時竊取服務器硬件指紋
數據文件遷移他機可直接掛載查詢硬件不匹配,解密失敗