Oracle標(biāo)簽安全性_第1頁(yè)
Oracle標(biāo)簽安全性_第2頁(yè)
Oracle標(biāo)簽安全性_第3頁(yè)
Oracle標(biāo)簽安全性_第4頁(yè)
Oracle標(biāo)簽安全性_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Oracle標(biāo)簽安全性O(shè)racle標(biāo)簽安全性11、概述12、工作流程23、測(cè)試步驟23.1、安裝Oracle Label Security33.2、創(chuàng)建安全策略53.3、定義Level63.4、定義Compartment63.5、定義Group63.6、創(chuàng)建Label73.7、將策略賦予表73.8、將Label賦予用戶(hù)83.9、新增LEVEL11結(jié)論111、概述在Oracle9i中有一個(gè)組件稱(chēng)為Oracle Label Security,這個(gè)組件實(shí)現(xiàn)了基于自定義策略而對(duì)數(shù)據(jù)庫(kù)中的表甚或是整個(gè)Schema提供行級(jí)安全性功能。實(shí)際上Oracle Label Security是在Oracle8.1.

2、7中提出的,在9i版本中功能得到了大幅度增強(qiáng)。Oracle Label Security是內(nèi)置于數(shù)據(jù)庫(kù)引擎中的過(guò)程與約束條件集,該數(shù)據(jù)引擎實(shí)施對(duì)在單個(gè)表或整個(gè)模式上的"行"級(jí)訪(fǎng)問(wèn)控制。要利用Oracle Label Security,需要?jiǎng)?chuàng)建一個(gè)或多個(gè)安全策略,其中每一個(gè)安全策略都包含一組標(biāo)簽。你可以用這些標(biāo)簽來(lái)標(biāo)明哪些用戶(hù)能夠訪(fǎng)問(wèn)什么類(lèi)型數(shù)據(jù)。在創(chuàng)建了一個(gè) 策略之后,將該策略應(yīng)用于需要保護(hù)的表,并將這些標(biāo)簽授予你的用戶(hù),這樣,你就完成了整個(gè)過(guò)程。Oracle Label Security對(duì)查詢(xún)的修改是透明的,并且在即時(shí)計(jì)算訪(fǎng)問(wèn)級(jí)別,以執(zhí)行你的新策略。當(dāng)Oracle9i數(shù)據(jù)

3、庫(kù)在解析各個(gè)SQL語(yǔ)句時(shí),它也檢測(cè)各個(gè)表是否受到某個(gè)安全策略的保護(hù)。根據(jù)該用戶(hù)的訪(fǎng)問(wèn)權(quán)限,Oracle9i數(shù)據(jù)庫(kù) 向該語(yǔ)句的WHERE子句中添加安全性謂詞。因?yàn)檫@些都發(fā)生在數(shù)據(jù)庫(kù)引擎的內(nèi)部,所以不管該SQL語(yǔ)句的來(lái)源如何,用戶(hù)都不可能繞過(guò)該安全性機(jī)制。2、工作流程首先我們了解一下實(shí)現(xiàn)Oracle Label Security的大體流程。通過(guò)Oracle提供的一系列存儲(chǔ)過(guò)程,先創(chuàng)建一個(gè)policy,然后在policy中創(chuàng)建level,compartment,group,之后通過(guò)這些定義好的level,compartment,group再定義label,然后將policy綁定到某張表或者某個(gè)sch

4、ema,最后再給相應(yīng)的用戶(hù)設(shè)置label。其中牽涉到幾個(gè)名詞,解釋一下: Policy:就是安全策略,一個(gè)安全策略是level,compartment,group,label的集合。Level:等級(jí),這是最基礎(chǔ)的安全控制等級(jí),必須設(shè)置。Compartment:分隔(這不是官方翻譯),提供第二級(jí)的安全控制,是可選的。Group:組(這不是官方翻譯),提供第三級(jí)的安全控制,是可選的。Label:標(biāo)簽,最終體現(xiàn)到每一行上的安全標(biāo)簽,必須設(shè)置。只有用戶(hù)被賦予的標(biāo)簽和此行上的標(biāo)簽相同或者等級(jí)更高的時(shí)候,該行才能夠被用戶(hù)存取。3、測(cè)試步驟我們需要用到3個(gè)用戶(hù),一個(gè)是擁有zftang_test_01表的te

5、st用戶(hù),一個(gè)是用于設(shè)置OLS策略的LBACSYS用戶(hù),另外一個(gè)是不受OLS策略制約的SYS用戶(hù)(用來(lái)方便的插入和更新測(cè)試數(shù)據(jù))。u 安裝Oracle Label Security(每個(gè)數(shù)據(jù)庫(kù)進(jìn)行一次)u 創(chuàng)建安全性策略 u 定義級(jí)別u 定義區(qū)間(compartment)(可選)u 定義分組(可選)u 創(chuàng)建標(biāo)簽u 將標(biāo)簽策略應(yīng)用于表u 指定用戶(hù)標(biāo)簽u 指定正常授權(quán)級(jí)別的訪(fǎng)問(wèn)u 為表中的行指定合適的標(biāo)簽3.1、安裝Oracle Label Security在安裝數(shù)據(jù)庫(kù)軟件的時(shí)候必須保證選擇了Oracle Label Security組件,否則所有功能都無(wú)法使用。如果當(dāng)時(shí)沒(méi)有選擇,可以按照如下方法

