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

Oracle Label Security 訪問規則與特權豁免機制完整參考

     編輯:Oracle 資料庫基礎

OLS 訪問規則矩陣與特權豁免體系權威指南

本文系統整理 Oracle Label Security 的讀/寫訪問規則判定邏輯、八大細粒度特權豁免類型、授權語法與實戰場景,為安全審計與合規配置提供標準參考。

一、DB2LBACRULES 規則集判定矩陣(OLS 兼容模式)

OLS 內部兼容 DB2 LBAC 規則語義,分讀規則與寫規則:

讀訪問規則(READ RULES)

組件類型規則常量判定條件(用戶標籤 vs 對象標籤)口訣
ARRAY (LEVEL)DB2LBACREADARRAY用戶級別 ≥ 對象級別向下讀
SET (COMPARTMENT)DB2LBACREADSET用戶集合 ⊇ 對象集合全包含讀
TREE (GROUP)DB2LBACREADTREE用戶節點為對象節點或其祖先祖先讀後代

寫訪問規則(WRITE RULES)

組件類型規則常量判定條件口訣
ARRAY (LEVEL)DB2LBACWRITEARRAY用戶級別 = 對象級別同級寫
SET (COMPARTMENT)DB2LBACWRITESET同讀規則(用戶 ⊇ 對象)全包含寫
TREE (GROUP)DB2LBACWRITETREE同讀規則(祖先寫後代)祖先寫後代

核心原則:「同級寫,向下讀」(ARRAY),「全包含讀寫」(SET/TREE)。

二、特權豁免類型完整清單(8+1)

通過 `GRANT EXEMPTION ON RULE FOR TO ` 授予:

特權常量適用規則效果風險等級
DB2LBACREADARRAY讀-級別忽略級別向下讀限制高
DB2LBACREADSET讀-間室忽略間室包含關係檢查中
DB2LBACREADTREE讀-組忽略組織祖先關係檢查中
DB2LBACWRITEARRAY WRITEDOWN寫-級別向下允許寫入低於用戶級別的數據極高
DB2LBACWRITEARRAY WRITEUP寫-級別向上允許寫入高於用戶級別的數據極高
DB2LBACWRITESET寫-間室忽略間室包含關係檢查高
DB2LBACWRITETREE寫-組忽略組織祖先關係檢查高
ALL所有規則完全繞過該策略所有 MAC 檢查致命

三、Oracle 原生特權體系(SA_USER_ADMIN.SET_USER_PRIVS)

OLS 採用三大類別特權,粒度更粗但管理更簡單:

特權含義典型授予對象
FULL完全繞過策略所有檢查(等價 DB2 `ALL`)DBA、審計工具、ETL 批處理帳號
PROFILE_ACCESS忽略用戶標籤,使用會話標籤(`SA_SESSION.SET_LABEL` 設置)中間件連接池、應用代理用戶
COMPACCESS跨間室/組訪問(需配合組件定義)跨部門報表用戶、數據分析師

四、授權與回收語法

DB2 風格(細粒度)

-- 授予
GRANT EXEMPTION ON RULE DB2LBACREADSET FOR HR_SEC TO SCOTT;

-- 回收
REVOKE EXEMPTION ON RULE DB2LBACREADSET FOR HR_SEC FROM SCOTT;

Oracle 原生(粗粒度)

BEGIN
  SA_USER_ADMIN.SET_USER_PRIVS('HR_SEC', 'SCOTT', 'COMPACCESS');
  -- 或移除特權
  SA_USER_ADMIN.SET_USER_PRIVS('HR_SEC', 'SCOTT', NULL);
END;
/

五、實戰場景決策表

業務場景推薦特權理由
DBA 日常維護FULL需繞過所有檢查執行 DDl/統計收集
應用連接池用戶PROFILE_ACCESS會話級動態設置標籤,用戶無固定標籤
跨部門報表查詢COMPACCESS需讀取多個 GROUP/COMPARTMENT 數據
數據歸檔/遷移腳本WRITEDOWN + WRITEUP需寫入不同級別目標表
合規審計查詢READARRAY + READSET + READTREE僅讀,需看見所有級別數據

六、審計查詢腳本

-- 查看用戶細粒度豁免
SELECT * FROM DBA_SA_USER_PRIVS WHERE POLICY_NAME='HR_SEC';

-- 查看用戶原生特權
SELECT * FROM DBA_SA_USER_LEVELS WHERE POLICY_NAME='HR_SEC';

-- 檢查是否存在高風險 FULL/WRITEUP 授予
SELECT GRANTEE, PRIVILEGE FROM DBA_SA_USER_PRIVS 
WHERE POLICY_NAME='HR_SEC' AND PRIVILEGE IN ('FULL','WRITEUP','WRITEDOWN');

七、最佳實踐原則

  1. 最小權限:優先用 `COMPACCESS`/`PROFILE_ACCESS`,極少用 `FULL`/`WRITEUP`
  2. 分離職責:授予特權的角色(`SECADM`)與業務用戶分離
  3. 定期審計:每月執行上述審計腳本,異常授予立即回收
  4. 文檔記錄:每個豁免授予必須記錄業務理由、審批人、失效日期
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved