oracle VPD

  1. oracle 支持中文schema名字
  2. 创建VPD用户 

 create user 采油三厂 identified by vpd;

  

  grant resource, connect,dba to 采油三厂;

 如果没权限

grant execute ON  DBMS_RLS to dqa5;

  1. 创建表

create table sys_department_mapping as select * from a5admin.sys_department_mapping;

  1. 创建function

CREATE OR REPLACE PACKAGE a5_security

AS

  FUNCTION deptno_sec (a1 VARCHAR2, a2 VARCHAR2)

    RETURN VARCHAR2;

END a5_security;

 

CREATE OR REPLACE PACKAGE BODY a5_security

AS

  FUNCTION deptno_sec (a1 VARCHAR2, a2 VARCHAR2)

    RETURN VARCHAR2

  IS

    vc_userid varchar2(100);

    l_predicate   VARCHAR2 (2000);

  BEGIN

    select SYS_CONTEXT('USERENV','SESSION_USER')

    into vc_userid

    from dual;

    if(trim(vc_userid)='VPD') then

       l_predicate := '1=1';

    else

    l_predicate := 'cj='||  ''''||vc_userid|| '''';

    end if;

    RETURN l_predicate;

  END deptno_sec;

END a5_security;

  1. 添加安全策略

 

BEGIN

  DBMS_RLS.add_policy (object_schema       => 'VPD'

                      ,object_name         => 'sys_department_mapping'

                      ,policy_name         => 'dept_policy'

                      ,function_schema     => 'VPD'

                      ,policy_function     => 'a5_security.deptno_sec'

                      ,statement_types     => 'select'

                      );

END;

删除安全策略

begin

DBMS_RLS.drop_policy(object_name =>'sys_department_mapping',policy_name  =>  'dept_policy');

end;

  1. 创建测试用户

  create user 采油三厂 identified by vpd;

  

  grant connect to 采油三厂;

 

grant select  on xxx(表或视图) to 采油三厂

  1. select * from vpd.sys_department_mapping;
  2. 参考文档

http://blog.itpub.net/17203031/viewspace-1135651

http://blog.csdn.net/t0nsha/article/details/7423638

posted on 2014-10-30 10:41  青春的虎子  阅读(181)  评论(0)    收藏  举报

导航