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

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

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

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

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

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

  本文探討的使用Oracle提供的Policy管理方法來實現(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)建立測試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的名稱,主要用于將來對Policy的管理

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

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

  Statement_Types =>'Select,Insert,Update,Delete', --要使用該Policy的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返回條件時,該DML執(zhí)行返回錯誤信息。

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

  select * from t_policy;

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

  (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

  可以通過user_policies這個表看到.

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

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實例的控制文件 誤刪Oracle數(shù)據(jù)庫實例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法