[Oracle]审计Audit
1.Audit的概念
Audit是监视和记录用户对数据库进行的操作,以供DBA进行问题分析。利用Audit功能,可以完成以下任务:
- 监视和收集特定数据库活动的数据。例如管理员能够审计哪些表被更新,在某个时间点上有多少个并行用户统计数据;
- 保证用户对自己的活动负责。这些活动包括在特定模式、特定表、特定行等对象上进行的操作;
- 审计数据库中的可疑活动。如一个未经授权的用户正从表中删除数据,那么数据库管理员必须审计所有数据库连接,以及在数据库中所有成功和失败的删除操作。
根据审计类型不同,审计记录中的信息也有所不同。通常,一条审计记录中包含用户名、会话标识、终端标识、所操作的模式对象名称、执行的操作、执行的完整语句代码、日期和时间戳、所使用的系统权限。
2.Audit的分类
在oracle 11g中,一共有4种审计类型:
- 语句审计(Statement Auditing):对特定的SQL语句进行审计,不指定具体对象;
- 权限审计(Privilege Auditing):对特定的系统权限使用情况进行审计;
- 对象审计(Object Auditing):对特定的模式对象上执行的特定语句进行审计;
- 网络审计(Network Auditing):对网络协议错误与网络层内部错误进行审计。
此外,根据用户是否成功执行,可以分为对执行成功的语句进行审计、对不成功的语句进行审计、无论成功与否都进行审计。
根据对同一个语句审计次数不同,可以分为会话审计和存取审计。会话审计是指对某个用户或所有用户的同一语句只审计一次,形成一条审计记录;存取审计是指对某个用户或所有用户的同一语句每执行一次审计一次,形成多条审计记录。
3.审计环境设置
使用审计功能,需要对数据库初始化参数AUDIT_TRAIL进行设置,其参数值可以为:
- none:不启用审计功能;
- db:启用审计功能,审计信息写入sys.aud$数据字典中,审计的结果只有连接信息(sys用户的记录以及强制性要求的记录都写入操作系统文件中);
- db_extended:审计结果除了有连接信息,还有执行的具体语句。关于db与db_extended的区别,见例子1;
- os:启用审计功能,审计信息写入操作系统文件;
- xml:启用审计功能,审计信息写入xml格式的操作系统文件中;
查看是否启用了审计功能:
SQL> show parameter audit_trail NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
修改审计环境参数:
SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile; System altered SQL> shutdown immediate;
--
需要重启数据库 SQL> startup;
4.审计详解
4.1 语句审计(Statement auditing)
(1)语句审计是对特定的SQL语句进行审计,与具体的对象没有关系。创建语句审计的基本语法为:
sql_statement_
shortcut | ALL |
ALL STATEMENTS
[BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
解释:
- sql_statement_shortcut:被审计的SQL语句的快捷方式;
- ALL:审计大部分SQL语句,这里不在列出;
- ALL STATEMENT:对最高级别的SQL语句进行审计,即对直接执行的SQL语句进行审计,而不对包含在PL/SQL程序中的SQL语句进行审计;
- BY user_lists:指定审计的用户,如果不指定,则审计全部用户;
- IN SESSION CURRENT:只对当前会话进行审计;
- BY SESSION:会话审计,同一个SQL语句只审计一次;
- BY ACCESS:存取审计,同一个SQL语句执行几次就审计几次;
- WHENEVER SUCCESSFUL:只审计执行成功的SQL语句;
- WHENEVER NOT SUCCESS:只审计执行不成功的SQL语句;
(2)如果要取消对某个语句的审计,只需将AUDIT命令改为NOAUDIT命令即可,其语法与创建AUDIT相同。
(3)通过数据字典DBA_STMT_AUDIT_OPTS可以了解当前数据库哪些用户进行了语句审计及审计设置信息。例如,查看与scott用户相关的语句审计:
SQL> select * from dba_stmt_audit_opts where user_name='SCOTT'; USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE
--------- ----------- --------------- ---------- ----------
SCOTT TABLE BY ACCESS BY ACCESS
SCOTT INSERT TABLE BY ACCESS BY ACCESS
例子1.在scott模式下创建表test02,查看其审计信息。
查看audit_trace参数
SQL> show parameter audit_trail NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
step1.对scott用户创建语句审计
audit table
by scott
by access audit insert table
by scott
by access
step2.创建表test02,插入2行数据:
SQL> show user;
User is "SCOTT" SQL> create table test02
(
id number,
name varchar(40),
local varchar(50)
); Table created SQL> commit; Commit complete SQL> insert into test02
values(1,'lihua','chengdu'); SQL> insert into test02 values(2,'ll','dd'); 1 row inserted SQL> commit; Commit complete
step3.查看sys.aud$和sys.audit_actions视图
select
a.userid,
a.userhost,
a.terminal,
a.action#,
aa.name,
dbms_lob.substr(a.sqltext) as sqltext,
dbms_lob.substr(a.sqlbind) as sqlbind,
a.obj$creator,
a.obj$name,
a.ntimestamp#
from
sys.aud$ a,
sys.audit_actions aa
where
a.obj$name = 'TEST02'
and
a.action# = aa.action
and
a.ntimestamp# > to_date('','yyyymmdd');
结果为:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST02 2017/4/15 13:58:54
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 14:00:00
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 15:27:26
结合sys.aud$和sys.audit.actions,我们可与看到对数据库进行了create table和2次insert操作,但是我们还是不知道具体信息。接下来,我们将audit_trail参数改为:audit_trail = db_extended。
step4.修改audit_trail参数
SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile;
System altered SQL> shutdown immediate ;
SQL>startup; SQL> show parameter audit_trail NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB_EXTENDED
此时,再向test02表插入1行数据
SQL> insert into test02 values(3,'cc','vv');
1 row inserted SQL> commit;
Commit complete
step5.再次查看sys.aud$和sys.audit_actions视图
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST02 2017/4/15 13:58:54
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 14:00:00
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 15:27:26
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT insert into test02 values(3,'cc','vv') SCOTT TEST02 2017/4/15 16:31:53
可以看到,在SQLTEXT栏位有了具体的执行SQL语句。
4.2 权限审计
(1)权限审计是对特定的系统权限进行审计,语法为:
system_privilege |
[ALL PRIVILEGES] [BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
(2)如果要了解当前数据库中对哪些用户使用了什么权限审计,可以通过数据字典DBA_PRIV_AUDIT_OPTS来查看。
例子2.对scott用户的select any table权限进行审计
step1.查看scott的系统权限
SQL> select * from dba_sys_privs where grantee = 'SCOTT'; GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
SCOTT CREATE ANY TABLE NO
SCOTT UNLIMITED TABLESPACE NO
SCOTT CREATE ANY VIEW NO
step2.使用scott用户,在模式‘LIJIAMAN’下创建表test03,查询其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------ ------------------------- --------------- ---------- ------------ ---------------------------- -------- ------------ --------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE create table lijiaman.test03 LIJIAMAN TEST03 2017/4/15 19:08:20
(
id number,
name varchar(20)
)
step3.使用scott用户,在scott下创建表test05,查询其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ---------- --------------- -------------------- --------- ------------ ---------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST05 2017/4/15 19:38:24
create table test05
(
id number,
name varchar(30)
)
通过这个这个例子,我们可以看到,只要scott用户使用select any table权限,我们就可以通过审计得到其操作信息。
4.3 对象审计
(1)对象审计是指对特定模式对象的操作进行审计,与用户无关,语法为:
sql_operation |
ALL ON [schema.]object] [BY user_lists] | [IN SESSION CURRENT][BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
其中,sql_operation指定了特定对象上要审计的SQL语句。
(2)如果要查看当前数据库哪些模式对象进行了对象审计,可以通过查询DBA_OBJ_AUDIT_OPTS获得。
例子3.对模式scott下的表dept进行对象审计
SQL> audit all on scott.dept by session; Audit succeeded
查看其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
---------------- -------------------------- ---------------- ---------- ----------- ---------------------------------- -------- ------------ ---------- ------------------
LIJIAMAN WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 103 SESSION REC select * from scott.dept SCOTT DEPT 2017/4/15 20:13:47
LIJIAMAN WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 103 SESSION REC audit all on scott.dept by session SCOTT DEPT 2017/4/15 20:13:19
4.4 网络审计
网络审计对协议错误与网络层内部错误进行审计,网络审计捕获客户端与服务器通信过程中发生的错误,这些错误由SQL*NET网络服务抛出。网络审计的语法为:
AUDIT NETWORK
[BY SESSION | ACCESS]
[WHENEVER [NOT] SUCCESSFUL]
================================================================
2019年1月2日补充:
(1)如何关闭默认的login、logoff审计
在11g默认审计中,Oracle会去审计用户的登入登出操作。如果用户登入登出操作很多,那么sys.aud$表会非常的大。我的1个生产数据库由于没有关闭对登入登出的审计,导致积累了16GB的审计数据。在一个平时不怎么使用的测试库里面,登入登出的审计信息也非常的多。
select a.action#,b.name,count(*) as counter
from sys.aud$ a,
sys.audit_actions b
where a.action# = b.action
group by a.action#,b.name
order by counter desc

如何关闭呢,可以使用sql语句来关闭
SQL> noaudit session;
[Oracle]审计Audit的更多相关文章
- [转]ORACLE 审计功能
审计是对选定的用户动作的监控和记录,通常用于: u 审查可疑的活动.例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不 ...
- oracle审计详解-转
http://blog.chinaunix.net/u2/66903/showart_2082884.htmlOracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这 ...
- 转-利用Oracle审计功能来监测试环境的变化
http://blog.csdn.net/luowangjun/article/details/5627102利用Oracle审计功能来监测试环境的变化 做过测试的人都应该会碰到这样的情况:测试发现的 ...
- 转--Oracle 审计和测试操作
http://blog.itpub.net/21605631/viewspace-759640/转 Oracle 审计和测试操作 :: 分类: Linux 1.1 相关参数 AUDIT_SYS_OPE ...
- [转]oracle审计详解
http://blog.chinaunix.net/u2/66903/showart_2082884.html Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用 ...
- oracle 审计功能
Oracle 11g推出了审计功能,但这个功能会针对很多操作都产生审计文件.aud,日积月累下来这些文件也很多,默认情况下,系统为了节省资源,减少I/0操作,其审计功能是关闭的 一.审计功能关闭 1. ...
- Oracle审计策略例子
首先确保Oracle初始化参数audit_trail值为DB或OS,通过“show parameter audit_trail:”查看. 1 语句审计 audit table by test by a ...
- oracle审计的激活与取消
审计audit用户见识用户所执行的操作,并且oracle会将审计跟踪结果存放到os文件或数据库中 激活审计 conn /as sysdba show parameter audit_sys_opera ...
- ORACLE审计小结
ORACLE审计小结 1.什么是审计 审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/$ORACLE_ ...
随机推荐
- 项目架构开发:数据访问层之Repository
接上文 项目架构开发:数据访问层之Logger 本章我们继续IRepository开发,这个仓储与领域模式里边的仓储有区别,更像一个工具类,也就是有些园友说的“伪仓储”, 这个仓储只实现单表的CURD ...
- 循环神经网络(RNN)模型与前向反向传播算法
在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...
- hdoj 1231 最大连续子列和
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- C++:基础篇-32位和64位系统区别及字节数
今儿面试了一个刚刚毕业的,但是不知道一个int.long.double这几个都是多少位,我给你们总结一下哈: 常用数据类型对应字节数 可用如sizeof(char),sizeof(char*)等得出 ...
- TP框架 基础1
php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...
- Java使用Schema模式对XML验证
XML允许创作者定义自己的标签,因其灵活的特性让其难以编写和解析.因此必须使用某种模式来约束其结构.目前最流行的这种模式有两种:DTD和SCHEMA,而后者以其独特的优势即将取代DTD模式,目前只是过 ...
- 经典网络还是VPC,开发者作何选择?
近两天,关于公有云经典网络(基础网络)与私有网络(VPC)的讨论引发技术圈极大关注,事件起因于有开发者将数据库限制在内网访问,但由于安全组设置的原因,阿里云邻居用户被黑后,牵连到了自己的业务.为此,开 ...
- appium初学者,使用之检查appium环境报错Could not detect Mac OS X Version from sw_vers output: '10.12.1’,
这个问题存在的原因就是appium不兼容最新的mac10.12版本. 由于10.12是最新mac版本,appium1.5.3并未提供支持,所以: 在终端输入grep -rl "Could n ...
- 模仿Wireshark网络抓包工具实现---c++
最近在用Wireshark抓包工具的时候,老感觉这东西用起来很简单,功能强大,所以想了解他的实现原理,我就自己好奇写了一个实现基本功能的demo吧. 其实叫抓包工具,其实就是抓取流经自己网卡的所有ip ...
- 3891: [Usaco2014 Dec]Piggy Back
3891: [Usaco2014 Dec]Piggy Back Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 116 Solved: 92[Subm ...