热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle中开启一张表的审计

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

Oracle使用audit_trail参数控制审计是否启用
audit_trail的参数有下面几种:
NONE:不开启审计
OS:说明审计信息放在系统汇总,如果是Linux那么由audit_file_dest决定,如果是Windows 那么由事件查看器决定
DB 或 TRUE :表示审计信息存放在数据库里,也就是sys 用户的aud$ 表。
 
audit_sys_operations参数的含义:
false:不审计sys用户,默认不审计
true:审计sys用户

审计范围分为session 和 access两种
session:表示用户登录之后执行的相同SQL只记录一次,其他相同SQL不再记录;
access:表示每次执行的SQL都进行审计记录。

详细参考官方文档
http://docs.oracle.com/cd/B19306_01/network.102/b14266/cfgaudit.htm#CIHDICID
1、开启审计参数
SQL> show parameter audit
 
NAME                                        TYPE      VALUE
----------------------------------------------- ------------------------------
audit_file_dest                      string      /u01/app/oracle/admin/mydb/adump
audit_sys_operations                boolean  FALSE
audit_syslog_level                string
audit_trail                                string    NONE
 
SQL> alter system setaudit_trail=db,extended scope=spfile;

2、重启数据库
静态参数,为了使参数生效,需要重启数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
 
Total System Global Area  599785472 bytes
Fixed Size              2085776 bytes
Variable Size                192941168 bytes
Database Buffers      398458880 bytes
Redo Buffers                6299648 bytes
Database mounted.
Database opened.
SQL> show parameter audit
 
NAME                                        TYPE      VALUE
----------------------------------------------- ------------------------------
audit_file_dest                      string      /u01/app/oracle/admin/mydb/adump
audit_sys_operations                    boolean  FALSE
audit_syslog_level                string
audit_trail                                string    DB, EXTENDED

3、设置对表进行审计
这样每次有用户对表进行操作,那么都会有相应的记录被添加到aud$中,而Oracle为了方便读取数据,创建了视图。
虽然会记录每个用户对表的操作,但是不会记录sys用户的操作,其他所有用户都会做记录。
SQL> conn / as sysdba
Connected.
SQL> audit all on zx.num_t by accesswhenever successful;
 
Audit succeeded.
 
SQL> set linesize 200
SQL> select * from dba_obj_audit_opts;
 
OWNER                            OBJECT_NAME                OBJECT_TYPE      ALT  AUD  COM  DEL  GRA  IND  INS  LOC  REN  SEL  UPD  REF EXE  CRE  REA    WRI  FBK
------------------------------------------------------------ ----------------- ----- ----- ----- ----- ---------- ----- ----- ----- ----- ----- --- ----- ----- ----- ----- -----
ZX                              NUM_T                              TABLE            A/-  A/-  A/-  A/-  A/-  A/-  A/-  A/-  A/-  A/-  A/-  -/- -/-  -/-  -/-  -/-  A/-

前面列中
A表示access,每次被审计的操作都会记录,比如开启了scott.emp的select审计,那么任何人select这张表都会触发一次审计,并且记录在aud$中。
S表示session,每个会话被审计的操作都记录一次。
使用不同用户对zx.num_t表做不同访问:
SQL> conn zx/zx
Connected.
SQL> select count(*) from zx.num_t;
 COUNT(*)
----------
          0
SQL> insert into zx.num_t (id1)values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> conn scott/tiger
Connected.
SQL> select count(*) from zx.num_t;
 COUNT(*)
----------
          1
SQL> delete from zx.num_t;
1 row deleted.
SQL> commit;
Commit complete.
SQL> insert into zx.num_t (id2)values(2);
1 row created.
SQL> rollback;
Rollback complete.

4、查询审计记录
SQL> alter session setnls_date_format='yyyymmdd hh24:mi:ss';
 
Session altered.
 
SQL> set lines 200
col OS_USERNAME for a10
col USERNAME for a11
col USERHOST for a10
col TERMINAL for a10
col TIMESTAMP for a20
col obj_name for a10
col OWNER for a10
col ACTION_NAME for a11
col TRANSACTIONID for a16
col sql_text for a50
SELECT USERNAME,
      USERHOST,
      TIMESTAMP,
      OWNER,
      OBJ_NAME,
      ACTION_NAME,
      SQL_TEXT
 FROM DBA_AUDIT_TRAIL
 WHERE OBJ_NAME='NUM_T'
 ORDER BY TIMESTAMP;
 
USERNAME  USERHOST  TIMESTAMP    OWNER      OBJ_NAME  ACTION_NAME SQL_TEXT
----------- ---------- ------------------------------ ---------- -------------------------------------------------------------
ZX        rhel5    20161107 11:57:55    ZX      NUM_T        NOAUDIT OBJ noaudit all on num_t
                                                                            ECT
 
ZX        rhel5    20161107 12:00:07    ZX        NUM_T        SELECT    select count(*) from zx.num_t
ZX        rhel5    20161107 12:00:21    ZX      NUM_T        INSERT    insert into zx.num_t (id1) values(1)
SCOTT          rhel5    20161107 12:00:37    ZX      NUM_T        SELECT    select count(*) from zx.num_t
SCOTT          rhel5    20161107 12:00:45    ZX      NUM_T        DELETE    delete from zx.num_t
SCOTT          rhel5    20161107 12:01:27    ZX      NUM_T      INSERT    insert into zx.num_t (id2) values(2)
 
6 rows selected.

5、取消审计
SQL> noaudit all on num_t;
Noaudit succeeded.

6、清空aud$
这张系统表是可以使用TRUNCATE命令截断的。把它删掉之后那么视图中的记录也就相应消失了。
SQL> truncate table aud$;
SQL> SELECT * FROM DBA_FGA_AUDIT_TRAIL;
 
no rows selected

更多详细信息参考官方文档
http://docs.oracle.com/cd/B19306_01/network.102/b14266/cfgaudit.htm#BABCFIHB


推荐阅读
  • PG12新增的VACUUM命令的SKIP_LOCKED选项
    PG12版本的VACUUM命令新增了SKIP_LOCKED选项,该选项使得vacuum命令在遇到被lock住的table时可以跳过并被视为成功执行。之前的版本中,vacuum命令会一直处于等待状态。本文还提到了PostgreSQL 12.1版本的相关信息。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 1.Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时 ... [详细]
author-avatar
太阳之神sqh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有