6、安裝OLC1、重新運(yùn)行Universal Installer進(jìn)行安裝,選擇定制,下一步; 2、勾選ORACLE LABEL SECRITY組建進(jìn)行安裝; 3、繼續(xù)下一步,完成安裝;LBACSYS用戶(hù)可以利用$ORACLE_HOME/rdbms/admin/catols.sql創(chuàng)建。以SYS用戶(hù)登陸PLSQL,打開(kāi)命令行窗口,執(zhí)行:D:OraHome_1RDBMSADMINcatols.sql; 在這個(gè)腳本的最后會(huì)自動(dòng)關(guān)閉數(shù)據(jù)庫(kù),打開(kāi)可以看到,最后面是(shutdown immediate)所以請(qǐng)不要在生產(chǎn)庫(kù)上直接測(cè)試。再次打開(kāi)數(shù)據(jù)庫(kù),就可以使用LBACSYS用戶(hù)登錄了,默認(rèn)密碼就是lbacsy

7、s,如果在生產(chǎn)環(huán)境中,請(qǐng)立刻修改默認(rèn)密碼。3.2、創(chuàng)建安全策略使用lbacsys用戶(hù)登陸PLSQL,執(zhí)行如下命令SQL> EXEC sa_sysdba.create_policy('TEST_POLICY', 'TEST_LABEL');第一個(gè)參數(shù)TEST_POLICY是安全策略的名稱(chēng),第二個(gè)參數(shù)TEST_LABEL是即將添加到zftang_test_01表中的用于存儲(chǔ)標(biāo)簽的字段名,這個(gè)字段將在后面apply table policy的時(shí)候自動(dòng)添加,所以不必預(yù)先添加??梢詮腄BA_SA_POLICIES視圖中查詢(xún)安全策略的情況。select * from

