1-- 1、创建测试表 2create table TEST_POLICY 3( 4 USERNAME VARCHAR2(10), 5 PASSWORD NUMBER(10) 6); 7insert into TEST_POLICY values('a',30); 8insert into TEST_POLICY values('b',20); 9insert into TEST_POLICY values('c',40); 10commit; 11--2、创建策略约束函数,表只可输入密码为40的用户,其他用户将被删除 12CREATE OR REPLACE Function Fn_GetPolicy(P_Schema in varchar2, 13 P_Object in varchar2) 14 return varchar2 is 15 L_PREDICATE VARCHAR2(1000) := ''; 16Begin 17 L_PREDICATE := 'password=40'; 18 Return L_PREDICATE; 19end Fn_GetPolicy; 20--3、创建策略 21declare 22Begin 23 Dbms_Rls.Add_Policy(Object_Schema => 'SCOTT', --数据表(或视图)所在的Schema名称 24 Object_Name => 'TEST_Policy', --数据表(或视图)的名称 25 Policy_Name => 'T_TestPolicy', --POLICY的名称,主要用于将来对Policy的管理 26 Function_Schema => 'SCOTT', --返回Where子句的函数所在Schema名称 27 Policy_Function => 'Fn_GetPolicy', --返回Where子句的函数名称 28 Statement_Types => 'Select,Insert,Update,Delete', --要使用该Policy的DML类型,如'Select,Insert,Update,Delete' 29 Update_Check => True, --仅适用于Statement_Type为'Insert,Update',值为'True'或'False' 30 Enable => True --是否启用,值为'True'或'False' 31 ); 32end; 33--注:如果Update_Check设为'True',则用户插入的值不符合Policy_Function返回条件时,该DML执行返回错误信息。 34--现在就可以工作了: select * from TEST_POLICY ; 看看结果怎样, 是不是少了password<>40的数据了. 35--4、查看当前用户的策略 36SELECT * FROM USER_POLICIES; 37--5、删除策略 38DECLARE 39BEGIN 40 Dbms_Rls.drop_policy('SCOTT', --要删除的Policy所在的Schema 41 'TEST_Policy', --要删除Policy的数据表(或视图)名称 42 'T_TESTPOLICY' --要删除的Policy名称 43 ); 44end;
oracle 策略POLICY学习
Wesley13
2021-10-11
1227 0 0
点赞
收藏
评论区
加载中...