IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁(yè)數(shù)據(jù)庫(kù)Oracle → Oracle的dbms.rls實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)控制

Oracle的dbms.rls實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)控制

時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)

  在大部份系統(tǒng)中,權(quán)限控制主要定義為模塊進(jìn)入權(quán)限的控制和數(shù)據(jù)列訪問(wèn)權(quán)限的控制(如:某某人可以進(jìn)入某個(gè)控制,倉(cāng)庫(kù)不充許查看有關(guān)部門的字段等等)。

  但在某些系統(tǒng)中,權(quán)限控制又必須定義到數(shù)據(jù)行訪問(wèn)權(quán)限的控制,此需求一般出現(xiàn)在同一系統(tǒng),不同的相對(duì)獨(dú)立機(jī)構(gòu)使用的情況。(如:集團(tuán)下屬多個(gè)子公司,所有子公司使用同一套數(shù)據(jù)表,但不同子公司的數(shù)據(jù)相對(duì)隔離),絕大多數(shù)人會(huì)選擇在View加上Where子句來(lái)進(jìn)行數(shù)據(jù)隔離。此方法編碼工作量大、系統(tǒng)適應(yīng)用戶管理體系的彈性空間較小,一旦權(quán)限邏輯發(fā)生變動(dòng),就可能需要修改權(quán)限體系,導(dǎo)致所有的View都必須修改。

  本文探討的使用oracle提供的Policy管理方法來(lái)實(shí)現(xiàn)數(shù)據(jù)行的隔離

  注意:這里的policy是在9i上

  (1)建立數(shù)據(jù)表(t_policy):

  CREATE TABLE T_POLICY

  (

  T1  VARCHAR2(10 BYTE),

  T2  NUMBER(10)

  );

  insert into t_policy values('a',10);

  insert into t_policy values('b',20);

  insert into t_policy values('c',30);

  commit;

  (2)建立測(cè)試policy的函數(shù):

  CREATE OR REPLACE function Fn_GetPolicy(P_Schema In Varchar2,P_Object In Varchar2) return varchar2 is

  Result varchar2(1000);

  begin

  Result:='t2 not in (10)';

  return(Result);

  end Fn_GetPolicy;

  /

  (3)加入policy:

  declare

  Begin

  Dbms_Rls.Add_Policy(

  Object_Schema =>'niegc',  --數(shù)據(jù)表(或視圖)所在的Schema名稱

  Object_Name =>'T_Policy', --數(shù)據(jù)表(或視圖)的名稱

  Policy_Name =>'T_TestPolicy', --POLICY的名稱,主要用于將來(lái)對(duì)Policy的管理

  Function_Schema =>'NIEGC',  --返回Where子句的函數(shù)所在Schema名稱

  Policy_Function =>'Fn_GetPolicy', --返回Where子句的函數(shù)名稱

  Statement_Types =>'Select,Insert,Update,Delete', --要使用該P(yáng)olicy的DML類型,如'Select,Insert,Update,Delete'

  Update_Check =>True, --僅適用于Statement_Type為'Insert,Update',值為'True'或'False'

  Enable =>True    --是否啟用,值為'True'或'False'

  );

  end;

  注:如果Update_Check設(shè)為'True',則用戶插入的值不符合Policy_Function返回條件時(shí),該DML執(zhí)行返回錯(cuò)誤信息。

  現(xiàn)在就可以工作了:

  select * from t_policy;

  看看結(jié)果怎樣,是不是少了t2=10這項(xiàng)了.

  (4)刪除policy

  declare

  begin

  dbms_rls.drop_policy('niegc','T_POLICY','T_TESTPOLICY');

  end;

  (5)設(shè)置policy的狀態(tài)

  declare

  begin

  dbms_rls.enable_policy('niegc','t_policy','t_testpolicy',false);

  end;

  (6)查看policy

  可以通過(guò)user_policies這個(gè)表看到.

關(guān)鍵詞標(biāo)簽:Oracle

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Oracle中使用alter table來(lái)增加,刪除,修改列Oracle中使用alter table來(lái)增加,刪除,修改列oracle中使用SQL語(yǔ)句修改字段類型-oracle修oracle中使用SQL語(yǔ)句修改字段類型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限Oracle對(duì)user的訪問(wèn)控制Oracle對(duì)user的訪問(wèn)控制

相關(guān)下載

人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法ORACLE和SQL語(yǔ)法區(qū)別歸納(1)oracle grant 授權(quán)語(yǔ)句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶并指定權(quán)限