oracle数据库审计

简介:

一、何谓数据库审计
数据库审计,就是对数据库的活动做跟踪记录,主要包括数据库连接,SQL语句执行,数据库对象访问这些方面的跟踪记录。
 
二、审记记录的存储方式
分为两种:一种是存储在操作系统文件中,一种是存储在system表空间中的SYS.AUD$表中。
 
三、对数据库性能影响的考虑
审计必然需要占用CPU,因此,需要综合平衡审计需求与性能之间的平衡性问题,以确定出最好的审许策略。
 
四、审记结果中包含哪些信息
前面讲到审许结果的存储分数据库存储和文件存储两种方式。对于数据库存储的情况,SYS.AUD$表中包含以下信息:
1)        ·操作系统用户名
2)        ·数据库用户名
3)        ·连接会话标识
4)        ·终端标识
5)        ·被访问的schema对象名
6)        ·尝试的操作
7)        ·操作的完整代码
8)        ·日期和时间戳
 
若审计记录存储在外部操作文件中,则该文件可能包含以下信息:
1)         ·操作系统产生的审计记录
2)         ·数据库的审计记录
3)         ·被审计到的数据库操作
4)         ·超级管理员(SYS)的审计记录
其中,被写到文件中的审计记录是以编码的方式存储的,如果要理解这些编码所对应的信息,可以查询以下数据字典表:
编码信息数据字典表
-------------------------------
数据库操作代码表示尝试的操作。它的相关描述可以从数据字典表AUDIT_ACTIONS表中查询到
操作所使用的权限可以在字典表SYSTEM_PRIVILEGE_MAP中查询到对应的说明
完整的操作代码操作成功时将返回0,失败时返回相关oracle错误信息,错误信息码所对应的说明可以从oracle官方文档中获得
--------------------------------
 
五、缺省的审计
不论当前是否已经开启的审计功能,数据库都会把一些数据库相关的操作写入外部审计文件中(注意:不是写入SYS.AUD$表),这些被缺省审计的操作是:
1)         ·以超级管理员权限对数据库的连接(connect AS SYSDBA或connect AS SYSOPER)
2)         ·数据库启动
3)         ·数据库停止
 
六、对超级管理员用户的操作行为的审计
超 级管理员用户指的是以AS SYSDBA或AS SYSOPER方式连接数据库的用户。初始化参数AUDIT_SYS_OPERATIONS用来指定是超级管理员的审计选项,如果将 AUDIT_SYS_OPERATIONS设置为TRUE,那么所有超级管理员的操作都将被审计,而不管当前是否有开启审计功能,而且所有的审计信息都被 写入外部审计文件中(注意:不是写入SYS.AUD$表)。
 
七、执行审计
1.设定审计记录的存放位置
初始化参数AUDIT_TRAIL指定了审计记录的存放位置,该参数有三个取值:
1)         ·DB审计记录存放在数据库的SYS.AUD$表中
2)         ·OS审计记录存放在外部的操作系统文件中
3)         ·NONE关闭审计(缺省值)
初始化参数AUDIT_FILE_DEST指定了当审外部审记文件目标存储路径,其缺省值是$ORACLE_HOME/rdbms/audit
2.审计选项
这个审计选项指的是执行审计的AUDIT语句的可选项。AUDIT语句的语法请参考oracle官方SQL参考。
 
