仅使用权限、角色、视图甚至细粒度安全策略建立访问控制系统还不能保证数据库的安全。因此,开启审计数据库的使用能让我们知道访问控制机制是否确实像所希望的那样工作。
审计分为标准审计和细粒度审计,标准审计基于语句级、权限级和对象级。而细粒度审计涉及某种粒度的数据访问。比如某个经理应该能够看到为他工作的雇员工资有关信息。那么,怎样才能知道这位经理是否还查看了他的顶头上司的工资信息?是否要审计这位经理的所有的select语句?这个时候利用细粒度审计
(FGA)可以只审计一个表种的某些行,还可以将FGA作为一种侵入检测装置。
1.启用审计
alter system set audit_trail = DB scope = spfile;
有些网站上写可以scope = both,但是实际修改时无法修改指定的类型,只能修改到spfile重启实例,还望达人指教。
audit_trail主要有如下几个值:
NONE:10g的默认值,表示禁用数据库审计;
OS:将审计记录写到一个操作系统文件中。写入的目录由audit_file_dest参数指定,但是注意:在Windows
NT下(我是XP),审计记录不启用这个参数,而是直接写道本地管理日志,需要到管理中查看。
DB:将审计记录写入数据库审计跟踪,棵视为DBA_AUDIT_TRAIL(存储在SYS.AUD$表中)。启用这个参数后注意将相关的几张表以及索引从system表空间下改到另一个表空间。
select * from dba_tables t where t.table_name = 'AUD$';
select *
from dba_tables t where t.table_name = 'AUDIT$';
select *
from dba_tables t where t.table_name = 'AUDIT_ACTIONS';
alter table aud$ move tablespace TBS_PM;
alter table
AUDIT$ move tablespace TBS_PM;
alter table
AUDIT_ACTIONS move tablespace TBS_PM;
alter index I_aud1 rebuild tablespace TBS_Index;
alter index
i_audit rebuild online tablespace TBS_Index;
alter index
i_audit_actions rebuild online tablespace TBS_Index;
另有DBExtened,XML这里不做介绍了,常用的就是以上3个。
2.修改AUDIT_TRAIL后,重启实例,然后指定审计的表和活动。
create table test_audit
(
col1
varchar2(10)
);
audit update on test_audit;
audit insert
on test_audit;
insert into test_audit(col1) values ('dfasd3424');
update test_audit t set t.col1 = '132rf';
commit;
select * from dba_common_audit_trail;
1 Standard Audit 19330 8 1
15-9月 -08 12.07.32.343000 上午
+08:00 PREMOBILE PAUL_XI\Administrator WORKGROUP\PAUL_XI 1416:4828 PAUL_XI 0
PREMOBILE
TEST_AUDIT 103 SESSION REC 05002F009C0A0000 0
0 NONE ------S--------- 2 Standard Audit 19353 33 1
15-9月 -08 10.21.02.328000 上午
+08:00 PREMOBILE PAUL_XI\Administrator WORKGROUP\PAUL_XI 1416:2348 PAUL_XI 0
PREMOBILE
TEST_AUDIT 103 SESSION REC 09000F00DA0A0000 0
0 NONE ------S---S-----
3.为审计使用系统级触发器(个人认为这个已经不是Audit审计功能,而仅仅是触发器)
创建数据库启动触发器
create table logon_audit
(
user_id
varchar2(30),
sess_id
number(10),
logon_time
date,
logoff_time
date,
host
varchar2(20)
);
create or replace trigger logon_audit_trig
after
logon
on
database
begin
insert into
logon_audit
values(user,sys_context('userenv','sessionid'),sysdate,null,sys_context('userenv','host'));
commit;
end;
select * from logon_audit;
1 PREMOBILE 19327 2008-9-14
23:51:22 WORKGROUP\PAUL_XI
2 PREMOBILE
19328 2008-9-14 23:51:35 WORKGROUP\PAUL_XI
3 SYSMAN 0
2008-9-14 23:49:44 PAUL_XI
4 SYSMAN 0
2008-9-14 23:50:49 PAUL_XI
原文出处:http://oracle.chinaitlab.com/induction/766299.html
审计分为三类1.语句审计(Statement
Auditing) => 对预先指定的某些SQL语句进行审计。
例如: AUDIT CREATE TABLE => 表明审查记录CREATE TABLE语句。
2.权限审计(Privilege
Auditing) => 对涉及某些权限的操作进行审计。
例如先赋予用户a查询权限: GRANT SELECT ANY
TABLE TO a;AUDIT SELECT ANY TABLE;
然后当用户a执行查询语句时:SELECT * FROM b.T 用到了SELECT 权限,所以此条语句会被记录。
有时候语句既是语句审计又是权限审计内容。如上面说到的CREATE TABLE。
3.对象审计(Object Auditing)
=> 审计作用在指定对象上的操作。
例如: AUDIT ALTER,DELETE,DROP ON a.T by b;
语句指定审定用户a的表,同时by指定只审定用户b发起的操作。
审计语句参数
1. By [Session | Access]
Session => 对每个会话中发生的重复操作只做一次记录。
Access => 每次操作都会被记录。
例子:
AUDIT
SELECT,UPDATE,INSERT,DELETE
ON a.T
BY SESSION
对所有a用户下的T表进行的独立操作都将被记录。
2.Whenever [not] sucessful
Sucessful => 操作成功才会被记录。
not Sucessful => 操作失败才会被记录。
NULL(不设置) => 该语句设置则不管成功与否都记录
例子:
AUDIT ADELETE ANY
TABLE
WHENEVER NOT SUCESSFUL;
对所有删除失败的动作进行记录。
启用审计的两个重要参数Audit_SYS_Operations =>
指定所有系统(sysdba,sysoper)用户的操作是否都被记录。默认为false。
内容记录在audit_file_dest指定的文件中。
Audit Trail =>
通过数据库初始文件init.ora参数中的AUDIT_TRAIL来启用和禁用审计。
有三个取值:
None => 默认,不做审计
DB => 将audit_trail 记录在数据库审计相关表中,aud$
OS => 将audit_trail
记录在操作系统文件中,文件目录地址由audit_file_dest指定
审计结果在数据库保存形式SYS.AUD$ 是唯一保留审计结果的表。其它的都是视图。
STMT_AUDIT_OPTION_MAP 包含有关审计选项类型代码的信息由SQL.BSQ 脚本在CREATEDATABASE
的时候创建
AUDIT_ACTIONS 包含对审计跟踪动作类型代码的说明
ALL_DEF_AUDIT_OPTS 包含默认对象审计选项。当创建对象时将应用这些选项
DBA_STMT_AUDIT_OPTS 描述由用户设置的跨系统的当前系统审计选项
DBA_PRIV_AUDIT_OPTS 描述由用户正在审计的跨系统的当前系统权限
DBA_OBJ_AUDIT_OPTS 描述在所有对象上的审计选项
USER_OBJ_AUDIT_OPTS USER
视图描述当前用户拥有的所有对象上的审计选项
以下是审计记录
DBA_AUDIT_TRAIL 列出所有审计跟踪条目
USER_AUDIT_TRAIL USER视图显示与当前用户有关的审计跟踪条目
DBA_AUDIT_OBJECT 包含系统中所有对象的审计跟踪记录
USER_AUDIT_
OBJECT USER
视图列出一些审计跟踪记录而这些记录涉及当前用户可以访问的对象的语句
DBA_AUDIT_SESSION 列出涉及CONNECT 和DISCONNECT 的所有审计跟踪记录
USER_AUDIT_ SESSION USER视图列出涉及当前用户的CONNECT 和DISCONNECT 的所有审计跟踪记录
DBA_AUDIT_STATEMENT 列出涉及数据库全部的GRANT REVOKE AUDIT NOAUDIT 和ALTER SYSTEM 语句的审计跟踪记录
USER_ AUDIT_ STATEMENT 对于USER 视图来说这些语句应是用户发布的
DBA_AUDIT_EXISTS 列出BY AUDIT NOT EXISTS 产生的审计跟踪条目
下面的视图用于细粒度审计
DBA_AUDIT_POLICIES 显示系统上的所有审计策略
DBA_FGA_AUDIT_TRAIL 列出基于值的审计的审计跟踪记录