数据库审计audit
官方文档入口:
Security Guide
审计, 意味着捕获并且存储系统发生的信息,确实增加了系统的工作量。审计必须要专注于值得引起关心的事件。【审计必须集中,以便只捕获感兴趣的事件】适当的集中审计会对系统性能减少影响,相反则会对系统性能造成很大影响
- 强制审计:所有Oracle数据库都会审计某些操作,而不考虑其他审计选项或审计参数。强制审计日志的原因是数据库需要记录一些数据库活动,比如特权用户的连接
- 标准数据库审计:选择要审计的对象和权限,并创建适当的审计策略
- 基于值的审计:扩展标准数据库审计,不仅捕获发生的审计事件,还捕获插入、更新或删除的实际值。基于值的审计是通过数据库触发器实现的
- 细粒度审计(FGA):扩展标准数据库审计,捕获发出的实际SQL语句,而不仅仅是事件发生的事实
1 功能和类别
1)功能:监控特定用户在database的action(操作)
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$;