数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
一、审计类型
ORACLE的审计技术,除了SYSDBA审计之外,还有数据库审计、基于值的审计、细粒度审计。
SQL> show parameter audit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/orcl/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string DB
1.1 SYSDBA审计
audit_sys_operations(默认为false)设置为TRUE,那么作为SYSDBA或SYSOPER连接数据库的用户所发布的每条语句都会被写入操作系统审核跟踪,从而能够给出DBA所进行操作的完整记录。
alter system set audit_sys_operations=TRUE scope=spfile;
之后重启数据库。
之后DBA的操作都会被记录在审计文件中。
1.2 数据库审计
设置数据库审计之前,必须设置audit_trail的值,这个参数可以具有以下值:
NONE(或者FALSE):禁用数据库审计
OS:审计记录会被写至操作系统的文件中;
DB:审计记录写到SYS.AUD$中。
DB_EXTENDED:与DB作用大体相同,不过包含生成审计记录的、具有绑定变量的SQL语句。
XML:与OS作用大体相同,但使用XML标记设置格式。
XML_EXTENDED:与XML作用大体相同,但使用SQL语句和绑定变量。
例如对scott上的emp表做审核
如果audit_trail的值是“DB",那么就看不到执行的语句,因此修改成:
alter system set audit_trail=DB_EXTENDED scope=spfile;
重启数据库。
audit select,delete,update on scott.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列的变更值比较感兴趣,就可以建立一个触发器,将操作的值写入到表中。
create table AUDIT_VALUE_TRAIL
(
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','sessionid'),
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;
/
执行:
update emp
set comm=2000
where empno=7900;
commit;
对比dba_audit_trail、audit_value_trail的结果是否一样。
1.4 细粒度审计(FGA)
细粒度审计可以配置为只在访问特定行或特定行的特定列时生成审计记录,此外还可以配置为在违反审计条件时运行一个PL/SQL代码块。
配置FGA将会涉及包DBMS_FGA,为了创建一个FGA审计策略,需要使用add_policy过程,这个过程接受下表所示的参数:
参考资料:《OCP/OCA 认证考试指南全册》 第六章:ORACLE安全性 第6节使用标准数据库审核
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。