3.以实例说明审计
a.审计某用户的会话的创建与结束
AUDIT SESSION BY scott,fey;
b.审计所有用户的会话的创建与结束
AUDIT SESSION;
c.审计删除表的操作
AUDIT DELETE ANY TABLE;
c.审计删除表的操作(限制:只审计删除失败的情况)
AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL;
d.审计删除表的操作(限制:只审计删除成功的情况)
AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL;
e.审计删除表的操作(限制:同一个会话中相同的操作语句只审计一次)
AUDIT DELETE ANY TABLE BY SESSION;
(注:对于这种情况,如果审计记录被设定为存储在外部文件中时,这个效果是体现不出来的,因为oracle无法判断是否已经审计过相同的操作语句。)
f.审计删除表的操作(限制:每支删除语句都审计,不论同一会话中是否有多条相同的操作语句)
AUDIT DELETE ANY TABLE BY ACCESS;
g.审计对fey.employee表的delete操作
AUDIT DELETE ON fey.employee;
h.审计对fey.employee表的delete、updet、insert操作
AUDIT DELETE,UPDATE,INSERT ON fey.employee;
 
八、停止审计
停止审计使用NOAUDIT语句,该语句的语法请参考oracle官方SQL参考。下面以实例说明NOAUDIT的使用:
a.停止所有对会话的创建与结束的审计
NOAUDIT SESSION;
b.停止对用户fey,scott的会话的创建与结束的审计
NOAUDIT SESSION BY fey,scott;
c.停止审计删除表的操作
NOAUDIT DELETE ANY TABLE;
c.停止审计删除表的操作(限制:停止审计删除失败的情况)
NOAUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL;
d.停止审计删除表的操作(限制:停止审计删除成功的情况)
NOAUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL;
g.停止审计对fey.employee表的delete操作
NOAUDIT DELETE ON fey.employee;
h.停止审计对fey.employee表的delete、updet、insert操作
NOAUDIT DELETE,UPDATE,INSERT ON fey.employee;
 
九、对审计记录表SYS.AUD$的管理
当 SYS.AUD$表的审计记录越来越多的时候,以至达到存储极限时,会因为审计记录无法写入而产生错误。或许我还也需要对该表的数据进行一些转储或者碎片 的整理,或是删除一些我们认为不再需要的审计记录。这些都是要考虑的事情。下面给出一个对该表进行存储碎片的整理的一个方法:
a.将该表的数据select into到另一个表中,或利用export导出到外部文件
b.truncate这张表(要以超级管理员登录才行)
c.再将原先转储的数据再加载进来。
 
也许我们需要对针对SYS.AUD$表的操作进行审计,如:AUDIT INSERT,UPDATE,DELETE ON sys.aud$ BY ACCESS;
 
十、Fine-Grained审计
如 前面所述,审计的记录中并没有含操作所作用的数据,比如说,需要审计针对一个表的select,而且需要在审计记录中包含select语句所返回的数据。 这时,就需要用到Fine-Grained审计。Fine-Grained审计是基于oracle的事件,其原理是在insert,update或 delete相关的事件中截取相关的数据。属于orale程序开发的范畴。具体可以参考相关oracle文檔。
 
十一、审计相关的数据字典视图
执行审计的普通信息:

STMT_AUDIT_OPTION_MAP  映射审计选项项类型为代码
AUDIT_ACTIONS 映射审计跟踪操作类型为代码
DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL  和用户相关的审计跟踪内容

语句审计信息:

DBA_STMT_AUDIT_OPTS 贯穿整个系统和用户的,当前系统审计选项的信息
DBA_AUDIT_SESSION 审计连接和断开连接的内容
USER_AUDIT_SESSION 审计用户的连接和断开连接的内容
DBA_AUDIT_STATEMENT 语句审计,审计带有grant,revoke,audit,noaudit,alter system命令的内容
USER_AUDIT_STATEMENT 审计用户使用的语句内容
DBA_AUDIT_EXISTS 审计通过audit exists 命令创建的内容

特权审计:

DBA_PRIV_AUDIT_OPTS 

对象审计:


DBA_OBJ_AUDIT_OPTS 用于所有表和视图的审计选项
USER_OBJ_AUDIT_OPTS 用于某个拥有者的表和视图的审计选项
DBA_AUDIT_OBJECT 系统中所有对象的审计记录
USER_AUDIT_OBJECT 用于审计跟踪涉及用户拥有的对象的语句记录
ALL_DEF_AUDIT_OPTS 用于所创建的对象的默认审计选项 
DBA_AUDIT_POLICIES
DBA_FGA_AUDIT_TRAIL
 
