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

Oracle 數據安全體系深度解析:認證、授權、審計、視圖與應用層安全架構設計

     編輯:Oracle 資料庫基礎

一、 核心安全三要素:CIA 在 Oracle 中的落地

屬性Oracle 實現機制關鍵對象/參數
機密性 認證授權 + 加密 (TDE/DBMS_CRYPTO/Network Encryption) + VPD/OLS 行列級訪問控制 Password Profile, Roles, Grants, VPD Policies, TDE Keystore
完整性 約束 (PK/FK/Check/Not Null) + 觸發器業務規則 + 審計追蹤 + 閃回技術 Constraints, Triggers, Unified Auditing, Flashback Archive
可用性 備份恢復 (RMAN/Data Guard) + RAC/ASM 高可用 + 資源管理器限制失控查詢 RMAN, Data Guard, RAC, Resource Manager, Profile Limits

二、 五層防禦體系架構

第 1 層:網絡與認證邊界

  • SQL*Net 加密/完整性: `sqlnet.ora` 配置 `SQLNET.ENCRYPTION_SERVER=REQUIRED`, `SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED`,強制 TLS/SSL (TCPS) 或 Native Network Encryption。
  • 強認證: 整合 Kerberos、PKI (SSL 證書)、RADIUS、OID/Entra ID 聯邦認證,超越密碼單因子。
  • 連接池代理認證: 中間層用戶 `APP_USER` 代理最終用戶 `REAL_USER`:`CONNECT app_user[real_user]/password`,審計保留真實身份,連接池復用不泄露密碼。

第 2 層:賬號與密碼策略


-- 安全 Profile 範例
CREATE PROFILE secure_profile LIMIT
  FAILED_LOGIN_ATTEMPTS 5          -- 5 次失敗鎖定
  PASSWORD_LOCK_TIME 1/24          -- 鎖定 1 小時
  PASSWORD_LIFE_TIME 90            -- 90 天過期
  PASSWORD_GRACE_TIME 7            -- 7 天寬限期
  PASSWORD_REUSE_TIME 365          -- 1 年內不可重用
  PASSWORD_REUSE_MAX 10            -- 歷史 10 次密碼不可重用
  PASSWORD_VERIFY_FUNCTION verify_complexity; -- 複雜度函數

-- 綁定至用戶
ALTER USER app_user PROFILE secure_profile;
-- 系統默認 Profile 修改
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1/24;

第 3 層:權限與角色模型 (最小權限原則)

層級對象典型授權原則
系統權限CREATE SESSION, CREATE TABLE, CREATE PROCEDURE...僅授予開發/運維角色,嚴禁授予 DBA/SYSOPER 給應用賬號最小集合
對象權限SELECT/INSERT/UPDATE/DELETE/EXECUTE ON schema.object通過角色聚合 (ROLE_APP_READ, ROLE_APP_WRITE),授予角色給用戶角色分層
行級安全 (VPD/FGAC)DBMS_RLS.ADD_POLICY多租戶隔離、數據歸屬過濾 (如 `WHERE tenant_id = SYS_CONTEXT('APP','TENANT')`)透明強制
列級敏感數據屏蔽Data Redaction (12c+) / Virtual Private Database信用卡/身份證號非授權用戶顯示掩碼 (XXXX-XXXX-XXXX-1234)按需暴露

第 4 層:審計與合規 (Unified Auditing 12c+)


-- 創建審計策略
CREATE AUDIT POLICY app_dml_audit
  ACTIONS INSERT, UPDATE, DELETE ON app_schema.core_table;
AUDIT POLICY app_dml_audit BY app_user;

-- 審計所有 DDL
CREATE AUDIT POLICY ddl_audit ACTIONS CREATE, ALTER, DROP;
AUDIT POLICY ddl_audit BY SYS, SYSTEM, DBA_ROLE;

-- 審計失敗登錄/權限提升嘗試
CREATE AUDIT POLICY security_events 
  ACTIONS LOGON, LOGOFF, GRANT, REVOKE, ALTER USER;
AUDIT POLICY security_events BY ACCESS; -- BY ACCESS 記錄每次嘗試

-- 查詢審計記錄
SELECT event_timestamp, dbusername, action_name, object_schema, object_name, sql_text, return_code
FROM unified_audit_trail
WHERE event_timestamp > SYSDATE - 1
ORDER BY event_timestamp DESC;

第 5 層:應用架構安全模式

反模式:共享應用賬號 + 硬編碼密碼

  • 應用用單一 DB 賬號 (`APP_USER`) 連接池,真實用戶身份隱藏在應用層。
  • 風險:開發人員知曉密碼 → 可繞過應用邏輯直連 DB → 權限過大 (通常授予 DML+DDL) → 無審計追蹤真實操作者。

正向模式:代理認證 + 角色激活 + VPD


-- 1. 數據庫創建真實用戶 (僅 CREATE SESSION)
CREATE USER real_user IDENTIFIED BY complex_password;
GRANT CREATE SESSION TO real_user;

-- 2. 應用代理用戶 (連接池使用)
CREATE USER app_proxy IDENTIFIED BY proxy_password;
GRANT CREATE SESSION TO app_proxy;
-- 授權代理權限
ALTER USER real_user GRANT CONNECT THROUGH app_proxy;

-- 3. 應用連接池配置 (JDBC/UCP)
-- URL: jdbc:oracle:thin:@//db:1521/pdb?proxyUser=real_user
-- 或代碼中:
Properties props = new Properties();
props.setProperty(OracleConnection.PROXY_USER_NAME, "real_user");
props.setProperty(OracleConnection.PROXY_USER_PASSWORD, "real_pwd");
Connection conn = DriverManager.getConnection(url, props); // 實際會話為 real_user

-- 4. 角色由應用動態激活 (密碼保護角色)
CREATE ROLE app_rw IDENTIFIED BY role_password;
GRANT SELECT, INSERT, UPDATE ON app_schema.core_table TO app_rw;
-- 應用登錄後執行: SET ROLE app_rw IDENTIFIED BY role_password;
-- 未激活角色時,real_user 僅有 CREATE SESSION,無任何對象權限

優勢:

  • 真實用戶密碼不在應用配置文件中 (僅代理密碼)。
  • 開發人員不知真實用戶密碼,無法直連繞過應用。
  • 審計記錄真實 `DBUSERNAME = REAL_USER`,不可抵賴。
  • 角色密碼保護防止未授權激活。
  • VPD 策略基於 `SYS_CONTEXT('USERENV','PROXY_USER')` 或 `CLIENT_IDENTIFIER` 自動過濾數據。

三、 總結:安全清單

  1. [ ] 網絡加密 (TCPS/Native Encryption) 強制啟用
  2. [ ] 密碼 Profile 強複雜度 + 鎖定/過期策略
  3. [ ] 系統權限最小化,對象權限走角色
  4. [ ] 核心表啟用 VPD 行級安全 + Data Redaction 列掩碼
  5. [ ] 統一審計覆蓋 DML/DDL/安全事件,日志異地存儲
  6. [ ] 應用採用代理認證 + 密碼保護角色 + VPD 上下文傳遞
  7. [ ] 定期 DBSAT 掃描 + CIS Benchmark 對標 + 授權滲透測試
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved