利用Label Security實現行級安全性 Step By Step
利用Label Security實現行級安全性 Step By Step[@more@]相關閱讀:
利用VPD細粒度訪問策略實現行級安全性 Step By Step
前言:
在Oracle9i中有一個元件稱為Oracle Label Security,這個元件實現了基於自定義策略而對資料庫中的表甚或是整個Schema提供行級安全性功能。實際上Oracle Label Security是在Oracle8.1.7中提出的,在9i版本中功能得到了大幅度增強。
本文透過一個簡單的例子對Oracle Label Security的功能作初步的探討,本文使用的環境是Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 for Windows 32 bit。
流程:
首先我們瞭解一下實現Oracle Label Security的大體流程。
透過Oracle提供的一系列儲存過程,先建立一個policy,然後在policy中建立level,compartment,group,之後透過這些定義好的level,compartment,group再定義label,然後將policy繫結到某張表或者某個schema,最後再給相應的使用者設定label。
其中牽涉到幾個名詞,解釋一下:
Policy:就是安全策略,一個安全策略是level,compartment,group,label的集合。
Level:等級,這是最基礎的安全控制等級,必須設定。
Compartment:分隔(這不是官方翻譯),提供第二級的安全控制,是可選的。
Group:組(這不是官方翻譯),提供第三級的安全控制,是可選的。
Label:標籤,最終體現到每一行上的安全標籤,必須設定。只有使用者被賦予的標籤和此行上的標籤相同或者等級更高的時候,該行才能夠被使用者存取。
方法:
然後再來了解一下Oracle實現Label Security的大體方法。
在設定完Label以後,透過SQL Trace,我們可以看到使用者發出的select語句執行計劃有了變化,即使是全表掃描,也會多出一個filter的操作。
select *
from
documents
Rows Row Source Operation
------- ---------------------------------------------------
5 FILTER (cr=7 pr=0 pw=0 time=184 us)
5 TABLE ACCESS FULL DOCUMENTS (cr=7 pr=0 pw=0 time=131 us)
透過檢視raw trace file可以看到Oracle在parse這個SQL的時候,自動新增了一個條件:
begin :con := LBAC_RLS.READ_FILTER(:sn, :on); end;
而這個條件的具體操作在trace file中也有儲存,此處就不多說了。總之,透過trace我們知道對於設定了label的表的select操作,Oracle自動新增了條件來保證使用者只能選擇到自己能夠看到的記錄。
那麼,對於DML(insert,update,delete)操作呢?其實,Oracle是自動在表上新增了觸發器,這一點我們可以在設定完label以後,透過dba_triggers檢視驗證,新增的是INSERT AFTER EACH ROW,UPDATE AFTER EACH ROW和DELETE BEFORE EACH ROW三個trigger,Oracle的很多功能在內部其實都是透過trigger完成,比如高階複製同樣如此,但是Oracle一直聲稱這些trigger是內部實現的,所以比使用者自定義的trigger效率要高。當然,內部trigger和自定義trigger在實現機制上是否真的不同,還有待驗證。
利用VPD細粒度訪問策略實現行級安全性 Step By Step
前言:
在Oracle9i中有一個元件稱為Oracle Label Security,這個元件實現了基於自定義策略而對資料庫中的表甚或是整個Schema提供行級安全性功能。實際上Oracle Label Security是在Oracle8.1.7中提出的,在9i版本中功能得到了大幅度增強。
本文透過一個簡單的例子對Oracle Label Security的功能作初步的探討,本文使用的環境是Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 for Windows 32 bit。
流程:
首先我們瞭解一下實現Oracle Label Security的大體流程。
透過Oracle提供的一系列儲存過程,先建立一個policy,然後在policy中建立level,compartment,group,之後透過這些定義好的level,compartment,group再定義label,然後將policy繫結到某張表或者某個schema,最後再給相應的使用者設定label。
其中牽涉到幾個名詞,解釋一下:
Policy:就是安全策略,一個安全策略是level,compartment,group,label的集合。
Level:等級,這是最基礎的安全控制等級,必須設定。
Compartment:分隔(這不是官方翻譯),提供第二級的安全控制,是可選的。
Group:組(這不是官方翻譯),提供第三級的安全控制,是可選的。
Label:標籤,最終體現到每一行上的安全標籤,必須設定。只有使用者被賦予的標籤和此行上的標籤相同或者等級更高的時候,該行才能夠被使用者存取。
方法:
然後再來了解一下Oracle實現Label Security的大體方法。
在設定完Label以後,透過SQL Trace,我們可以看到使用者發出的select語句執行計劃有了變化,即使是全表掃描,也會多出一個filter的操作。
select *
from
documents
Rows Row Source Operation
------- ---------------------------------------------------
5 FILTER (cr=7 pr=0 pw=0 time=184 us)
5 TABLE ACCESS FULL DOCUMENTS (cr=7 pr=0 pw=0 time=131 us)
透過檢視raw trace file可以看到Oracle在parse這個SQL的時候,自動新增了一個條件:
begin :con := LBAC_RLS.READ_FILTER(:sn, :on); end;
而這個條件的具體操作在trace file中也有儲存,此處就不多說了。總之,透過trace我們知道對於設定了label的表的select操作,Oracle自動新增了條件來保證使用者只能選擇到自己能夠看到的記錄。
那麼,對於DML(insert,update,delete)操作呢?其實,Oracle是自動在表上新增了觸發器,這一點我們可以在設定完label以後,透過dba_triggers檢視驗證,新增的是INSERT AFTER EACH ROW,UPDATE AFTER EACH ROW和DELETE BEFORE EACH ROW三個trigger,Oracle的很多功能在內部其實都是透過trigger完成,比如高階複製同樣如此,但是Oracle一直聲稱這些trigger是內部實現的,所以比使用者自定義的trigger效率要高。當然,內部trigger和自定義trigger在實現機制上是否真的不同,還有待驗證。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-899029/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用VPD細粒度訪問策略實現行級安全性 Step By Step
- Promise的實現(step by step)Promise
- React Step by StepReact
- 實時 Linux 抖動分析 Step by stepLinux
- 實現Vue-MVVM-step1VueMVVM
- Command 模式 Step by Step模式
- BAPI Step by step GuidanceAPIGUI
- Step by Step TimesTen --- ttIsqlSQL
- Step by Step 實現基於 Cloudera 5.8.2 的企業級安全大資料平臺 - Sentry 的整合Cloud大資料
- Learn c++ step by step (轉)C++
- 透過RMAN進行資料庫恢復(step by step)資料庫
- Linux Software RAID step by stepLinuxAI
- Git Step by Step (3):Git物件模型Git物件模型
- Oracle高階複製Step by StepOracle
- 安裝linux(step by step)(轉)Linux
- Learn C++ step by step(2) (轉)C++
- 單步除錯 step into/step out/step over 區別詳解除錯
- 實現 VUE 中 MVVM - step2 - DepVueMVVM
- 實現 VUE 中 MVVM - step11 - ExtendVueMVVM
- 實現 VUE 中 MVVM - step5 - ObserveVueMVVM
- 實現 VUE 中 MVVM - step6 - ArrayVueMVVM
- 機器學習之step by step實戰及知識積累筆記機器學習筆記
- ABP應用開發(Step by Step)-下篇
- ABP應用開發(Step by Step)-上篇
- TIDB DM資料同步step by stepTiDB
- Git Step by Step (4):探索.git目錄Git
- ClearCase使用入門--step by step(序) (轉)
- 利用VPD細粒度訪問策略實現行級安全性
- Vue.js SSR Step by Step (1) – 實現簡單的client-only vue-webpack 配置Vue.jsclientWeb
- Vue.js SSR Step by Step (1) - 實現簡單的client-only vue-webpack 配置Vue.jsclientWeb
- Git Step by Step (6):Git遠端倉庫Git
- STEP BY STEP INSTALL SSH ON AIX5.3(6.1)AI
- install 11G ASM on RedHat step by stepASMRedhat
- oracle10g simpe AQ step by step(二)Oracle
- oracle10g simpe AQ step by step(一)Oracle
- linux中配置NFS服務step by stepLinuxNFS
- step by step install netbackup client 6.5 on aixclientAI
- Step by Step Data Replication Using Oracle GoldenGateOracleGo