各视图的详细说明请参考oracle官方参考手册

eg:Audit oracle user login not successful

编辑pfile,enable "audit_trail" 参数:
AUDIT_TRAIL = TRUE
该参数设为TRUE 等同于AUDIT_TRAIL = DB
以该pfile启动DB,并设定以下audit参数:
SQL> AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL;
然后通过查询AUD$来查看当前login失败的状态:
 SQL> select statement,timestamp#,userid,userhost,terminal,spare1,COMMENT$TEXT from aud$;

因为在oracle 10g中 对default的profile里就对FAILED_LOGIN_ATTEMPTS选项设定成10,也就是说,若尝试密码输入10次后就会将该用户 LOCK住,正因为这种情况,若不对这种情况做audit,会造成一些较为严重的后果,比如,尝试者最终未得到密码,但DB端用户被锁,应用亦连接不过 来,整个一套系统无法运行。
以下进行测试库上一个用户的密码测试,我们进行10次错误密码输入:
SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked


SQL> conn bbhr/password
ERROR:
ORA-28000: the account is locked

然后对aud$表进行查看:
SQL>  select statement,timestamp#,userid,userhost,terminal from aud$;

 STATEMENT TIMESTAMP#          USERID     USERHOST   TERMINAL
---------- ------------------- ---------- ---------- ----------
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1
         1                     BBHR       dbtest     pts/1

10 rows selected.










本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/742949,如需转载请自行联系原作者

目录
相关文章
|
17天前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。
|
2月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
545 28
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
108 9
|
3月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
150 10
|
3月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回查询
本文介绍了Oracle数据库的闪回查询(Flashback Query)功能及其实际应用。闪回查询通过`AS OF`子句,结合时间戳或SCN号,可查询历史数据状态,帮助分析数据差异。文中通过具体示例演示了如何使用闪回查询:创建测试表、记录当前SCN号、更新数据并提交事务,最后通过闪回查询获取历史数据。附带的视频和代码块详细展示了操作步骤与结果。
129 4
|
3月前
|
Oracle 关系型数据库 网络安全
崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB
文章是作者小草对崖山异构数据库迁移利器 YMP 的初体验分享,包括背景、YMP 简介、体验环境说明、YMP 部署(含安装前准备、安装、卸载、启动与停止)、数据迁移及遇到的问题与解决过程。重点介绍了 YMP 功能、部署的诸多细节和数据迁移流程,还提到了安装和迁移中遇到的问题及解决办法。
|
3月前
|
Oracle 关系型数据库 数据管理
【赵渝强老师】Oracle数据库的闪回技术
在Oracle数据库操作中,难免会遇到误删表或提交错误事务等问题,可能导致数据丢失甚至数据库停止运行。传统解决方法依赖备份恢复,但需提前准备正确备份。为此,Oracle提供了闪回技术,无需备份即可快速恢复数据。它支持7种类型的操作,如闪回查询、版本查询、表恢复等,能有效应对逻辑损坏和用户错误。闪回技术基于还原(undo)数据管理,启用自动管理后可实现高效恢复。
120 0
|
3月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle数据库的客户端工具
本文介绍了Oracle数据库的三种客户端工具:SQL*Plus、Oracle Enterprise Manager Database Express(EM)和SQL Developer的使用方法。首先通过命令行工具SQL*Plus登录数据库,创建用户并授权,建立部门与员工表,插入数据并查询;接着讲解了如何通过浏览器访问EM界面监控数据库及表空间状态;最后演示了SQL Developer的下载安装、连接配置以及执行查询的过程,帮助用户快速上手Oracle数据库管理与操作。
|
6月前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
348 11

推荐镜像

更多