FGA简介

FGA:细粒度访问控制:使用不同的用户名登录在查询相同表时返回不同的数据。
FGA的设置分为下面五个步骤:
一、 建立上下文:
二、设置上下文属性:
三、建立登录触发器:
四、建立策略函数
五、增加策略
二、 建立上下文:
SQL> conn / as sysdba
已连接。
SQL> create context empenv using scott.ctx;
上下文已创建。

二、设置上下文属性:
SQL> create package scott.ctx as procedure set_deptno;
2end;
3/

程序包已创建。

SQL> create package body scott.ctx as procedure set_deptno is
2id number;
3begin
4if sys_context('userenv','session_user')='JONES' then
5dbms_session.set_context('empenv','deptno',20);
6elsif sys_context('userenv','session_user')='BLAKE' then
7dbms_session.set_context('empenv','deptno',30);
8else
9dbms_session.set_context('empenv','deptno',10);
10end if;
11end;
12end;
13/

程序包体已创建。

三、建立登录触发器:
SQL> create trigger login_trig
2after logon on database call scott.ctx.set_deptno
3/

触发器已创建
四、建立策略函数
SQL> create package scott.emp_security as
2function emp_sec(p1 varchar2,p2 varchar2) return varchar2;
3end;
4/

程序包已创建。
1create or replace package body scott.emp_security as
2function emp_sec(p1 varchar2,p2 varchar2) return varchar2 is
3d_predicate varchar2(2000);
4begin
5if user not in('SYS','SYSTEM','SCOTT') then
6d_predicate:='deptno=SYS_CONTEXT(''empenv'',''deptno'')';
7return d_predicate;
8end if;
9return '1=1';
10end;
11* end;
SQL> /

程序包体已创建。

五、增加策略
SQL> exec dbms_rls.add_policy('scott','emp','emp_policy','scott','emp_security.emp_sec','select');
PL/SQL 过程已成功完成。

到些FGA的设置已经完成了。
现在来体验一下FGA吧:
SQL> conn scott/tiger
已连接。
SQL> select ename,deptno from emp;

ENAME DEPTNO
---------- ----------
SMITH 20
ALLEN 30
WARD 30
JONES 20
MARTIN 30
BLAKE 30
CLARK 10
SCOTT 20
KING 10
TURNER 30
ADAMS 20

ENAME DEPTNO
---------- ----------
JAMES 30
FORD 20
MILLER 10

已选择14行。
SQL> conn jones/jones
已连接。
SQL> select ename,deptno from emp;
select ename,deptno from emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select ename,deptno from scott.emp;

ENAME DEPTNO
---------- ----------
SMITH 20
JONES 20
SCOTT 20
ADAMS 20
FORD 20
SQL> conn blake/blake
已连接。
SQL> select ename,deptno from scott.emp;

ENAME DEPTNO
---------- ----------
ALLEN 30
WARD 30
MARTIN 30
BLAKE 30
TURNER 30
JAMES 30

已选择6行。

========================
FGA:细粒度审计
建立策略函数:
SQL> exec dbms_fga.add_policy(object_schema=>'scott',-
> object_name=>'emp',policy_name=>'chk_emp',-
>audit_condition=>'deptno=20',audit_column=>'sal',-
>statement_types=>'update,select')

PL/SQL 过程已成功完成。
策略函数已经建立完毕。、
可以通过这个查询来查看策略函数是否建立完成。
select t.object_schema,t.object_name,t.policy_name,t.enabled from dba_audit_policies t;

开始体验FGA了:
执行下列语句:
SQL> conn scott/tiger
已连接。
SQL> update emp set sal=sal+.1 ;

已更新14行。

SQL> commit;

提交完成。
查看审计结果:
select * from dba_fga_audit_trail;
1 120 2006-10-13 15:13:13 SCOTT 0914-32/Administrator EPORT0/0914-32 0914-32/Administrator SCOTT EMP CHK_EMP 363592 update emp set sal=sal+.1 UPDATE 13-10月-06 03.13.13.147000 下午 +08:00 0 308:1016 0400040047000000 8 1
======================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值