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

Oracle Label Security 核心組件架構:級別、間室、組三層標籤模型完整定義指南

     編輯:Oracle 資料庫基礎

OLS 三層標籤模型(Level/Compartment/Group)權威定義與 PL/SQL 創建全集

Oracle Label Security 採用「一個級別、多個間室、多個組」的三層標籤架構,本文提供每個組件的語義定義、數值範圍、層級關係、存儲過程參數完整說明,並附帶標準化創建腳本模板。

一、級別 — 敏感度分級核心

語義

  • 表示數據機密程度,數值越大 = 越敏感
  • 每個策略 必須且僅能有一個 級別組件
  • 數值範圍:0 ~ 9999(整數)
  • 雙重表示:短名稱(如 `TS`、`S`、`C`、`U`)+ 長名稱(`TOP SECRET` 等)

創建存儲過程

PROCEDURE CREATE_LEVEL (
  policy_name  IN VARCHAR2,  -- 策略名
  level_num    IN INTEGER,   -- 級別數值 (0-9999)
  short_name   IN VARCHAR2,  -- 短名稱 (如 'TS')
  long_name    IN VARCHAR2   -- 長名稱 (如 'TOP SECRET')
);

標準化級別定義範例

BEGIN
  SA_COMPONENTS.CREATE_LEVEL('HR_SEC', 9000, 'TS', 'TOP SECRET');
  SA_COMPONENTS.CREATE_LEVEL('HR_SEC', 7000, 'S',  'SECRET');
  SA_COMPONENTS.CREATE_LEVEL('HR_SEC', 5000, 'C',  'CONFIDENTIAL');
  SA_COMPONENTS.CREATE_LEVEL('HR_SEC', 1000, 'U',  'UNCLASSIFIED');
END;
/

二、間室 — 業務領域隔離維度

語義

  • 標識數據所屬項目/部門/業務域,無敏感度高低之分
  • 每個策略 最多一個 間室組件
  • 最大元素數:10,000
  • 同級別下,不同間室數據相互不可見(除非擁有 `COMPACCESS` 特權)

創建存儲過程

PROCEDURE CREATE_COMPARTMENT (
  policy_name  IN VARCHAR2,
  comp_num     IN INTEGER,   -- 間室數值
  short_name   IN VARCHAR2,  -- 短名稱
  long_name    IN VARCHAR2   -- 長名稱
);

標準化間室定義範例

BEGIN
  SA_COMPONENTS.CREATE_COMPARTMENT('HR_SEC', 100, 'FIN', 'FINANCE');
  SA_COMPONENTS.CREATE_COMPARTMENT('HR_SEC', 200, 'HR',  'HUMAN RESOURCES');
  SA_COMPONENTS.CREATE_COMPARTMENT('HR_SEC', 300, 'IT',  'INFORMATION TECHNOLOGY');
  SA_COMPONENTS.CREATE_COMPARTMENT('HR_SEC', 400, 'LGL', 'LEGAL');
END;
/

三、組 — 組織架構授權維度

語義

  • 標識擁有/訪問數據的組織單元,支援樹狀層級
  • 每個策略 最多一個 組組件
  • 最大元素數:10,000
  • 子組自動繼承父組訪問權(祖先可讀後代數據)

創建存儲過程

PROCEDURE CREATE_GROUP (
  policy_name   IN VARCHAR2,
  group_num     IN INTEGER,    -- 組數值
  short_name    IN VARCHAR2,   -- 短名稱
  long_name     IN VARCHAR2,   -- 長名稱
  parent_name   IN VARCHAR2 DEFAULT NULL  -- 父組短名稱
);

標準化組定義範例(樹狀)

BEGIN
  -- 頂層
  SA_COMPONENTS.CREATE_GROUP('HR_SEC', 1000, 'HQ', 'HEADQUARTERS', NULL);
  -- 一級分支
  SA_COMPONENTS.CREATE_GROUP('HR_SEC', 1100, 'APAC', 'ASIA PACIFIC', 'HQ');
  SA_COMPONENTS.CREATE_GROUP('HR_SEC', 1200, 'EMEA', 'EUROPE MIDDLE EAST AFRICA', 'HQ');
  SA_COMPONENTS.CREATE_GROUP('HR_SEC', 1300, 'AMER', 'AMERICAS', 'HQ');
  -- 二級分支
  SA_COMPONENTS.CREATE_GROUP('HR_SEC', 1110, 'CN',  'CHINA', 'APAC');
  SA_COMPONENTS.CREATE_GROUP('HR_SEC', 1120, 'JP',  'JAPAN', 'APAC');
  SA_COMPONENTS.CREATE_GROUP('HR_SEC', 1130, 'SG',  'SINGAPORE', 'APAC');
END;
/

四、策略 — 綁定組件的容器

約束

  • 必須包含 1 個 LEVEL 組件
  • 最多包含 1 個 COMPARTMENT 組件
  • 最多包含 1 個 GROUP 組件

創建存儲過程