8、DBA_SA_POLICIES要禁用、重新啟用或者刪除一個(gè)策略,可利用以下過(guò)程:SQL> EXEC sa_sysdba.disable_policy('TEST_POLICY');SQL> EXEC sa_sysdba.enable_policy('TEST_POLICY');SQL> EXEC sa_sysdba.drop_policy('TEST_POLICY');3.3、定義LevelEXEC sa_components.create_level('TEST_POLICY', 111,'READ11

9、1', 'Public Level'); EXEC sa_components.create_level('TEST_POLICY', 222,'READ222', 'Internal Level');第一個(gè)參數(shù)是上一步創(chuàng)建的安全策略的名字。第二個(gè)參數(shù)是Level的等級(jí),數(shù)字越大表示權(quán)限越高,比如此處具有'READ222'等級(jí)的就可以同時(shí)查看有'READ111'等級(jí)的數(shù)據(jù)。第三個(gè)參數(shù)是Level的短名,隨便定義。第四個(gè)參數(shù)是Level的長(zhǎng)名,只是起到一個(gè)說(shuō)明的作用,隨便定義??梢詮腄BA_S

10、A_LEVELS視圖中查詢(xún)安全等級(jí)的情況。select * from DBA_SA_LEVELS3.4、定義Compartment本步操作是可選項(xiàng),看的有點(diǎn)暈, 測(cè)試了幾次沒(méi)搞透3.5、定義Group本步操作是可選項(xiàng),看的有點(diǎn)暈, 測(cè)試了幾次沒(méi)搞透3.6、創(chuàng)建LabelEXEC sa_label_admin.create_label('TEST_POLICY', '111','READ111', TRUE);EXEC sa_label_admin.create_label('TEST_POLICY', '222',

11、'READ222', TRUE);參數(shù)依次是安全策略名,Label Tag,Label值,是否為data label。其中Label Tag必須是不同于系統(tǒng)中任何策略number的數(shù)字。Label值是最關(guān)鍵的地方,通過(guò)組合前面幾步中定義的level 是否為data label是一個(gè)布爾值,只有為T(mén)RUE的時(shí)候,這個(gè)標(biāo)簽才可以用于控制表數(shù)據(jù)的安全性。可以從DBA_SA_LABELS視圖中查詢(xún)安全標(biāo)簽的情況。select * from DBA_SA_LABELS3.7、將策略賦予表exec sa_policy_admin.apply_table_policy(policy_name

12、 => 'TEST_POLICY',schema_name => 'TEST',table_name => 'ZFTANG_TEST_01',table_options => 'LABEL_DEFAULT,READ_CONTROL,WRITE_CONTROL');前三個(gè)參數(shù)表示我們將TEST_POLICY策略附加到TEST用戶(hù)的ZFTANG_TEST_01表上,執(zhí)行這步操作的時(shí)候,Oracle會(huì)自動(dòng)將第二步中定義的列添加到表中,如果這步執(zhí)行成功,我們立刻用TEST用戶(hù)檢索ZFTANG_TEST_01表,會(huì)發(fā)

13、現(xiàn)一條記錄都沒(méi)有了,這說(shuō)明Label Security已經(jīng)起作用了。第四個(gè)參數(shù)用于設(shè)定策略如何控制表的安全性。LABEL_DEFAULT表示如果以后一個(gè)用戶(hù)新增數(shù)據(jù)的時(shí)候沒(méi)有指定Label那么將會(huì)使用該用戶(hù)的default session label(這個(gè)default值在下面一步的用戶(hù)Label設(shè)定中定義);READ_CONTROL,WRITE_CONTROL表示對(duì)于表的讀寫(xiě)操作都受到安全策略的制約;HIDE表示不在desc表結(jié)構(gòu)的時(shí)候顯示TEST_LABEL列名,如果想要顯示就省略HIDE字樣,注意,一旦apply策略完成,那么要修改table_options的值,比如想把HIDE去掉,那

14、么就必須先用sa_policy_admin.remove_table_policy函數(shù)刪除policy定義,然后重新apply。3.8、將Label賦予用戶(hù)使用sa_user_admin.set_user_labels存儲(chǔ)過(guò)程來(lái)將label賦予用戶(hù),這個(gè)存儲(chǔ)過(guò)程有不少參數(shù),但是必須輸入的只有policy_name,user_name,max_read_label三項(xiàng),其它參數(shù)如果省略的話(huà),都有默認(rèn)值。比如def_label參數(shù)(用戶(hù)新增數(shù)據(jù)的時(shí)候沒(méi)有指定Label時(shí)的默認(rèn)Label)如果沒(méi)有設(shè)定,那么默認(rèn)為跟max_read_label相同。我們通過(guò)給TEST用戶(hù)賦予不同的Label,來(lái)完成測(cè)

15、試的目的。每次用LBACSYS用戶(hù)設(shè)置完TEST用戶(hù)的label,TEST用戶(hù)都必須重新登錄一次,設(shè)置才會(huì)生效。-這里很重要,前期測(cè)試,沒(méi)有重新登陸,總感覺(jué)沒(méi)效果;把LABEL=READ111的授于TEST用戶(hù)EXEC sa_user_admin.set_user_labels(policy_name=> 'TEST_POLICY',user_name =>'TEST',max_read_label =>'READ111');這個(gè)時(shí)候看查詢(xún)結(jié)果,TEST_LABEL=111的,這個(gè)用戶(hù)才能查詢(xún)到;其實(shí)表里真實(shí)的數(shù)據(jù)是:把LABE

16、L=READ222的授于TEST用戶(hù)EXEC sa_user_admin.set_user_labels(policy_name=> 'TEST_POLICY',user_name =>'TEST',max_read_label =>'READ222');執(zhí)行查詢(xún):發(fā)現(xiàn)還是這三條數(shù)據(jù),因?yàn)槠渌鼣?shù)據(jù)TEST_LABEL列未定義值;通過(guò)SYS用戶(hù),對(duì)數(shù)據(jù)進(jìn)行賦值;這個(gè)時(shí)候,就可以看到所有的數(shù)據(jù)了;因?yàn)榍懊嫣岬剑篍XEC sa_components.create_level('TEST_POLICY', 111,

17、9;READ111', 'Public Level'); EXEC sa_components.create_level('TEST_POLICY', 222,'READ222', 'Internal Level');第一個(gè)參數(shù)是上一步創(chuàng)建的安全策略的名字。第二個(gè)參數(shù)是Level的等級(jí),數(shù)字越大表示權(quán)限越高,比如此處具有'READ222'等級(jí)的就可以同時(shí)查看有'READ111'等級(jí)的數(shù)據(jù)。第三個(gè)參數(shù)是Level的短名,隨便定義。第四個(gè)參數(shù)是Level的長(zhǎng)名,只是起到一個(gè)說(shuō)明的作用,隨便定義。

18、3.9、新增LEVEL這里考慮到一點(diǎn),因?yàn)長(zhǎng)EVEL的數(shù)據(jù)越大,級(jí)別越高,加入我需要新增一個(gè)LEVEL,用來(lái)控制用戶(hù)的訪(fǎng)問(wèn),就可以按照如下操作:1、 定義LEVELEXEC sa_components.create_level('zftang_POLICY', 333,'PUBLIC', 'Public Level1');-創(chuàng)建一個(gè)LEVEL 2、 定義LABELEXEC sa_label_admin.create_label('TEST_POLICY', '333','READ333', TRUE);3 、 將LABEL賦予用戶(hù)在這里,如果賦予TEST用戶(hù)READ111的LEVEL,那么這個(gè)用戶(hù)只能看到值=111的數(shù)據(jù); 如果賦予TEST用戶(hù)READ222的LEVEL,可以看到值=111,或者=222的數(shù)據(jù) 如果賦予TEST用戶(hù)READ333的LEVEL,就可以看到=111,222,333的數(shù)據(jù); EX

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論