2011年11月9日水曜日

[有待整理] Oracle 审计

1 查看当前审计设置

sqlplus / as sysdba
show parameter audit

NAME                       TYPE                                  VALUE
---------------------- -------- ---------------------------------------------
audit_file_dest        string    /usr/lib/oracle/xe/app/oracle/admin/XE/adump
audit_sys_operations   boolean   FALSE
audit_syslog_level     string
audit_trail            string    DB_EXTENDED

audit_file_dest : 审计文件位置
audit_trail : 指定审计的类型:
  none : 默认, 不进行审计
  DB : 审计结果放在数据库表中 (aud$), 通常只记录连接的信息
  DB_EXTENDED : 审计结果放在数据库表中, 记录具体执行语句
  OS : 审计结果记录在操作系统文件中, 文件位置由 audit_file_dest 参数指定 (windows 系统中将直接在事件查看器的系统日志中记录)
  XML:审计结果记录在 audit_file_dest 指定位置下的 XML 文件中
audit_sys_operations : 是否对 sysdba 用户做审计, 关于 sysdba 用户审计的结果, linux (audit_file_dest), windows (事件查看器的系统日志)

2 审计级别
statement : 按语句来审计, 如 audit table xxx
privilege : 按权限来审计, 如 audit select any table
object : 按对象来审计, 如 audit all on hr.employees by hr (只会对 hr 用户对 employees 表执行的操作做审计)

3 审计的其它相关选项
by access : 每个被审计的操作都会生成一条记录
by session : 每个会话里同类型操作只会生成一条记录 (默认值)
whenever successful : 操作成功才审计
whenever not successful : 操作失败才审计

4 查询审计结果的视图
dba_audit_trail : 查看所有的普通审计记录
dba_fga_audit_trail : 查看所有细粒度审计记录
sys.aud$ : 审计结果实际存放的系统表

5 取消审计
noaudit select any table

6 开启审计
6-1 设置审计类型并重启数据库
alter system set audit_trail = db_extended scope=spfile;

6-2 审计用户对表操作
SQL> audit table;

6-3 切换用户后执行操作
conn go/go
create table t (a int);

6-4 管理员登录查看审计结果
conn / as sysdba
select username, sql_text from dba_audit_trail;

6-5 审计系统管理员操作
alter system set audit_sys_operations = true scope=spfile;
conn / as sysdba
create table t (a int);

6-6 查看系统管理员审计结果 (audit file)





dml 语句不 commit 也会被审计, 即使是 rollback 也会将审计结果保留下来

0 件のコメント:

コメントを投稿