ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 精细访问控制

精细访问控制

原创 Linux操作系统 作者:ljs4053 时间:2010-02-22 17:13:03 0 删除 编辑

    精细访问控制(可以使不同用户执行相同操作﹐处理不同的数据库数据,通过使用系统包DBMS_RLS实现的)

1.      建立应用上下文

Create or replace context empenv using scott.ctx

2.      建立包过程设置应用上下文属性

Create or replace package scott.ctx as

 Procedure set_deptno;

End;

/

Create or replace package body scott.ctx as

  Procedure set_deptno is

    Id number;

  Begin

    If sys_context(‘userenv’,’session_user’)=’JONES’ then

       Dbms_session.set_context(‘empenv’,’deptno’,20);

    Elsif sys_context(‘userenv’,’session_user’)=’BLAKE’ then

       Dbms_session.set_context(‘empenv’,’deptno’,30);

    else

       Dbms_session.set_context(‘empenv’,’deptno’,10);

           End if;

           End;

          End;

3.      设置登录触发器

Create or replace trigger login_trig

  After logon on database call scott.ctx.set_deptno

/

4.      建立策略函数

Create or replace package scott.emp_security as

  Function emp_sec(p1 varchar2,p2 varchar2) return varchar2;

End;

/

Create or replace package body scott.emp_security as

 Function emp_sec(p1 varchar2,p2 varchar2) return varchar2

  Is

   D_predicate varchar2(2000);

  Begin

    If user not in(‘sys’,’system’,’scott’) then

        D_predicate :=’deptno=sys_context(“empenv”,”deptno”)’;

       Return d_predicate;

    End if;

      Return ‘1=1’;

  End;

End;

5.      增加策略

 

exec dbms_rls.add_policy (

              object_schema =>           'scott',

              object_name =>             'emp',

              policy_name =>             'emp_policy',

              function_schema =>    'scott',

              policy_function =>    'emp_security.emp_sec',

              statement_types =>    'SELECT',

              update_check =>            TRUE,

              enable =>                   TRUE

     );

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22736841/viewspace-627522/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: Linux学习
请登录后发表评论 登录
全部评论

注册时间:2010-02-22

  • 博文量
    14
  • 访问量
    12699