【读书笔记】数据库审计

数据库版本:

一、审计类型

甲骨文的审计技术,除了SYSDBA审计之外,还有数据库审计,基于值的审计,细粒度审计。

名称,,,,,,,,,,,,TYPE ,,,,,,值

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -, - - - - - - - - - - -女人,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

audit_file_dest,,,,,,字符串大敌;,,/u01/app/oracle/admin/orcl/adump

audit_sys_operations,,,,,布尔,,,假

audit_syslog_level,,,,,,string ,,,,

audit_trail,,,,,,,,字符串,,,DB

1.1 SYSDBA审计

audit_sys_operations(默认为false)设置为真,那么作为SYSDBA或SYSOPER连接数据库的用户所发布的每条语句都会被写入操作系统审核跟踪,从而能够给出DBA所

alter  system  set  audit_sys_operations=TRUE 范围=spfile;

之后重启数据库。

之后DBA的操作都会被记录在审计文件中。

1.2数据库审计

设置数据库审计之前,必须设置audit_trail的值,这个参数可以具有以下值:

没有(或者错误):禁用数据库审计

操作系统:审计记录会被写至操作系统的文件中,

DB:审计记录写到SYS.AUD中美元。

DB_EXTENDED:与DB作用大体相同,不过包含生成审计记录的,具有绑定变量的SQL语句。

XML:与操作系统作用大体相同,但使用XML标记设置格式。

XML_EXTENDED:与XML作用大体相同,但使用SQL语句和绑定变量。

例如对斯科特上的emp表做审核

如果audit_trail的值是“数据库”,那么就看不到执行的语句,因此修改成:

alter  system  set  audit_trail=DB_EXTENDED 范围=spfile;

重启数据库。

审计选择、删除、更新斯科特。emp by access;

--关闭审计:noaudit

select * from emp;

update emp

set comm=1500

where empno=7900;

insert into emp

select 7935,ename,job,mgr,hiredate,sal,comm,deptno

from emp

where empno=7934;

delete from emp 

where empno=7935;

--查看审计信息

select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,

sessionid,os_process,sql_text

  from dba_audit_trail

  where obj_name='EMP'

  order by timestamp desc;

如果audit_trail的值是DB,则看不到sql_text的信息,因此将audit_trail修改成db_extended,重新运行一次。

1.3 基于触发器执行基于值的审计

使用触发器配合审计,将变更的值记录到某个表中。即使不配置审计策略,也可以执行。

例如,我们对scott.emp表上comm列的变更值比较感兴趣,就可以建立一个触发器,将操作的值写入到表中。

(

  terminal     VARCHAR2(256),

  sessionid    VARCHAR2(256),

  isdba        VARCHAR2(256),

  current_user VARCHAR2(256),

  os_user      VARCHAR2(256),

  ip_address   VARCHAR2(256),

  obj_user     VARCHAR2(10),

  obj_name     VARCHAR2(22),

  act_value    VARCHAR2(255)

);

create or replace trigger tri_emp_audit

after update of comm on scott.emp

referencing new as new old as old

for each row

begin

if :old.comm !=:new.comm then

insert into sys.audit_value_trail

values(SYS_CONTEXT('USERENV','TERMINAL'),

SYS_CONTEXT('USERENV','

SYS_CONTEXT('USERENV','ISDBA'),

SYS_CONTEXT('USERENV','CURRENT_USER'),

SYS_CONTEXT('USERENV','OS_USER'),

SYS_CONTEXT('USERENV','IP_ADDRESS'),

'scott','emp',:new.empno||' comm is  changed from '||:old.comm ||'to '||:new.comm );

end if;

end;

/

执行:

set comm=2000

where empno=7900;

commit;

对比

细粒度审计可以配置为只在访问特定行或特定行的特定列时生成审计记录,此外还可以配置为在违反审计条件时运行一个PL/SQL代码块。

配置FGA将会涉及包DBMS_FGA,为了创建一个FGA审计策略,需要使用add_policy过程,这个过程接受下表所示的参数:


参考资料:《OCP/OCA 认证考试指南全册》 第六章:ORACLE安全性 第6节使用标准数据库审核

【读书笔记】数据库审计