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

Oracle 資料庫安全防護體系:透明加密、審計、數據遮罩與最佳實踐

     編輯:Oracle 資料庫基礎

前言

資料庫安全不僅是合規要求,更是業務連續性的基石。本文構建 Oracle 安全防護四層體系:透明加密 (TDE)、細粒度審計 (FGA)、數據遮罩/編輯 (Data Redaction)、權限最小化與審計,並提供配置實戰與驗證腳本。

一、透明數據加密 (TDE):靜態數據保護

1. 核心特性

  • 表空間級/列級加密,應用零代碼修改
  • 主鑰儲於外部密碼模塊 (HSM) 或軟件錢包
  • 支持 AES/3DES,導出導入自動解密/加密
  • 12c+ 支持表空間級預設加密,新表自動加密

2. 配置步驟 (12c+ 統一錢包)

-- 1. 設置錢包目錄 (sqlnet.ora)
ENCRYPTION_WALLET_LOCATION =
  (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallet)))

-- 2. 創建/打開軟件錢包
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/wallet' IDENTIFIED BY "WalletPwd#123";
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "WalletPwd#123";

-- 3. 設置/輪換主鑰
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "WalletPwd#123" WITH BACKUP;

-- 4. 創建加密表空間 (預設加密)
CREATE TABLESPACE secure_data
DATAFILE '/u01/app/oracle/oradata/ORCL/secure_data01.dbf' SIZE 1G
ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);

-- 5. 驗證
SELECT tablespace_name, encrypted FROM dba_tablespaces WHERE tablespace_name = 'SECURE_DATA';
-- 結果: ENCRYPTED = YES

3. 列級加密 (舊版本/精細控制)

CREATE TABLE sensitive_data (
    id          NUMBER PRIMARY KEY,
    id_card     VARCHAR2(18) ENCRYPT USING 'AES256' NO SALT,
    bank_card   VARCHAR2(19) ENCRYPT USING 'AES256' SALT,
    salary      NUMBER(10,2) ENCRYPT
) TABLESPACE users;

二、細粒度審計 (FGA):精準記錄敏感訪問

1. 對比傳統審計

維度標準審計 (AUDIT)細粒度審計 (FGA)
粒度對象級 (表/視圖)列級 + 條件級
觸發所有操作滿足條件才記錄
上下文有限可捕獲 SQL 文本、綁定變量、客戶端信息
性能全量開銷大按需極低開銷

2. 創建審計策略

BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema      => 'HR',
    object_name        => 'EMPLOYEES',
    policy_name        => 'AUDIT_SENSITIVE_SALARY',
    audit_condition    => 'SALARY > 10000',  -- 僅高薪查詢觸發
    audit_column       => 'SALARY,COMMISSION_PCT',  -- 指定敏感列
    handler_schema     => 'SEC_ADMIN',
    handler_module     => 'EMAIL_ALERT_PKG.SEND_ALERT',  -- 可選處理程序
    enable             => TRUE,
    statement_types    => 'SELECT,UPDATE,DELETE'
  );
END;
/

-- 查看審計記錄
SELECT db_user, object_name, policy_name, sql_text, timestamp
FROM dba_fga_audit_trail
ORDER BY timestamp DESC;

三、數據遮罩/編輯 (Data Redaction):實時脫敏輸出

1. 遮罩類型

類型適用場景示例
FULL完全遮罩身份證 → XXXXXXXXXXXXXXXXXX
PARTIAL部分保留手機號 → 138****1234
REGEXP正則替換郵箱 → ****@domain.com
RANDOM隨機值薪資 → 隨機數 (保持統計分佈)
NONE無遮罩 (測試用)原值

2. 配置策略

