(默认位置为$ ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的
SYS.AUD$表中,可通过视图 dba_audit_trail查看)中。默认情况下审计是没有开启的。
强制审计:不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:
用管理员权限连接Instance;启动数据库;关闭数据库。
和审计相关的两个主要参数:
1.audit_sys_operations:默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)
的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,
那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的
事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
2.audit_trail:None:是10g默认值,不做审计;11g默认值DB,将审计结果记录到aud$表中;
审计:
.1 强制性审计
启停数据库等动作,都记录在了 alert 日志中,这些就是强制审计,是 oracle 自动开启的。
.2 标准数据库审计
show parameter audit_trail
.3 基于值审计
这个是通过我们自己编写的触发器来完成的。
.4 细粒度审计 (FGA)
可以针对某一列进行更细致的审计
.5 DBA 审计
安全管理员对 DBA 的审计
标准数据库审计
- 审计语法:
audit sql_statement_clause by {session | access} whenever [not]
successful;
by session,在一个会话中,同类型的操作只审计一条
by access,每个符合审计的操作全部审计
- 审计相关参数( audit_trail):
audit_trail = { none | os | db [,
extended] | xml [, extended] }
none: 10g 默认值,不做审计;
os:将 audit trail 记录在操作系统文件中,文件名由 audit_file_dest 参数指定;
db: 11g 默认值,将审计结果记录到 aud$表中;
db,extended:将审计结果记录到 aud$表中,同时包括绑定变量及 CLOB 字段;
xml:记录 OS 文件的是 XML 格式的审计记录;
xml,extended:记录OS 文件的是 XML 格式的审计记录,同时包括绑定变量及 CLOB 字段。
oracle10g:默认审计参数为 NONE,即未开启
Oracle11g:默认审计参数为 DB
实验开始:
——查看审计是否开启: (DB表示为11g默认参数)
SYS@ORA11GR2>show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------------------
audit_trail string DB
注:存储审计信息的表( aud$)的默认表空间为 system, system 表空间是不建议用的,所以最好为表aud$单独创建一个表空间用于存储审计数据。
——验证:
SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
AUD$ SYSTEM
1) 创建 ts_audit 表空间,用于存储审计信息
SYS@ORA11GR2>create tablespace ts_audit datafile '/u01/app/oracle/oradata/ORA11GR2/ts_audit_01.dbf' size 10m autoextend on next 10m;
Tablespace created.
2) 将存储审计信息的表 move 到 ts_audit 表空间
SYS@ORA11GR2>alter table aud$ move tablespace ts_audit;
Table altered.
——验证:
SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
AUD$ TS_AUDIT
【考虑将 aud$中 clob 字段单独存储一个表空间,如下
alter table sys.aud$ move lob(sqlbind) store as( tablespace USERS);
alter table sys.aud$ move lob(SQLTEXT) store as( tablespace USERS);
oracle10g 中,还可以考虑将索引 move 一个新的表空间, oracle11g 中 aud$表已无索引
alter index sys.I_AUD1 rebuild tablespace users;】
3) 查看审计参数并对其修改,改为存储到数据库并记录绑定变量
--查看当前数据库中参数 audit_trail 的值
SYS@ORA11GR2>show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
--修改为审计记录保存到数据库中并且包含 clob 字段
SYS@ORA11GR2>alter system set audit_trail=db,extended scope=spfile;
System altered.
SYS@ORA11GR2>startup force;
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 830930944 bytes
Fixed Size 2257800 bytes
Variable Size 503319672 bytes
Database Buffers 322961408 bytes
Redo Buffers 2392064 bytes
Database mounted.
Database opened.
——验证:
SYS@ORA11GR2>show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB, EXTENDED
4) 登录 scott 用户,创建 t 表并开启 update 审计,使用 by access 子句,每次 update 都审计
SCOTT@ORA11GR2>create table t(x int);
Table created.
SCOTT@ORA11GR2>insert into t values(9);
1 row created.
SCOTT@ORA11GR2>commit;
Commit complete.
——在scott用户下对t表进行access级别的审计
SCOTT@ORA11GR2>audit update on t by access; 表示对t表的每次更新操作进行审计
(by access,每个符合审计的操作全部审计;by session,在一个会话中,同类型的操作只审计一条)
Audit succeeded.
5) 使用绑定变量的 sql 进行 update 测试
SCOTT@ORA11GR2>var v_num number;
SCOTT@ORA11GR2>exec :v_num:=1000; (:v_num绑定变量,:v_num:=给绑定变量授予一个值)
PL/SQL procedure successfully completed.
SCOTT@ORA11GR2>update t set x=:v_num;
1 row updated.
SCOTT@ORA11GR2>commit;
Commit complete.
6) 返回 sys 账户,验证结果
SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text='update t set x=:v_num';
USERNAME SQL_TEXT SQL_BIND
---------- ------------------------- ---------------
SCOTT update t set x=:v_num #1(4):1000
7) 另: sql 语句中“&变量”非绑定变量,在审计表中也可以清晰的看出来
SYS@ORA11GR2>conn scott/tiger
Connected.
SCOTT@ORA11GR2>select * from t;
X
----------
1000
SCOTT@ORA11GR2>update t set x=&val;
Enter value for val: 9
old 1: update t set x=&val
new 1: update t set x=9
1 row updated.
SCOTT@ORA11GR2>commit;
Commit complete.
——查看:
SCOTT@ORA11GR2>conn / as sysdba
SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text like 'update t set x=%';
USERNAME SQL_TEXT SQL_BIND
---------- ------------------------- ---------------
SCOTT update t set x=:v_num #1(4):1000
SCOTT update t set x=9
8) 取消审计(取消语句无需写 by access 子句)
SYS@ORA11GR2>conn scott/tiger
Connected.
SCOTT@ORA11GR2>noaudit update on t;
Noaudit succeeded.
实验结束!!!!!!!!