国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle中,現(xiàn)在保護(hù)每一行的安全介紹

2024-08-29 13:38:19
字體:
供稿:網(wǎng)友

  Oracle Label Security(Oracle標(biāo)簽安全性)按行來控制用戶的訪問。
  
  絕大多數(shù)商業(yè)應(yīng)用程序都必須處理安全性問題。應(yīng)用程序經(jīng)常需要限制對專用記錄的訪問、建立審計(jì)跟蹤,或者執(zhí)行一個(gè)工作流過程,所有這些都要符合公司的安全策略。構(gòu)建安全的軟件是一個(gè)富有挑戰(zhàn)性且復(fù)雜的工作,在整個(gè)機(jī)構(gòu)內(nèi)治理軟件的安全策略可能會更困難。
  
  作為模式(schema)設(shè)計(jì)人員,你可能會在表中添加安全性列并根據(jù)這些表創(chuàng)建用戶特定的視圖。作為DBA,你可能會創(chuàng)建角色和權(quán)限來保護(hù)數(shù)據(jù)庫對象。而作為開發(fā)人員,你可能會編寫PL/SQL包,將安全事務(wù)處理封裝在應(yīng)用程序內(nèi)。所有這些技術(shù)都很有效,但這些方法也都具有一定的缺點(diǎn)。例如,某人可能會無意中將專用數(shù)據(jù)導(dǎo)出至一個(gè)個(gè)人模式、原有的應(yīng)用程序可能與安全對象不兼容,或者用戶可能會利用SQL*Plus繞過整個(gè)應(yīng)用程序的安全性檢查。
  
  Oracle9i數(shù)據(jù)庫有一個(gè)可以幫助解決這些問題的組件:Oracle Label Security。Oracle Label Security最早引入Oracle8i第三版(8.1.7),它是一個(gè)使你能夠建立并實(shí)施企業(yè)安全性策略的簡捷工具。
  
  Oracle Label Security是內(nèi)置于數(shù)據(jù)庫引擎中的過程與約束條件集,該數(shù)據(jù)引擎實(shí)施對在單個(gè)表或整個(gè)模式上的"行"級訪問控制。要利用Oracle Label Security,需要?jiǎng)?chuàng)建一個(gè)或多個(gè)安全策略,其中每一個(gè)安全策略都包含一組標(biāo)簽。你可以用這些標(biāo)簽來標(biāo)明哪些用戶能夠訪問什么類型數(shù)據(jù)。在創(chuàng)建了一個(gè)策略之后,將該策略應(yīng)用于需要保護(hù)的表,并將這些標(biāo)簽授予你的用戶,這樣,你就完成了整個(gè)過程。Oracle Label Security對查詢的修改是透明的,并且在即時(shí)計(jì)算訪問級別,以執(zhí)行你的新策略。
  
  當(dāng)Oracle9i數(shù)據(jù)庫在解析各個(gè)SQL語句時(shí),它也檢測各個(gè)表是否受到某個(gè)安全策略的保護(hù)。根據(jù)該用戶的訪問權(quán)限,Oracle9i數(shù)據(jù)庫向該語句的WHERE子句中添加安全性謂詞。因?yàn)檫@些都發(fā)生在數(shù)據(jù)庫引擎的內(nèi)部,所以不管該SQL語句的來源如何,用戶都不可能繞過該安全性機(jī)制。
  
  它是如何工作的?
  這里有一個(gè)非常簡單的例子,可以說明Oracle Label Security是如何工作的。我們創(chuàng)建了名為documents的表,并向其中填入了4個(gè)記錄,同時(shí)定義了兩個(gè)安全級別:PUBLLIC(公共)與INTERNAL(內(nèi)部)。每個(gè)級別各有一個(gè)數(shù)字值:1000或2000。接著可以為表的每一行指定一個(gè)級別。下面給出對該表進(jìn)行的一個(gè)簡單SELECT:
  
  SQL> SELECT * FROM documents;
  
  DOCID  DOCNAME     LEVEL   DOC_LABEL
  -----  -----------   --------  ---------
  1    SHARE_WARE    PUBLIC   1000
  2    WEST_PAYROLL   INTERNAL  2000
  3    EAST_SALES    INTERNAL  2000
  4    COMP_PAYROLL   INTERNAL  2000
  
  現(xiàn)在假定在我們的數(shù)據(jù)庫中有兩個(gè)用戶:EMP與MGR。我們?yōu)檫@些用戶指定如下訪問級別:
  
  EMP 被指定為 PUBLIC只讀。
  
  MGR 被指定為 PUBLIC與INTERNAL 讀/寫。
  當(dāng)這兩個(gè)用戶訪問該表時(shí),EMP只能讀取第1行,而MGR可以對所有4行進(jìn)行讀/寫操作。
  
  當(dāng)這兩個(gè)用戶訪問此 documents表時(shí),其內(nèi)部會發(fā)生什么呢?假定EMP用戶運(yùn)行下面的查詢:
  
  SELECT * FROM documents;
  
  Oracle9i數(shù)據(jù)庫對該查詢進(jìn)行解析,并判定該表是受標(biāo)簽安全性的保護(hù)。Oracle Label Security向該查詢中添加一個(gè) WHERE 子句,以確保該EMP只能看到標(biāo)記有 PUBLIC 訪問的行:
  
  SELECT * FROM documents
  WHERE doc_label = 1000;
  
  下面是該 EMP 用戶在運(yùn)行此查詢后所看到的內(nèi)容:
  
  DOCID   DOCNAME     LEVEL   DOC_LABEL
  -----   ----------   ------   ---------
  1     SHARE_WARE   PUBLIC   1000
  
  你可能想知道:"為什么不根據(jù)某一列值,創(chuàng)建一個(gè)限制訪問的視圖呢?"事實(shí)上,假如你的應(yīng)用程序只需要幾個(gè)級別,并沒有非凡的安全要求要考慮,那么向你的表中添加一個(gè)安全性列,然后再利用視圖就可以了。
  
  但假設(shè)你的系統(tǒng)要求發(fā)生了變化,你現(xiàn)在需要利用對改變數(shù)據(jù)集的定制的讀/寫許可跨多個(gè)機(jī)構(gòu)來治理數(shù)個(gè)級別的用
  戶。此外,這些機(jī)構(gòu)位于不同的國家,各自都有自己的法律和安全性限制。假如僅使用視圖,就很難滿足這些要求了。
  
  幸運(yùn)的是,Oracle Label Security就是為了適應(yīng)擴(kuò)展而設(shè)計(jì)的,因此實(shí)施此類應(yīng)用程序安全性可能比你預(yù)計(jì)的更輕易。
  
  一個(gè)練習(xí)示例
  實(shí)施Oracle Label Security包括以下10個(gè)步驟:
  
  安裝Oracle Label Security(每個(gè)數(shù)據(jù)庫進(jìn)行一次)
  創(chuàng)建安全性策略
  定義級別
  定義區(qū)間(compartment)(可選)
  定義分組(可選)
  創(chuàng)建標(biāo)簽
  將標(biāo)簽策略應(yīng)用于表
  指定用戶標(biāo)簽
  指定正常授權(quán)級別的訪問
  為表中的行指定合適的標(biāo)簽
  在使用Oracle Label Security時(shí),可以利用Oracle EnterPRise Manager的Policy Manager圖形用戶界面(GUI)或者Oracle Label Security PL/SQL包。
