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