本文從安全元素、策略應用、訪問規則、訪問特權、系統衝突、系統權限六大維度,系統對比 Oracle Label Security (OLS)、DB2 LBAC、達夢數據庫的 MAC 實現差異,為安全架構選型提供決策參考。
| 組件類型 | 語法示例 | 最大元素數 | 特點 |
|---|---|---|---|
| ARRAY (陣列/層級) | `CREATE SECURITY LABEL COMPONENT level ARRAY ['Top Secret','Secret','Employee','Public']` | 65,535 | 嚴格層級順序,高機密>機密>內部>公開 |
| SET (集合/類別) | `CREATE SECURITY LABEL COMPONENT project SET {'A','B','C','D'}` | 64 | 無序集合,項目歸屬標識 |
| TREE (樹狀/組織) | `CREATE SECURITY LABEL COMPONENT department TREE {'G1' ROOT, 'G2' UNDER 'G1'}` | 64 | 層級組織結構,支援祖先/後代匹配 |
策略創建:`CREATE SECURITY POLICY DataAccess COMPONENTS level, department WITH DB2LBACRULES`(最多 16 組件)
| 組件 | 中文名 | 作用 | 限制 |
|---|---|---|---|
| LEVEL | 級別 | 數據敏感度分級 | 必須包含,0-9999 數值 |
| COMPARTMENT | 格/間室 | 業務領域/項目隔離 | 最多 1 萬,無層級關係 |
| GROUP | 組 | 組織架構授權 | 最多 1 萬,樹狀層級,支援父組 |
標籤語法:`LEVEL:COMPARTMENT1,...,COMPARTMENTn:GROUP1,...,GROUPn`(最大 4000 字符)
策略限制:每策略僅含 1 個 LEVEL、最多 1 個 COMPARTMENT、最多 1 個 GROUP
| 粒度 | DB2 LBAC | Oracle LLS |
|---|---|---|
| 用戶級 | `GRANT SECURITY LABEL ... TO USER JOE FOR READ ACCESS`(支援 READ/WRITE/ALL 分離) | `SA_USER_ADMIN.SET_USER_LABELS` 設置讀/寫/默認標籤 |
| 行級 | 隱含列 `DB2SECURITYLABEL` (VARBINARY(128)),默認值為用戶寫標籤 | 隱含列 `ORA_ROW_LABEL`,策略創建時指定 `DEFAULT_OPTIONS` 控制 |
| 列級 | `COL SECURED WITH ManagerLabel` | `SA_POLICY_ADMIN.APPLY_TABLE_POLICY` 指定 `LABEL_COLUMN` |
| 表級 | 所有列加相同 `SECURED WITH` 實現 | 同 DB2,通過列級統一標籤實現 |
讀規則 —「同級寫,向下讀」:
寫規則:
預設實現 Bell-LaPadula(讀向下、寫向上)與 Biba(讀向上、寫向下)組合,通過 `SA_POLICY_ADMIN` 配置:
DB2:`GRANT EXEMPTION ON RULE DB2LBACREADSET FOR DataAccess TO USER JOE`,支援 8 種細粒度豁免 + `ALL`
Oracle:`SA_USER_ADMIN.SET_USER_PRIVS(policy_name, user_name, 'FULL'|'PROFILE_ACCESS'|'COMPACCESS')`,三大特權:
| 衝突場景 | DB2 LBAC 處理 | Oracle LLS 處理 |
|---|---|---|
| 視圖訪問 | 直接對基表套用標籤保護 | 視圖可定義 `LABEL_DEFAULT` 選項,或繼承基表策略 |
| 參考完整性 | 內部掃描不應用 LBAC 讀規則;CASCADE 寫應用規則 | 外鍵檢查受 `CHECK_CONTROL` 影響,可配置豁免 |
| CHECK 約束 | 驗證時不應用讀規則 | 同 DB2,約束計算見真實數據 |
| 主鍵/唯一鍵 | 驗證時不應用 LBAC 規則 | 同 DB2,建議敏感列加列級標籤 |
| 索引覆蓋 | 索引含標籤列才允許優化 | 同原則,`INDEX_ONLY` 掃描需包含標籤列 |
DB2:`SECADM` (安全管理員) 單一權限控制所有標籤/策略/豁免操作,`SYSADM` 唯一可授予 `SECADM`,且 `SYSADM` 不自動擁有受保護表訪問權
Oracle:`LBAC_DBA` 角色 + `SA_SYSDBA` 包執行權限,分離策略管理 (`SA_POLICY_ADMIN`)、標籤管理 (`SA_LABEL_ADMIN`)、用戶管理 (`SA_USER_ADMIN`)