59.审计分类
特权用户审计:审计特权用户所执行的数据库操作,设置初始化参数audit_sys_operations
数据库审计:审计数据库用户所执行的操作,设置初始化参数audit_trail,并且指定要审计的数据库操作
应用审计:审计数据变化(如update操作前后的数据),必须使用应用审计
审计作用
调查可疑的数据库活动
监视和收集特定活动的数据
审计的指导方针
根据审计需求最小化审计选项降低审计跟踪记录个数,假定DBA用户只想监视用户DEVEP在指定时间段的会话个数,那么在设置审计选项
时应使用命令AUDIT SESSION BY devep,而不是执行命令AUDIT SESSION。
移动审计表SYS.AUD$到其他表空间上
监视并定期删除审计跟踪记录
避免审计跟踪记录被非法用户删除,如果用户具有DELETE_CATALOG_ROLE角色,他们可以删除审计跟踪记录。
为了审计特权用户执行的其他操作信息,需设置参数
alter system set audit_sys_operations=true scope=spfile;
特权用户所执行的任何操作都会被记载到OS审计跟踪记录中
激活数据库审计,必须将该参数设置为OS或DB。
初始化参数为OS时,Oracle会将审计结果放到OS审计跟踪记录中
初始化参数为DB时,Oracle会将审计结果当道数据字典AUD$中
alter system set audit_trail=db scope=spfile;
审计选项
by session:同一会话中对完全相同的SQL语句只生成一条审计跟踪记录
by access:每执行一次语句生成一条审计跟踪记录
by 用户名:审计特定的数据库用户。
whenever [not] successful
语句审计
语句审计用于审计与特定语句相关的SQL操作。
当指定审计user语句时,oracle会审计create user, alter user和drop user等操作。
当指定审计table语句时,oracle会审计create table, alter table和drop table等操作。
audit user;
audit table;
显示审计跟踪结果
select username,action_name,obj_name,to_char(timestamp,’YYYY-MM-DD HH24:MI:SS’) from dba_audit_trail;
显示已经设置的审计选项
select user_name,audit_option from dba_stmt_audit_opts;
禁止语句审计
noaudit user;
noaudit table;
权限审计
权限审计用于审计与系统权限想过的SQL操作
dba_priv_audit_opts
对象审计
对象审计用于审计特定方案对象上的SQL操作。
指定审计SCOTT.EMP表的select选项时,任何用户查询scott.emp表都会被审计。
audit all on scott.emp;
查询审计跟踪记录
select username,ses_actions,obj_name,to_char(timestamp,’YYYY-MM-DD HH24:MI’)
from dba_audit_trail;
显示已经设置的对象审计选项
select sel, ins, upd, del from dba_obj_audit_opts where owner=’SCOTT’ and object_name=’EMP’;
禁止对象审计
noaudit all on scott.emp;
删除审计跟踪
delete from sys.aud$;
60.为了审计用户在特定数据行或列上的SQL操作,需要使用精细审计(Fine-Grained Audit)。使用精细审计时,不需要激活数据库审计,并且精细审计时使用Oracle系统包DBMS_FGA实现的。
为了使用精细审计,必须首先在特定方案对象上建立FGA策略。建立FGA策略是使用过程add_policy完成的。
Oracle会将信息记载到数据字典FGA_LOG$中。
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')
查看精细审计结果
select db_user, sql_text from dba_fga_audit_trail;
禁止精细审计使用过程disable_policy
exec dbms_fga.disable_policy(object_schema=>'scott',object_name=>'emp',policy_name=>'chk_emp')
激活精细审计使用过程enable_policy
exec dbms_fga.enable_policy(object_schema=>'scott',object_name=>'emp',policy_name=>'chk_emp')
删除FGA策略,使用过程DROP_POLICY删除FGA策略
exec dbms_fga.drop_policy(object_schema=>'scott',object_name=>'emp',policy_name=>'chk_emp')
删除精细审计结果
delete from sys.fga_log$;
为了审计DML操作所引起的数据变化,必须使用应用审计,应用审计可以使用DML触发器实现。
建立审计表
create table audit_emp_change(name varchar2(10),oldsal number(6,2),newsal number(6,2),time date);
建立DML触发器
create or replace trigger tr_sal_change
after update of sal on emp
for each row
declare
v_temp int;
begin
select count(*) into v_temp from audit_emp_change where name:=old.ename;
if v_temp=0 then
insert into audit_emp_change values(:old.ename,:old.sal,:new.sal,sysdate);
else
update audit_emp_change
set oldsal=:old.sal,newsal=:new.sal,time=sysdate
where name=:old.ename;
end if;
end;
查看审计结果
select name,oldsal,newsal,to_char(time,'YYYY-MM-DD HH24:MI') from audit_emp_change;