時間: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)閱讀
熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索
人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法