从Oracle9i开始,就可以使用DBMS_FGA可以对指定的表的select语句进行审计
但是在9i中只能对select语句进行审计,在10g中可以实现对DML的审计功能
下面用DBMS_FGA来展示select语句的审计功能
① 假定我们存在表t,包含记录为
sys@ORCL> select * from hr.t;
ID NAME
---------- --------------------
1 a
2 b
3 c
4 d
5 e
② 分析该表,让其使用CBO优化模式
sys@ORCL> analyze table hr.t compute statistics;
Table analyzed.
③ 检查以前的审计策略与审计日志
sys@ORCL> select OBJECT_SCHEMA,OBJECT_NAME,POLICY_NAME from dba_audit_policies;
no rows selected
sys@ORCL> select OBJECT_SCHEMA,OBJECT_NAME,POLICY_NAME,SQL_TEXT from dba_fga_audit_trail;
no rows selected
dba_audit_policies:用来存放审计策略
dba_fga_audit_trail:用来存放审计日志,即执行了那些SQL语句
通过以上的查询,我们也可以看到,以前没有审计策略,也没有审计日志
④ 现在,我们在hr.t表增加一个审计策略
sys@ORCL> begin
2 dbms_fga.add_policy(object_schema=>'HR',
3 object_name=>'T',
4 policy_name=>'chk_t',
5 audit_condition=>'id=2',
6 audit_column=>'NAME',
7 enable=>TRUE,
8 statement_types=>'SELECT,INSERT,UPDATE,DELETE'
9 );
10 end;
11 /
PL/SQL procedure successfully completed.
⑤ 我们再查询dba_audit_policies,就可以发现这条审计策略了
sys@ORCL> select OBJECT_SCHEMA,OBJECT_NAME,POLICY_NAME,ENABLED from dba_audit_policies;
OBJECT_SCHEMA OBJECT_NAME POLICY_NAME ENA
------------------------------ ------------------------------ ------------------------------ ---
HR T CHK_T YES
⑥ 那么就让我们看看该审计策略怎么生效,假定我们执行如下的一些语句
u1@ORCL> select count(*) from hr.t where id=1;
COUNT(*)
----------
1
可以看到,该查询返回的结果集中显然没有id=2的行,所以,该查询不能被审计
u1@ORCL> select count(*) from hr.t where id=2;
COUNT(*)
----------
1
有人说这个语句包含了id=2,该被审计了吧,然,我们的审计条件中还有一个是审计列必须要有name
count(*)没有包含name,所以该语句还是没有被审计
u1@ORCL> select count(*) from hr.t where name='b';
COUNT(*)
----------
1
这个语句被审计了,因为已经包含了列name在where中,而name=b正好是id=2的行,所以id=2是被隐式包含的
u1@ORCL> select * from hr.t where id=2;
ID NAME
---------- --------------------
2 b
该语句肯定被审计,所有列肯定包含审计列name,谓语条件正好是id=2
u1@ORCL> select id from hr.t where id=3;
ID
----------
3
这个语句肯定就不被审计了,典型的什么都不满足
u1@ORCL> select name from hr.t where name='b';
NAME
--------------------
b
这个语句也被审计,为什么呢?这个语句包含审计列,而且隐式包含了id=2(因为id=2与name=b是同一行)
u1@ORCL> select name from hr.t where name='d';
NAME
--------------------
d
这个语句没有被审计,因为虽然满足了审计列的条件,但是没有显式或隐式包含id=2
但是如果在您的环境中,这个语句如果被审计了,就请您确信是否分析过表,该查询是否是使用的CBO优化计划
综合以上结果,以上被审计的语句应当是3个:
sys@ORCL> select OBJECT_SCHEMA,OBJECT_NAME,POLICY_NAME,SQL_TEXT from dba_fga_audit_trail;
OBJEC OBJEC POLIC SQL_TEXT
----- ----- ----- ---------------------------------------------
HR T CHK_T select count(*) from hr.t where name='b'
HR T CHK_T select * from hr.t where id=2
HR T CHK_T select name from hr.t where name='b'
对于越来越多的审计记录,我们必须手工维护,删除没有参考价值的记录,我们可以运行如下查询来删除审计记录(需要delete any table的权限或在sys下执行):
delete from sys.fga_log$
or
delete from Dba_Fga_Audit_Trail
到这里,大家总该明白了怎么样审计表的Select语句,同普通审计与DML触发器一样,对过多的表进行审计,将会严重影响性能。
但是,在特定的情况下,如果想跟踪一个表的Select语句已便于优化,也还是可以的
⑦ 相关注意事项
没有提交也被审计
sys不被审计,我第一次实验时用sys便错了
分享到:
相关推荐
细粒度审计(FGA),是在Oracle 9i中引入的,能够记录SCN号和行级的更改以重建旧的数据,本文将详细介绍,需要的朋友可以参考下
遗传算法MATLAB函数程序,格雷编码,均匀,多点交叉,倒位操作
一个遗传算法的原代码,非常好用,只要传进参数即可使用
遗传算法通用函数,非常实用和珍贵 描述简介如下: % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of ...
oracle细粒度审计(FGA) 是oracle提供的对表细粒度的级别的审计功能,可以捕获DML、SELECT等客户端发起的操作。
一个简单的针对函数优化问题的遗传算法源程序。
(六)细粒度审计(FGA) 71 (七)DBA 审计 73 (八)12c 审计的新特性 73 十、移动数据 76 (一)移动数据的整体架构 76 (二)目录对象 76 (三)使用 SQL*Loader 77 (四)数据泵 78 (五)外部表 80 十一、性能...
但是,当/可以细化策略时,建议将细粒度Fine Grained Authorization (FGA)外部化到组织范围内的集中式服务,以实现更整洁的设计,灵活性,可伸缩性,CI / CD和总体更好的管理。 通过充当集中式通用Policy Decision...
细粒度审计 10-20 FGA 策略 10-21 审计的 DML 语句:注意事项 10-23 FGA 准则 10-24 DBA 审计 10-25 维护审计线索 10-26 安全更新 10-27 应用安全补丁程序 10-28 小结 10-29 练习概览:实施 Oracle 数据库...
基于FGA的VerilogHDL数字钟设计完整版.docx基于FGA的VerilogHDL数字钟设计完整版.docx基于FGA的VerilogHDL数字钟设计完整版.docx基于FGA的VerilogHDL数字钟设计完整版.docx基于FGA的VerilogHDL数字钟设计完整版.docx...
基于FGA的VerilogHDL数字钟设计完整版.pdf基于FGA的VerilogHDL数字钟设计完整版.pdf基于FGA的VerilogHDL数字钟设计完整版.pdf基于FGA的VerilogHDL数字钟设计完整版.pdf基于FGA的VerilogHDL数字钟设计完整版.pdf基于...
非常好用的截图软件,方便快速,值得拥有,大家一起进步
Python脚本生成.fga格式的矢量字段,可以直接导入到Unreal Engine 4中
6.6.4 细粒度审核(FGA) 201 6.7 本章知识点回顾 204 6.8 自测题 205 6.9 自测题答案 208 第Ⅱ部分 SQL 211 第7章 DDL和模式对象 213 7.1 分类主要的数据库对象 214 7.1.1 对象类型 214 7.1.2 命名模式对象 ...
狗粮.fga.json