在我們的示例實(shí)施中,我們將利用PL/SQL包。相同的概念可以應(yīng)用于上述兩種技術(shù)中的任一種。
  
  步驟1;安裝Oracle Label Security
  對于每一個(gè)數(shù)據(jù)庫只需要安裝一次Oracle Label Security。安裝過程包括4個(gè)步驟:
  
  啟動(dòng)Universal Installer。
  選擇并安裝該Oracle Label Security選項(xiàng)。
  以SYS身份按下面的方式運(yùn)行$ORACLE_HOME/rdbms/ admin/catols.sql:
  
  SQL> CONN sys/passWord AS SYSDBA;
  SQL> @?/rdbms/admin/catols
  
  注重:此catols.sql腳本在其最后一步對數(shù)據(jù)庫進(jìn)行SHUTDOWN IMMEDIATE (立即關(guān)閉)。
  
  重新啟動(dòng)實(shí)例并運(yùn)行
  SQL> SELECT username FROM dba_users;
  
  你將看到一個(gè)新的包括所有Oracle Label Security對象的 LBACSYS用戶。其缺省口令是LBACSYS (所以一定要更改該口令)。該用戶將治理你的安全策略。
  
  步驟2:創(chuàng)建一個(gè)安全性策略
  下一個(gè)任務(wù)是創(chuàng)建一個(gè)安全性策略。一個(gè)策略就是一個(gè)包括所有安全規(guī)則和訪問要求的存儲桶(bUCket)。行級別的數(shù)據(jù)標(biāo)簽和對這些行的模式訪問總是與一個(gè)策略相關(guān)聯(lián)。
  
  在本例中,你需要定義對公司文檔的行級別的訪問。在此步驟內(nèi),創(chuàng)建一個(gè)名為DOC_POLICY的策略。要?jiǎng)?chuàng)建一個(gè)策略,先以LBACSYS身份建立連接,然后利用 sa_sysdb.create_policy過程:
  
  SQL> CONN lbacsys/lbacsys
  SQL> EXEC sa_sysdba.create_policy
  ('DOC_POLICY','DOC_LABEL');
  
  第一個(gè)參數(shù)DOC_POLICY是該策略的名字,第二個(gè)參數(shù)DOC_LABEL是一個(gè)列的名字,Oracle Label Security將把該列添加到你將在標(biāo)簽控制下替換的表內(nèi)。
  
  為了核實(shí)你的策略已經(jīng)創(chuàng)建,可按下面方式查詢DBA_SA_POLICIES :
  
  SQL> SELECT policy_name, status
  from DBA_SA_POLICIES;
  
  POLICY_NAME STATUS
  ----------- -------
  DOC_POLICY ENABLED
  
  要禁用、重新啟用或者刪除一個(gè)策略,可利用以下過程:
  
  SQL> EXEC sa_sysdba.disable_policy
  ('DOC_POLICY');
  SQL> EXEC sa_sysdba.enable_policy
  ('DOC_POLICY');
  SQL> EXEC sa_sysdba.drop_policy
  ('DOC_POLICY');
  
  步驟3:定義級別
  每個(gè)安全性策略都必須包含指定訪問表的不同等級的級別。在本例中,創(chuàng)建了兩個(gè)敏感度級別: PUBLIC與 INTERNAL。
  
  SQL> EXEC sa_components.create_level
  ('DOC_POLICY', 1000,
  'PUBLIC', 'Public Level');
  SQL> EXEC sa_components.create_level
  ('DOC_POLICY', 2000,
  'INTERNAL', 'Internal Level');
  
  每個(gè)級別都有一個(gè)策略名、一個(gè)數(shù)字ID、一個(gè)縮寫名與一個(gè)全名。該數(shù)字ID表示敏感度級別--編號越高,表明敏感度越高。在本例中,INTERNAL 比PUBLIC的敏感度要高。為了查看你所創(chuàng)建的級別,執(zhí)行下面過程:
  
  SQL> SELECT * FROM dba_sa_levels
  ORDER BY level_num;
  
  步驟4:定義區(qū)間(可選)
  區(qū)間使你能夠?qū)σ恍袛?shù)據(jù)的訪問精確限定在一個(gè)級別之內(nèi)。在本例中,你具有閱讀敏感度級別相同的文檔,但是某一區(qū)間只能看到該級別的子集。下面你要?jiǎng)?chuàng)建FINANCE 與 HUMAN_RESOURCE區(qū)間:
  
  SQL> EXEC sa_components.create_compartment
  ('DOC_POLICY', 200,
  'FIN', 'FINANCE');
  SQL> EXEC sa_components.create_compartment
  &nb
  sp; ('DOC_POLICY', 100,
  'HR', 'HUMAN_RESOURCE');
  
  區(qū)間有一個(gè)策略名、一個(gè)數(shù)字ID、一個(gè)縮寫名與一個(gè)全名。區(qū)間的數(shù)字ID并不指定其敏感度的級別。它僅用于在顯示訪問信息時(shí)對區(qū)間進(jìn)行排序。要了解關(guān)于區(qū)間的信息,可以查詢DBA_SA_COMPARTMENTS視圖。
  
  步驟5:定義分組(可選)
  和使用區(qū)間類似,使用分組是將訪問限制在一個(gè)級別內(nèi)的另一個(gè)可選用的方法。當(dāng)有多個(gè)層次的用戶時(shí)(如在一個(gè)公司的機(jī)構(gòu)設(shè)置圖中),組是非常有用的。
  
  在創(chuàng)建一個(gè)分組時(shí),必須定義一個(gè)層次(hierarchy)。在本例中,ALL_REGIONS是父,WEST_REGION和EAST_REGION是ALL_REGIONS的子。

  
  SQL> EXEC sa_components.create_group
  ('DOC_POLICY', 10,
  'ALL', 'ALL_REGIONS');
  SQL> EXEC sa_compon

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 磐安县| 峨眉山市| 三门县| 得荣县| 巴林左旗| 仪征市| 延寿县| 陇西县| 新营市| 福建省| 抚顺县| 儋州市| 宁陕县| 历史| 达尔| 宣威市| 二连浩特市| 获嘉县| 泰安市| 渭源县| 台江县| 长垣县| 札达县| 始兴县| 方山县| 大埔县| 江达县| 休宁县| 定结县| 顺义区| 缙云县| 大丰市| 莒南县| 响水县| 普兰店市| 屏东县| 石景山区| 安远县| 栾川县| 绥阳县| 洛阳市|