時(shí)間:2015-06-28 00:00:00 來(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)部門(mé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名稱(chēng)
Object_Name =>'T_Policy', --數(shù)據(jù)表(或視圖)的名稱(chēng)
Policy_Name =>'T_TestPolicy', --POLICY的名稱(chēng),主要用于將來(lái)對(duì)Policy的管理
Function_Schema =>'NIEGC',? --返回Where子句的函數(shù)所在Schema名稱(chēng)
Policy_Function =>'Fn_GetPolicy', --返回Where子句的函數(shù)名稱(chēng)
Statement_Types =>'Select,Insert,Update,Delete', --要使用該P(yáng)olicy的DML類(lèi)型,如'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)閱讀
熱門(mén)文章 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修改SQL語(yǔ)句案例 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索
人氣排行 oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修改SQL語(yǔ)句案例 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句 ORACLE和SQL語(yǔ)法區(qū)別歸納(1) oracle grant 授權(quán)語(yǔ)句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法