转载于:
http://blog.itpub.net/9399028/viewspace-712457/
https://blog.csdn.net/Hehuyi_In/article/details/100765237
1.审计概述
审计audit用于监视用户所执行的数据库操作,审计记录存放在数据字典表(称为审计记录,存放在system表空间中的SYS.AUD$)中,或者系统审计记录中
(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/),不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:用管理员权限连接Instance;启动数据库;关闭数据库。
2.和审计相关的参数以及默认值
2.1.参数默认值
11g:
SQL> show parameter audit
audit_file_dest string /u01/app/oracle/admin/single/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string DB
12c:
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/orcl/adu
mp
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB
unified_audit_sga_queue_size integer 1048576
2.2.参数的详细介绍
2.2.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.1我们自己的测试环境中的参数中可以看到,audit_sys_operations11g中默认为false,12c中默认为true。
2.2.2.audit_trail
AUDIT_TRAIL = { none | os | db | db,extended | xml | xml,extended }
none or false - Auditing is disabled. 是默认值,不做审计;
db or true - Auditing is enabled, with all audit records stored in the database audit trial (SYS.AUD$). 将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;
db,extended - As db, but the SQL_BIND and SQL_TEXT columns are also populated. 审计结果里面除了连接信息还包含了当时执行的具体语句;
xml- Auditing is enabled, with all audit records stored as XML format OS files. 10g里新增的。
xml,extended - As xml, but the SQL_BIND and SQL_TEXT columns are also populated. 10g里新增的。
os- Auditing is enabled, with all audit records directed to the operating system's audit trail. 将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;
注:这两个参数是static参数,需要重新启动数据库才能生效。
当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
1、 Statement(语句审计)
对某种类型的SQL语句审计,不指定结构或对象。比如audit table 会审计数据库中所有的create table、drop table、truncate table语句,alter session by cmy会审计cmy用户所有的数据库连接。
2、 Privilege(权限审计)
当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户a 访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。
注意:用户是自己表的所有者,所以用户访问自己的表不会被审计。
3 、 Object(对象审计)
对一特殊模式对象上的指定语句的审计。 如审计on关键字指定对象的相关操作,如aduit alter, delete, drop, insert on cmy.t by scott; 这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。
注意:Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;后,对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,相比 trigger 可以对schema的DDL进行“审计”,这个功能稍显不足。
审计的一些其他选项:
1、by access / by session
by access 每一个被审计的操作都会生成一条audit trail。
by session 一个会话里面同类型的操作只会生成一条audit trail,默认为by session。
2、whenever [not] successful
whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计,
whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计。
和审计相关的视图
1、dba_audit_trail
保存所有的audit trail,实际上它只是一个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一个子集。
2、dba_stmt_audit_opts
可以用来查看statement审计级别的audit options,即数据库设置过哪些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似。
3、all_def_audit_opts
用来查看数据库用on default子句设置了哪些默认对象审计。
取消审计
将对应审计语句的 audit 改为noaudit即可。如audit session whenever successful;取消审计noaudit session whenever successful;
3.12c中的审计
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/orcl/adu
mp
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB
unified_audit_sga_queue_size integer 1048576
12C中的审计:UNIFIED_AUDIT_TRAIL 视图中统一查看。
我们查审计的几种情况:
1.查某个用户的增删查改操作
这个是查不到的,查这个有两个条件:
audit_trail 的值为DB,EXTENDED
而且创建用户之后要开启审计:
AUDIT SELECT,UPDATE,DELETE,INSERT TABLE BY 账号名 BY ACCESS;
下面为查询语句:(用于查询某个账号增删查改的具体信息)
set line 32767
col sqltext for a1000
col who for a20
col belong for a10
col table for a30
col where for a20
col time for a20
set long 99999
set pages 9000
select /*+ parallel(a,8) (b,8)*/ USERID "whos",TERMINAL "wheres",a.obj$creator "belong",a.obj$name "table",to_char(a.NTIMESTAMP#,'YYYY-MM-DD HH24:MI:SS') "time",b.name "type||",a.sqltext from sys.aud$ a,audit_actions b
where a.obj$creator not like '%SYS%' and a.USERID not like '%SYS%'
and a.action# in(2,3,6,7)
and a.action#=b.ACTION
order by to_char(a.NTIMESTAMP#,'YYYY-MM-DD HH24:MI:SS')
;
2.查询某个用户的登录信息
alter session force parallel query pallel 4;
set long 49000
set line 200 pagesize 10000
col userid for a20
col userhost for a20
col comment$text for a40
select sessionid,userid,userhost,comment$text,to_char(a.NTIMESTAMP#+1/3,'YYYY-MM-DD HH24:MI:SS') from sys.aud$ a where userid='HISUSER' and to_char(a.NTIMESTAMP#+1/3,'YYYY-MM-DD HH24:MI:SS') between '2019-10-01 00:00:00' and '2019-11-11 00:00:00' order by NTIMESTAMP# desc;
3.12c默认可以查到语句吗?
set long 49000
set line 200 pagesize 10000
col CLIENT_PROGRAM_NAME for a20
col XS_USER_NAME for a20
col ACTION_NAME for a20
col OBJECT_SCHEMA for a20
col sql_text for a40
select USERHOST,CLIENT_PROGRAM_NAME,XS_USER_NAME,ACTION_NAME,OBJECT_SCHEMA,sql_text,EVENT_TIMESTAMP from UNIFIED_AUDIT_TRAIL;
我们通过测试可以看出,12c默认可以看到审计语句。
4.结论
11g默认审计连接,不审计sql,如果要审计sql操作,需要修改参数和创建用户的时候开启审计。
12c默认选项就可以查到sql语句。