Oracle Policy

来源:互联网 发布:linux建立文件 编辑:程序博客网 时间:2024/06/05 01:52
select * from Policy_test;


select GRANTEE,OWNER,TABLE_NAME,COLUMN_NAME,GRANTOR,PRIVILEGE,GRANTABLE from user_col_privs;


select * from user_users;


select user from dual;


-- 0、查看Policy
SELECT * FROM user_policies;


-- 1、创建测试表
create table Policy_test(
服务类型  VARCHAR(100),
服务名称  VARCHAR(100),
用户部门  VARCHAR(100),
单价  number(30),
时间_Month  number(30),
收入  number(30)
);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','灾备NAS存储服务','平安科技系统开发一部车险承保组',1000,11,11000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','银行-生产高端SAN存储服务','平安科技系统开发二部渠道支持组',2000,12,24000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('虚拟服务','PO项目管理支持','平安科技系统开发五部投资平台开发组',3000,11,33000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('虚拟服务','应用架构维护','平安科技系统开发二部集团资金平台组',4000,12,48000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','证券-数据采集服务','平安科技系统开发一部理赔系统组',5000,11,55000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','万里通-集中用户管理服务','平安科技系统开发三部成都公共平台组',6000,12,72000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','证券-集中用户管理服务','平安科技系统开发五部投资外围开发组',7000,11,77000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','个人电脑服务(总部)','平安科技系统开发二部理赔组',8000,12,96000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','银行-staging中端SAN存储服务','平安科技系统开发二部集团资金平台组',9000,11,99000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','银行-生产数据库服务器服务','平安科技系统开发二部渠道支持组',10000,12,120000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','事件响应VIP服务','平安科技系统开发三部成都后援服务组',11000,11,121000);
insert into Policy_test (服务类型,服务名称,用户部门,单价,时间_Month,收入)values('定价服务','证券-ODS平台服务','平安科技系统开发二部集团财务组',12000,12,144000);
commit;


--2、创建策略约束函数,itcostdata用户只能看到“定价服务”
CREATE OR REPLACE Function Fn_GetPolicy(P_Schema In Varchar2,P_Object In Varchar2) Return Varchar2 Is
  p_count integer;
begin
       select COUNT(user) into p_count from dual where user='ITCOSTDATA';
       if p_count>0 then 
          Return('服务类型=定价服务');
       else 
          Return('服务类型=test');
       end if;
end Fn_GetPolicy;


--drop Function Fn_GetPolicy;


--3 加入Policy
Begin
Dbms_Rls.Add_Policy(Object_Schema =>'ITCOSTDATA'
,Object_Name =>'Policy_test'
,Policy_Name =>'T_TestPolicy'
,Function_Schema =>'ITCOSTDATA'
,Policy_Function =>'Fn_GetPolicy'
,Statement_Types =>'Select'--,Insert,Update,Delete
,Update_Check =>'False'
,Enable =>'True'
);
End;


--新增Policy
  Dbms_Rls.Add_Policy(Object_Schema --数据表(或视图)所在的Schema名称
  ,Object_Name --数据表(或视图)的名称
  ,Policy_Name --POLICY的名称,主要用于将来对Policy的管理
  ,Function_Schema --返回Where子句的函数所在Schema名称
  ,Policy_Function --返回Where子句的函数名称
  ,Statement_Types --要使用该Policy的DML类型,如'Select,Insert,Update,Delete'
  ,Update_Check --仅适用于Statement_Type为'Insert,Update',值为'True'或'False'
  ,Enable --是否启用,值为'True'或'False'
  );
--4 测试Policy
Select * From Policy_test where 服务类型='虚拟服务';


Insert Into T_Policy Values ('d',10);
Insert Into T_Policy Values ('d',20);
Commit;
      
--5 查看Policyy设定情况
Select * From user_policies;
      
--重要提示:执行Dbms_Rls.Add_Policy时,必须将执行Dbms_Rls包执行的权限授予Scott。测试时也可能使用其它Schema,
--最简单的方法是将测试的Schame设为“DBA”权限。
0 0
原创粉丝点击