Oracle提供了审计工具,用于跟踪、记录、统计数据库活动的方方面面!——sqlserver似乎还没有该功能!
Oracle的审计功能三大类
- 利用初始化参数控制的:数据库内置审计
- 利用dbms_fga提供的:表、视图的精细审计
- 利用触发器实现的:强大、复杂、灵活的 应用审计
下面介绍数据库内置审计功能
默认情况下:oracle不启用数据库审计功能。Oracle只记录数据库的基本活动,可以通过windows的事件查看器查看审计记录聊——这时候所提供的信息是一般的windows服务所必须提供的信息。没有oracle的主动审计工作在里面。(这时候的oracle把基本活动记录在想关的日志中:错误、跟踪、后台、用户等)
- audit_sys_operations={false(默认:不启用特权用户的审计)|true}
- audit_trail={none(默认:不启用普通用户的审计)|os|db|db_extended|xml|xml_extended}
设置审计audit:需要audit system、audit any权限。
- audit {all | sqlstatment....} [by {all users | user....| proxy....}] [by {session | access}] [whenever { all | successful | not successful}]
- audit {all privileges | role.... | system_privileges....} [by {all users | user....| proxy....}] [by {session | access}] [whenever { all | successful | not successful}]
- audit {all | object_options....} on { default | directory directory_name | [schema.] object} [by {session | access}] [whenever { all | successful | not successful}]
- audit network [by {session | access}] [whenever { all | successful | not successful}]
- 注意:只有对象审计是立即生效的,其他的审计只对将来的会话生效!
停止审计noaudit:权限需求同audit ,定义形式相同——除了没有 [by {session | access}] 子定义
注意:noaudit必须和也只能取消之前定义完全相同的audit语句,并不会取消所有或指定的类,其他的audit会继续进行
审计推荐
- by access 可以审计每一次执行,对于dml来说:by session 对同一会话内相同的dml语句只记录一次审计记录是不合适的!
- by user 可以只审计某个、某些用户的,比较实用
查询审计信息:dba_audit_trail字典表。审计纪律记录在sys.aud$fixed表里,可以通过查询dba_audit_trail数据字典表获取信息
- dba_audit_xxx:审核的记录细节信息
- dba_stmt_audit_opts:语句审核设置
- dba_priv_audit_opts:权限审核设置
- dba_obj_audit_opts:对象审核设置