PROCEDURE CREATE_POLICY (
  policy_name     IN VARCHAR2,           -- 策略名
  column_name     IN VARCHAR2 DEFAULT NULL, -- 標籤列名 (默認 ORA_ROW_LABEL)
  default_options IN VARCHAR2 DEFAULT NULL  -- 默認選項: READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL...
);

創建範例

BEGIN
  SA_SYSDBA.CREATE_POLICY(
    policy_name     => 'HR_SEC',
    column_name     => 'SEC_LABEL',
    default_options => 'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL,LABEL_DEFAULT'
  );
END;
/

五、標籤 — 實際授權憑證

字符串語法

LEVEL:COMPARTMENT1,COMPARTMENT2,...,COMPARTMENTn:GROUP1,GROUP2,...,GROUPn
  • 最大長度:4,000 字符
  • 不區分大小寫,存儲統一大寫
  • 合法字符:字母、數字、空格、下劃線

創建存儲過程

PROCEDURE CREATE_LABEL (
  policy_name  IN VARCHAR2,
  label_tag    IN INTEGER,    -- 數字標籤標識 (存儲在表中)
  label_value  IN VARCHAR2,   -- 字符串標籤值
  data_label   IN BOOLEAN DEFAULT TRUE  -- 是否為數據標籤 (可被行使用)
);

創建範例

BEGIN
  -- 數字標籤 1000 對應 'S:FIN,HR:APAC,CN'
  SA_LABEL_ADMIN.CREATE_LABEL('HR_SEC', 1000, 'S:FIN,HR:APAC,CN', TRUE);
  SA_LABEL_ADMIN.CREATE_LABEL('HR_SEC', 2000, 'C:FIN:APAC', TRUE);
  SA_LABEL_ADMIN.CREATE_LABEL('HR_SEC', 3000, 'TS:LGL:HQ', TRUE);
END;
/

六、標籤數值與字符串雙重表示

表示形式用途轉換函數
數字標籤 (LABEL_TAG)存儲在表的標籤列中,索引、比較高效`CHAR_TO_LABEL` / `LABEL_TO_CHAR`
字符串標籤 (LABEL_VALUE)人類可讀、API 參數、審計日誌同上

七、完整部署腳本模板

-- 1. 創建策略
BEGIN SA_SYSDBA.CREATE_POLICY('FIN_SEC', 'ROW_LABEL', 'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL'); END;
/
-- 2. 定義級別
BEGIN
  SA_COMPONENTS.CREATE_LEVEL('FIN_SEC', 9000, 'TS', 'TOP SECRET');
  SA_COMPONENTS.CREATE_LEVEL('FIN_SEC', 6000, 'S',  'SECRET');
  SA_COMPONENTS.CREATE_LEVEL('FIN_SEC', 3000, 'C',  'CONFIDENTIAL');
  SA_COMPONENTS.CREATE_LEVEL('FIN_SEC', 1000, 'P',  'PUBLIC');
END;
/
-- 3. 定義間室
BEGIN
  SA_COMPONENTS.CREATE_COMPARTMENT('FIN_SEC', 10, 'TRD', 'TRADING');
  SA_COMPONENTS.CREATE_COMPARTMENT('FIN_SEC', 20, 'RSK', 'RISK');
  SA_COMPONENTS.CREATE_COMPARTMENT('FIN_SEC', 30, 'CMP', 'COMPLIANCE');
END;
/
-- 4. 定義組 (扁平)
BEGIN
  SA_COMPONENTS.CREATE_GROUP('FIN_SEC', 100, 'HQ', 'HEADQUARTERS');
  SA_COMPONENTS.CREATE_GROUP('FIN_SEC', 200, 'BR1', 'BRANCH_1');
  SA_COMPONENTS.CREATE_GROUP('FIN_SEC', 300, 'BR2', 'BRANCH_2');
END;
/
-- 5. 創建常用標籤
BEGIN
  SA_LABEL_ADMIN.CREATE_LABEL('FIN_SEC', 1000, 'S:TRD:HQ');
  SA_LABEL_ADMIN.CREATE_LABEL('FIN_SEC', 2000, 'C:RSK:CMP:BR1');
  SA_LABEL_ADMIN.CREATE_LABEL('FIN_SEC', 3000, 'P::');  -- 僅級別
END;
/
-- 6. 應用至表
BEGIN
  SA_POLICY_ADMIN.APPLY_TABLE_POLICY('FIN_SEC', 'FIN', 'TRANSACTIONS', 'READ_CONTROL,WRITE_CONTROL');
END;
/

八、命名規範建議

  1. 級別短名:2-3 大寫字母(`TS`/`S`/`C`/`P`)
  2. 間室短名:3-4 大寫字母,業務縮寫(`FIN`/`HR`/`IT`)
  3. 組短名:層級前綴 + 代碼(`HQ`/`APAC_CN`/`EMEA_DE`)
  4. 標籤 TAG:預留間隙(1000, 2000...)便於插入新標籤
  5. 策略名:`_SEC` 後綴,業務域前綴(`HR_SEC`/`FIN_SEC`/`GOV_SEC`)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved