Oracle強制訪問控制就是B1級安全產品所必須實現的一個相關的基本安全的特性,我們都知道達夢的相關數據庫安全版的強制訪問以及控制功能,它在實現過程中研究並吸取了現有主流數據庫產品的部分安全實現機制,包括DB2的LBAC(Label Based Access Control)和Oracle的LABEL SECRURITY。
下面將從標記安全的六個方面對DB2、Oracle和DM的模型進行描述,這個六個方面分別是:安全元素、策略應用、訪問規則、訪問特權、系統沖突、系統權限。
1 DB2 LBAC
1.1安全元素
(1)安全標記組件
支持三種類型的組件:數組、集合和樹型。
a)創建數組組件
- CREATE SECURITY LABEL COMPONENT level ARRAY
[ ’Top Secret’, ’Secret’, ’Employee’, ’Public’ ]
b)創建集合組件
- CREATE SECURITY LABEL COMPONENT project
Set ={’A’, ’B’, ’C’, ’D’}
c)創建樹型組件
- CREATE SECURITY LABEL COMPONENT department
Tree={’G1’ ROOT, ’G2’ UNDER ’G1’, ’G2’ UNDER ’G1’}
其中每個元素的名稱不能超過32個字節,且同一組件內名稱不能重復;數組最多可以包含65535個元素,集合和樹型最多能包含64個元素。
(2)安全策略
創建一個安全策略:
- CREATE SECURITY POLICY DataAccess COMPONENTS level,department WITH DB2LABCRULES
定義一個策略要指定標記組件和訪問規則。每個策略最多只能包含16個標記組件。系統現在只支持一中Oracle強制訪問規則DB2LABCRULES,這個在訪問規則小節中詳細講述。
(3)安全標記
創建一個安全標記:
以下是引用片段:
- CREATE SECURITY LABEL DataAccess.ManagerLabel COMPONENT level ’secret’
- project ’A’, ’B’, ’C’
- department ’G1’;
安全標記可以應用到用戶、行和列上。在插入數據時,也可以指定直接指定安全標記串,規則為按策略中組件的順序,依次指定組件值,同一個組件的不同值用逗號隔開,不同組件之間用冒號隔開。
1.2策略應用
(1)用戶安全標記
授予安全標記給用戶時,同時可以指定訪問權限。
- GRANT SECURITY LABEL DataAccess.ManagerLabel TO USER JOE FOR READ Access;
有三類訪問權限:READ ACCESS、WRITE ACCESS和ALL Access。如果讀寫安全標記同時存在,必須滿足如下條件:數組類型組件的值,兩個安全標記中必須相同;集合類型組件的值,寫訪問權限安全標記必須包含於讀訪問權限安全標記中;樹類型組件的值,寫訪問權限安全標記必須和讀訪問權限安全標記相同或者其子孫節點。
其中一個用戶能被授予多個安全標記,但對於一個安全策略中的標記最多只能授予一個讀Oracle強制訪問權限安全標記和一個寫訪問權限安全標記。
(2)行級安全標記
使用安全標記在行級保護表。
以下是引用片段:
- CREATE TABLE T1 (
- A DB2SECURITYLABEL,
- B INTEGER,
- C CHAR(5))
- SECURITY POLICY DataAccess
DB2SECURITYLABEL是標記列的類型,實際內部處理為VARBINARY(128)。標記列隱含是NOT NULL WITH DEFAULT,默認值是用戶的寫安全標記。
(3)列級安全標記
使用安全標記在列級保護表。
以下是引用片段:
- CREATE TABLE T1 (
- A CHAR(8) SECURED WITH ManagerLabel,
- B INTEGER,
- C CHAR(5))
- SECURITY POLICY DataAccess
(4)表級安全標記
標記安全標記實際是利用列級安全標記實現。
以下是引用片段:
- CREATE TABLE T1 (
- A CHAR(8) SECURED WITH ManagerLabel,
- B INTEGER SECURED WITH ManagerLabel,
- C CHAR(5) SECURED WITH ManagerLabel)
- SECURITY POLICY DataAccess
在所有Oracle強制訪問的列上設置同一個安全標記,把一個表作為一個整體和一個安全標記關聯,這樣節約了行級安全標記比較的時間開銷和存儲的空間開銷。
注意:一個表上只能有一個安全策略,一個列上也只能使用表中安全策略的一個標記,一個表上也只能有一個行級標記列。