BEGIN
  DBMS_REDACT.ADD_POLICY(
    object_schema       => 'HR',
    object_name         => 'EMPLOYEES',
    policy_name         => 'RED_PHONE_EMAIL',
    column_name         => 'PHONE_NUMBER',
    function_type       => DBMS_REDACT.PARTIAL,
    function_parameters => 'VVVFVVVVFVVV,VVV-VVVV-VVVV,*,1,10',  -- 格式: 前3後4中間*
    expression          => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''HR_ADMIN'''  -- 管理員豁免
  );
  
  DBMS_REDACT.ADD_POLICY(
    object_schema       => 'HR',
    object_name         => 'EMPLOYEES',
    policy_name         => 'RED_EMAIL',
    column_name         => 'EMAIL',
    function_type       => DBMS_REDACT.REGEXP,
    function_parameters => '(.*)@(.*)',  -- 正則分組
    regexp_replace_string => '****@\2',  -- 替換第一組
    expression          => '1=1'  -- 所有用戶生效
  );
END;
/

-- 驗證
SELECT phone_number, email FROM hr.employees WHERE employee_id = 100;
-- 普通用戶看到: 138****1234, ****@company.com
-- HR_ADMIN 看到: 原值

四、權限最小化與審計基線

1. 權限收斂清單

  • 回收 DBA 角色,改用細粒度系統權限
  • 應用賬號僅擁有:CREATE SESSION + 業務對象 SELECT/INSERT/UPDATE/DELETE
  • 禁用 PUBLIC 權限,清理 GRANT ... TO PUBLIC
  • 啟用 SEC_CASE_SENSITIVE_LOGON = TRUE (11g+ 默認)
  • 設置 PASSWORD_VERIFY_FUNCTION 強制複雜度

2. 核心審計策略基線

-- 系統級審計 (必開)
AUDIT CREATE SESSION BY ACCESS WHENEVER NOT SUCCESSFUL;  -- 登錄失敗
AUDIT ALTER USER, CREATE USER, DROP USER BY ACCESS;      -- 用戶管理
AUDIT GRANT ANY PRIVILEGE, GRANT ANY ROLE BY ACCESS;     -- 權限變更
AUDIT CREATE TABLE, DROP TABLE BY ACCESS;                -- 結構變更

-- 對象級審計 (核心表)
AUDIT SELECT, UPDATE, DELETE ON hr.employees BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SELECT, UPDATE, DELETE ON fin.accounts BY ACCESS WHENEVER SUCCESSFUL;

五、網絡傳輸加密

-- sqlnet.ora 服務端/客戶端
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA512, SHA384, SHA256)

-- 客戶端同樣設置 CLIENT 參數

六、安全配置驗證腳本

-- 1. TDE 狀態
SELECT * FROM V$ENCRYPTION_WALLET;
SELECT tablespace_name, encrypted FROM dba_tablespaces WHERE encrypted = 'YES';

-- 2. 審計策略
SELECT * FROM dba_audit_policies;
SELECT * FROM dba_fga_policies;

-- 3. 遮罩策略
SELECT * FROM redaction_policies;

-- 4. 網絡加密
SELECT network_service_banner FROM v$session_connect_info WHERE sid = SYS_CONTEXT('USERENV','SID');

-- 5. 密碼策略
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name LIKE 'PASSWORD%';

-- 6. 權限審計
SELECT grantee, privilege FROM dba_sys_privs WHERE privilege IN ('DBA','SYSDBA','SYSOPER','CREATE ANY PROCEDURE');

七、最佳實踐總結

  1. 分級保護:核心數據 TDE 加密 + FGA 審計 + Redaction 脫敏,三層疊加
  2. 應用透明:優先用 TDE/Redaction,避免應用改造
  3. 審計留存:審計日志導出歸檔 ≥ 1 年,防篡改存儲
  4. 定期輪換:TDE 主鑰年度輪換、密碼 90 天輪換、審計策略季度覆核
  5. 演練機制:半年度滲透測試、數據洩露應急演練

結語

Oracle 提供企業級安全工具箱:TDE 守護靜態數據、FGA 記錄敏感訪問、Redaction 實時脫敏輸出、網絡加密保護傳輸中數據。將這些能力整合為「分級防護、應用透明、審計留存、定期輪換、實戰演練」的標準化體系,才能構建經得起攻擊與合規檢驗的資料庫安全防線。

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