Oracle审计
1.什么是审计
审计是用来监控和记录用户的数据库操作的
2.未开启审计
即使未开启审计,Oracle数据库也会将以下三种操作记录在OS的$ORACLE_BASE/admin/$ORACLE_SID/adump/
- 以sysdba或者sysoper等管理员用户连接数据库实例(不管实例是否打开)
- 关闭数据库操作
- 打开数据库操作
3.标准审计
3.1.数据库参数
-
audit_file_dest
OS中审计信息存放位置
-
audit_sys_operations
默认值为FALSE,即不审计,修改后需要重启数据库
审计sys(或者以sysdba,sysoper身份登录)用户的所有操作(查询表,更新表等等)
审计信息放在OS中
-
audit_trail
none:关闭标准审计,11G之前的默认值
db:将审计信息记录在数据库中(sys.aud$),只包含连接信息(LOGON,LOGOFF),但不包含以sysdba或者sysoper连接的信息(记录在OS中)
db,extended:将审计信息记录在数据库中,同时包含执行的SQL以及绑定变量
os:将审计信息记录在OS中
xml:以XML的形式将审计信息记录在OS中
xml,extended:以XML的形式将审计信息记录在OS中,同时记录执行的SQL以及绑定变量
3.2.审计级别
3.1节中,audit_trail为db,extended或者xml,extended时,可以记录额外的SQL信息,前提是开启了语句,权限或者对象审计
-
语句级别
对某种类型的SQL语句进行审计但并不包含具体的对象
-
权限级别
任何使用了这个权限的都会被审计
-
对象级别
对数据库对象进行审计
3.3.审计用SQL
/*语句级别*/
-- 审计所有对表的操作,例如修改,创建,删除表
audit table;
-- 取消审计
noaudit table;
/*权限级别*/
-- 审计所有使用此权限的操作
audit select any table;
-- 取消审计
noaudit select any table;
/*对象级别*/
-- 审计某个表增删改查的操作
aduit select,update,insert,delete on monkey.test;
-- 取消审计
noaudit select,update,insert,delete on monkey.test;
/*通用部分*/
by access --每一个被审计的操作都会生成一条audit trail
by session --一个会话里面同类型的操作只会生成一条audit trail,默认为by session
whenever successful --操作成功才审计
whenever not successful --操作失败才审计
3.4.标准审计相关视图
-
DBA_OBJ_AUDIT_OPTS
对象级别标准审计的策略
-
DBA_STMT_AUDIT_OPTS
语句级别标准审计的策略
-
DBA_PRIV_AUDIT_OPTS
权限级别标准审计策略
-
DBA_AUDIT_OBJECT
对象级别标准审计记录
-
DBA_AUDIT_STATEMENT
语句级别标准审计记录
-
DBA_AUDIT_SESSION
登录登出标准审计记录(普通用户,以SYSDBA或者SYSOPER的用户不记录)
-
DBA_AUDIT_TRAIL
所有的标准审计记录
4.精细审计
FGA(fine grained auditing),可以指定更加精细的审计策略
参考:FGA审计