数据库审计audit

数据库审计audit

官方文档入口:

  Security Guide

  审计, 意味着捕获并且存储系统发生的信息,确实增加了系统的工作量。审计必须要专注于值得引起关心的事件。【审计必须集中,以便只捕获感兴趣的事件】适当的集中审计会对系统性能减少影响,相反则会对系统性能造成很大影响

  • 强制审计:所有Oracle数据库都会审计某些操作,而不考虑其他审计选项或审计参数。强制审计日志的原因是数据库需要记录一些数据库活动,比如特权用户的连接
  • 标准数据库审计:选择要审计的对象和权限,并创建适当的审计策略
  • 基于值的审计:扩展标准数据库审计,不仅捕获发生的审计事件,还捕获插入、更新或删除的实际值。基于值的审计是通过数据库触发器实现的
  • 细粒度审计(FGA):扩展标准数据库审计,捕获发出的实际SQL语句,而不仅仅是事件发生的事实

1 功能和类别

1)功能:监控特定用户在databaseaction(操作)

2)审计种类

  • 标准数据库审计(①语句审计、②权限审计、③对象审计)
  • 基于值的审计(Value-Based,触发器审计)
  • 精细审计(FGA
  • 统一审计

 

2 审计有关参数

show parameter audit

audit_trail参数主要选项:

  • none 不启用audit
  • db 将审计结果放在数据字典基表sys.aud$中,(一般用于审计非sys用户)os 将审计结果存放到操作系统的文件里,audit_file_dest指定的位置,一般用于审计sys
    •   db,extended,可以包括绑定变量,CLOB类型大对象等审计信息(考点)

 

3 标准数据库审计的三个级别

查看标准审计结果可以通过视图dba_audit_trail该视图读取aud$内容

3.1 语句审计

audit table;

按语句来审计,比如audit table会审计数据库中所有的create table, drop table, truncate table语句,执行成功或不成功都可审计

3.2 系统权限审计

audit select any table;

按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a;当用户a访问了用户b的表时(如select * from b.t;)会用到select any table权限,故会被审计。用户访问自己的表不会被审计

3.3 对象权限审计

audit update on scott.emp;

按对象审计,只审计on关键字指定对象的相关操作,如: aduit alter,delete,drop,insert ondamon.t by scott;这里会对damon用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计

 

4 基于值的审计

 

它拓展了标准数据库审计,不仅捕捉审计事件,还捕捉那些被insert,update delete的值。由于基于值的审计是通过触发器来实现。所以可以选择哪些信息进入审计记录,比如只记录提交的信息

 

5 精细审计Fine Grained Auditing (FGA)

5.1 特点

拓展了标准数据库审计,捕捉准确的SQL语句。审计访问特定行或特定列。操作可以使用dbms_fga包。精细审计一般不包括sys用户,目前EM中只有标准数据库审计,还没有包括基于值的审计和精细审计

5.2 创建测试用户、测试表

drop user demo cascade;
grant connect,resource to demo identified by oracle;
create table scott.emp1 as select * from scott.emp;
grant all on scott.emp1 to demo;

5.3 添加一个精细度审计策略

desc dbms_fga

begin
  dbms_fga.add_policy(
    object_schema=>'scott',
    object_name=>'emp1',
    policy_name=>'chk_emp1',
    audit_condition =>'deptno=20',
    audit_column =>'sal',
    statement_types =>'update,select');
end;
/

5.4 测试

select * from emp1 where deptno=20;

update scott.emp1 set sal=8000 where empno=7902;

select empno,ename from scott.emp1 where deptno=20;

缺少sal列,不审计

select empno,ename,sal from scott.emp1 where deptno=20;

虽然符合条件, 但默认不审计 sys

sys查询

5.5 验证审计结果

col db_user for a10
col sql_text for a60
select db_user,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') "time" ,sql_text from dba_fga_audit_trail;

可以看出,必须同时满足了所有审计条件(前面定义的)才能入选。另外没有审计SYS

5.6 删除FGA策略

exec dbms_fga.drop_policy(object_schema=>'scott',object_name=>'emp1',policy_name=>'chk_emp1');

清除审计记录

truncate table fga_log$;

posted @ 2021-06-25 18:17  chchcharlie、  阅读(735)  评论(0编辑  收藏  举报