資料庫安全不僅是合規要求,更是業務連續性的基石。本文構建 Oracle 安全防護四層體系:透明加密 (TDE)、細粒度審計 (FGA)、數據遮罩/編輯 (Data Redaction)、權限最小化與審計,並提供配置實戰與驗證腳本。
-- 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
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;
| 維度 | 標準審計 (AUDIT) | 細粒度審計 (FGA) |
|---|---|---|
| 粒度 | 對象級 (表/視圖) | 列級 + 條件級 |
| 觸發 | 所有操作 | 滿足條件才記錄 |
| 上下文 | 有限 | 可捕獲 SQL 文本、綁定變量、客戶端信息 |
| 性能 | 全量開銷大 | 按需極低開銷 |
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;
| 類型 | 適用場景 | 示例 |
|---|---|---|
| FULL | 完全遮罩 | 身份證 → XXXXXXXXXXXXXXXXXX |
| PARTIAL | 部分保留 | 手機號 → 138****1234 |
| REGEXP | 正則替換 | 郵箱 → ****@domain.com |
| RANDOM | 隨機值 | 薪資 → 隨機數 (保持統計分佈) |
| NONE | 無遮罩 (測試用) | 原值 |
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 看到: 原值
DBA 角色,改用細粒度系統權限CREATE SESSION + 業務對象 SELECT/INSERT/UPDATE/DELETEPUBLIC 權限,清理 GRANT ... TO PUBLICSEC_CASE_SENSITIVE_LOGON = TRUE (11g+ 默認)PASSWORD_VERIFY_FUNCTION 強制複雜度-- 系統級審計 (必開)
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');
Oracle 提供企業級安全工具箱:TDE 守護靜態數據、FGA 記錄敏感訪問、Redaction 實時脫敏輸出、網絡加密保護傳輸中數據。將這些能力整合為「分級防護、應用透明、審計留存、定期輪換、實戰演練」的標準化體系,才能構建經得起攻擊與合規檢驗的資料庫安全防線。