Oracle10g系统管理11

56.精细访问控制使用户可以使用函数、策略实现更加细微的安全访问控制。如果使用精细访问控制,那么当在客户端发出SQL语句(SELECT、INSERT、UPDATE、DELETE)时,Oracle会自动在这些SQL语句后追加谓词(where子句),并执行新的SQL语句。通过使用精细访问控制,可以使不同数据库用户在访问相同表时返回不同数据。

应用上下文(Application Context)用于存放用户会话的相关属性信息,使用应用上下文可以定义、设置和访问应用属性。使用精细访问控制时,必须建立应用上下文。DBA可以使用CREATE CONTEXT命令手工建立专门的应用上下文。

USERENV是Oracle为其应用程序提供的默认应用上下文。常用属性如下:
TERMINAL
LANGUAGE
NLS_DATE_FORMAT
SESSION_USER
CURRENT_SCHEMA
DB_NAME
HOST
OS_USER

 

自定义应用上下文
CREATE CONTEXT contextname USING username.packagename
取得上下文属性值
Select sys_context(‘userenv’,’language’) from dual;
设置上下文属性
自定义上下文没有任何默认属性,其属性需要使用包DBMA_SESSION中的过程SET_CONTEXT进行设置。
EXEC DBMS_SESSION.SET_CONTEXT(‘empenv’,’deptno’,20);

实现精细访问控制
建立应用上下文
create or replace context empenv using scott.ctx;

 

建立包过程设置应用上下文属性
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;
end;

 

建立登录触发器,必须以sys用户身份建立登录触发器
create or replace trigger login_tring
after logon on database call scott.ctx.set_deptno

 

建立策略函数
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;

 

增加策略,定义对象、策略、策略函数以及SQL语句之间的对应关系
execute dbms_rls.add_policy('scott','emp','emp_policy','scott','emp_security.emp_sec','select');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值