1. http://blog.itpub.net/21605631/viewspace-759640/
    Oracle 审计和测试操作 2013-05-02 18:12:11
  2. 分类: Linux
  3.  
  4. 1.1 相关参数
  5.  
  6. 1.1.1 AUDIT_SYS_OPERATIONS参数
  7.  
  8. 默认为false,当设置为true时,所有以sysdba,sysoper身份登录的用户的操作都会被记录至操作系统中,sysdba相关操作和普通用户不同,它是记录在操作系统中不会放在aud$表中,注意这个参数修改后需要重启才生效
  9.  
  10. 1.1.2 AUDIT_TRAIL 参数
  11.  
  12. AUDIT_TRAIL 用于开启和禁用审计,默认值为DB,当值为db的情况不会记录相关操作的具体SQL,只有为DB,EXTENDED时才会记录具体执行什么SQL(aud$表中sql_text才不为空),注意这个参数需要重启后才生效,这个参数有以下值可以设置,分别含义如下
  13.  
  14. Parameter Value
  15.  
  16. Meaning
  17.  
  18. DB
  19.  
  20. Enables database auditing and directs all audit records to the database audit trail (SYS.AUD$), except for records that are always written to the operating system audit trail
  21.  
  22. XML
  23.  
  24. All elements of the AuditRecord node except Sql_Text and Sql_Bind will be printed to the operating system XML audit file.
  25.  
  26. DB,EXTENDED
  27.  
  28. Performs all actions of AUDIT_TRAIL=DB, and also populates the SQL bind and SQL text CLOB-type columns of the SYS.AUD$ table, when available. These two columns are populated only when this parameter is specified.
  29.  
  30. DB,EXTENDED captures the SQL triggered by an audit. You can capture both the SQL statement that caused the audit, and any associated bind variables. However, be aware that you only can capture data from the following column datatypes: CHAR, NCHAR, VARCHAR, VARCHAR2, NVARCHAR2, NUMBER, FLOAT, BINARY_FLOAT,BINARY_DOUBLE, DATE, LONG, ROWID, and TIMESTAMP.
  31.  
  32. XML,EXTENDED
  33.  
  34. Does all actions of AUDIT_TRAIL=XML and also populates the SQL bind and SQL text CLOB-type columns of theSYS.AUD$ table, wherever possible. (These columns are populated only when this parameter is specified.)
  35.  
  36. OS
  37.  
  38. Enables database auditing and directs all audit records to an operating system file
  39.  
  40. NONE
  41.  
  42. Disables standard auditing (This value is the default.)
  43.  
  44. 1.2 审计类型
  45.  
  46. 分为审计按SQL语句审计,按权限审计,按对象审计和按网络进行审计
  47.  
  48. 审计类型
  49.  
  50. 作用
  51.  
  52. Statement
  53.  
  54. 记录所有指定类型的审计语句,如 CREATE TABLE, TRUNCATE TABLE, COMMENT ON TABLE DELETE TABLE等相关的语句.
  55.  
  56. Privilege
  57.  
  58. 审计所有相关的系统权限,如AUDIT CREATE ANY TRIGGER, CREATE ANY TRIGGER等系统权限.
  59.  
  60. Object
  61.  
  62. 根据指定的对象进行审计,如只审计emp表的delete操作.
  63.  
  64. Network
  65.  
  66. 审计网络错误.
  67.  
  68. 1.3 审计的触发条件
  69.  
  70. 1.3.1 根据语句执行是否成功进行审计
  71.  
  72. 不管是语句,权限和对象都可以根据语句执行是否成功在审计语句后面加判断词,语法如下:
  73.  
  74. 在审计语句后面加WHENEVER SUCCESSFUL or WHENEVER NOT SUCCESSFUL
  75.  
  76. 如:
  77.  
  78. AUDIT CREATE TABLE WHENEVER NOT SUCCESSFUL;
  79. AUDIT TRUNCATE TABLE WHENEVER NOT SUCCESSFUL;
  80. 1.3.2 根据指定用户进行审计
  81.  
  82. 在做语句和权限进行审计的时候可以在审计语句后面加by再加指定用户名,多个用户用逗号隔开,例如下面语句为开启对scott,blake两个用户的所有select tableupdate table权限
  83.  
  84. AUDIT SELECT TABLE, UPDATE TABLE BY scott, blake;
  85.  
  86. 1.4 审计相关的视图
  87.  
  88. 可以通过dba_views查看所有相关的视图
  89.  
  90. select * from dba_views where view_name like '%AUDIT%'
  91.  
  92. 最常用的视图如下:
  93.  
  94. ---审计系统视图
  95.  
  96. select * from STMT_AUDIT_OPTION_MAP -- 审计选项类型代码
  97.  
  98. select * from AUDIT_ACTIONS -- action代码
  99.  
  100. select * from ALL_DEF_AUDIT_OPTS -- 对象创建时默认的对象审计选项
  101.  
  102. ---三种审计已启用审计选项
  103.  
  104. select * from DBA_STMT_AUDIT_OPTS -- 当前数据库系统审计选项
  105.  
  106. select * from DBA_PRIV_AUDIT_OPTS -- 当前权限审计选项
  107.  
  108. select * from DBA_OBJ_AUDIT_OPTS ---查看当前审计了哪些对象
  109.  
  110. ---审计结果,也可以直接查询sys.aud$
  111.  
  112. select * from DBA_AUDIT_TRAIL ---查看审计记录,调用的sys.aud$
  113.  
  114. select * from DBA_AUDIT_OBJECT ---查看对象审计记录
  115.  
  116. select * from DBA_AUDIT_SESSION -- session审计记录
  117.  
  118. select * from DBA_AUDIT_STATEMENT -- 查看语句审计记录
  119.  
  120. select * from DBA_AUDIT_EXISTS -- 使用BY AUDIT NOT EXISTS选项的审计
  121.  
  122. select * from DBA_AUDIT_POLICIES -- 审计POLICIES
  123.  
  124. select * from DBA_COMMON_AUDIT_TRAIL -- 标准审计+精细审计记录
  125.  
  126. 1.5 设置默认表空间不为system
  127.  
  128. alter table aud$ move tablespace audit_tbs;
  129. alter table aud$ move LOB ("SQLBIND") store as ( tablespace audit_tbs);
  130. alter table aud$ move LOB ("SQLTEXT") store as ( tablespace audit_tbs);
  131.  
  132. 1.6 测试过程
  133.  
  134. 1.6.1 修改audit_trail参数并重启数据库
  135.  
  136. SQL> alter system set audit_trail=DB,EXTENDED scope=spfile;
  137.  
  138. System altered.
  139.  
  140. SQL> shutdown immediate;
  141.  
  142. Database closed.
  143.  
  144. Database dismounted.
  145.  
  146. ORACLE instance shut down.
  147.  
  148. SQL>
  149.  
  150. SQL> startup
  151.  
  152. ORACLE instance started.
  153.  
  154. Total System Global Area 1640484864 bytes
  155.  
  156. Fixed Size 1345296 bytes
  157.  
  158. Variable Size 973080816 bytes
  159.  
  160. Database Buffers 654311424 bytes
  161.  
  162. Redo Buffers 11747328 bytes
  163.  
  164. Database mounted.
  165.  
  166. Database opened.
  167.  
  168. SQL>
  169.  
  170. 1.6.2 测试按语句审计
  171.  
  172. 1)在sys用户下面开启语句审计
  173.  
  174. SQL> AUDIT delete any TABLE, UPDATE any TABLE,insert any table, ALTER any table BY eymit;
  175.  
  176. Audit succeeded.
  177.  
  178. SQL>
  179.  
  180. SQL> AUDIT table BY eymit;
  181.  
  182. Audit succeeded
  183.  
  184. 2)在eymit用户下创建相关的表和执行部分操作
  185.  
  186. create table eymit.T_EYMIT
  187.  
  188. (
  189.  
  190. ID NUMBER,
  191.  
  192. NAME VARCHAR2(20)
  193.  
  194. );
  195.  
  196. SQL> insert into t_eymit values(1,'aaaa');
  197.  
  198. 1 row inserted
  199.  
  200. SQL> insert into t_eymit values(2,'bbbbbb');
  201.  
  202. 1 row inserted
  203.  
  204. SQL> insert into t_eymit values(3,'cccccc');
  205.  
  206. 1 row inserted
  207.  
  208. SQL> commit;
  209.  
  210. Commit complete
  211.  
  212. SQL> update t_eymit set name='bbbbb2' where id=2;
  213.  
  214. 1 row updated
  215.  
  216. SQL> commit;
  217.  
  218. Commit complete
  219.  
  220. SQL>
  221.  
  222. SQL> alter table T_EYMIT
  223.  
  224. 2 add constraint pk_eymit primary key (ID);
  225.  
  226. Table altered
  227.  
  228. 3)查看添加的审计
  229.  
  230. SQL> select * from DBA_STMT_AUDIT_OPTS where USER_NAME='EYMIT';
  231.  
  232. USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE
  233.  
  234. --------------------- -------------- ------------------------- ---------- ----------
  235.  
  236. EYMIT DELETE ANY TABLE BY ACCESS BY ACCESS
  237.  
  238. EYMIT UPDATE ANY TABLE BY ACCESS BY ACCESS
  239.  
  240. EYMIT INSERT ANY TABLE BY ACCESS BY ACCESS
  241.  
  242. EYMIT ALTER ANY TABLE BY ACCESS BY ACCESS
  243.  
  244. SQL> select * from DBA_PRIV_AUDIT_OPTS where USER_NAME='EYMIT';
  245.  
  246. USER_NAME PROXY_NAME PRIVILEGE SUCCESS FAILURE
  247.  
  248. ----------------- ----------------- ----------------------- ---------- ----------
  249.  
  250. EYMIT DELETE ANY TABLE BY ACCESS BY ACCESS
  251.  
  252. EYMIT UPDATE ANY TABLE BY ACCESS BY ACCESS
  253.  
  254. EYMIT INSERT ANY TABLE BY ACCESS BY ACCESS
  255.  
  256. EYMIT ALTER ANY TABLE BY ACCESS BY ACCESS
  257.  
  258. SQL> select owner,object_name,object_type from DBA_OBJ_AUDIT_OPTS where wner='EYMIT';
  259.  
  260. OWNER OBJECT_NAME OBJECT_TYPE
  261.  
  262. --------------------------- --------------------------------------------------
  263.  
  264. SQL>
  265.  
  266. (4)查看有没有记录具体的SQL
  267.  
  268. 测试下来发现,上面语句并没有记录相关的操作包括DDLDML都不会记录具体执行什么SQL,但是会记录操作类型
  269.  
  270. SQL> SELECT T.USERID,T.SQLBIND,T.SQLTEXT FROM AUD$ T WHERE userid='EYMIT';
  271.  
  272. USERID SQLBIND SQLTEXT
  273.  
  274. ------- ------------------- ----------------------
  275.  
  276. EYMIT
  277.  
  278. EYMIT
  279.  
  280. EYMIT
  281.  
  282. EYMIT
  283.  
  284. (5)再次测试,发现还是没有记录具体的SQL
  285.  
  286. SQL> create table t_eymit2 as select * from t_eymit;
  287.  
  288. Table created
  289.  
  290. SQL> alter table T_EYMIT2 add constraint pk_eymit2 primary key (ID);
  291.  
  292. Table altered
  293.  
  294. SQL> alter table T_EYMIT2 add name2 varchar2(20);
  295.  
  296. Table altered
  297.  
  298. sys下面查看是否生成审计记录
  299.  
  300. SQL> select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;
  301.  
  302. SQL_TEXT
  303.  
  304. ----------------------------
  305.  
  306. SQL>
  307.  
  308. (6)重设audit_sys_operations,并进行测试
  309.  
  310. 按文档说明audit_trail=DB,EXTENDED应该会记录具体的SQL,查看测试过程都没有什么问题,为什么不生成相关的详细SQL呢,会不会是权限问题呢,设置一下audit_sys_operations=true,并重启了数据库,发现sql_text记录了具体的SQL,为了验证是不是audit_sys_operations的问题,重新设置audit_sys_operations=false再重启数据库,sql_text还是会记录操作的SQL,说明不是audit_sys_operations的问题
  311.  
  312. SQL> alter system set audit_sys_operations=true scope=spfile;
  313.  
  314. System altered.
  315.  
  316. SQL> startup force
  317.  
  318. ORACLE instance started.
  319.  
  320. Total System Global Area 1640484864 bytes
  321.  
  322. Fixed Size 1345296 bytes
  323.  
  324. Variable Size 973080816 bytes
  325.  
  326. Database Buffers 654311424 bytes
  327.  
  328. Redo Buffers 11747328 bytes
  329.  
  330. Database mounted.
  331.  
  332. Database opened.
  333.  
  334. SQL>
  335.  
  336. eymit用户下面执行创建表的操作
  337.  
  338. SQL> create table t_eymit3 as select * from t_eymit;
  339.  
  340. Table created
  341.  
  342. 再使用sys用户查看审计信息,发现已经有记录了
  343.  
  344. SQL> select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;
  345.  
  346. SQL_TEXT
  347.  
  348. ------------------
  349.  
  350. create table t_eymit3 as select * from t_eymit
  351.  
  352. SQL>
  353.  
  354. 1.6.3 测试指定对象
  355.  
  356. 使用sys用户执行下面操作
  357.  
  358. SQL> audit delete,insert,update on eymit.t_eymit by session;
  359.  
  360. Audit succeeded
  361.  
  362. SQL> delete FROM AUD$;
  363.  
  364. 16 rows delete
  365.  
  366. SQL> commit;
  367.  
  368. eymit用户下面作部分操作
  369.  
  370. SQL> update t_eymit set name='ffffff1' where id=5;
  371.  
  372. 1 row updated
  373.  
  374. SQL> update t_eymit set name='ffffff2' where id=5;
  375.  
  376. 1 row updated
  377.  
  378. SQL> commit;
  379.  
  380. sys下面查看是否记录了相关的SQL
  381.  
  382. SQL> select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;
  383.  
  384. SQL_TEXT
  385.  
  386. ----------------
  387.  
  388. update t_eymit set name='ffffff1' where id=5
  389.  
  390. update t_eymit set name='ffffff2' where id=5
  391.  
  392. SQL>
  393.  
  394. 下面操作只记录新建对象的DDL操作,对新表的操作审计并没有记录,注意Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access后,对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效
  395.  
  396. sys下面清除的审计
  397.  
  398. SQL> delete FROM AUD$;
  399.  
  400. SQL> commit;
  401.  
  402. eymit用户下新表上执行DML操作
  403.  
  404. SQL> create table eymit2 as select * from t_eymit;
  405.  
  406. Table created
  407.  
  408. SQL> delete eymit2 where id=5;
  409.  
  410. 1 row deleted
  411.  
  412. SQL> commit;
  413.  
  414. Commit complete
  415.  
  416. SQL> insert into eymit2 values(5,'cccccc5');
  417.  
  418. 1 row inserted
  419.  
  420. SQL> commit;
  421.  
  422. Commit complete
  423.  
  424. 使用sys查看审计
  425.  
  426. SQL> select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;
  427.  
  428. SQL_TEXT
  429.  
  430. --------------------------------------------------------------------------
  431.  
  432. create table eymit2 as select * from t_eymit
  433.  
  434. SQL>
 

转--Oracle 审计和测试操作的更多相关文章

  1. [Oracle]审计Audit

    1.Audit的概念 Audit是监视和记录用户对数据库进行的操作,以供DBA进行问题分析.利用Audit功能,可以完成以下任务: 监视和收集特定数据库活动的数据.例如管理员能够审计哪些表被更新,在某 ...

  2. Oracle 10g数据库备份与恢复操作手册

    Oracle 10g数据库备份与恢复操作手册 目录 Oracle 10g数据库备份与恢复操作手册... 前言... 文档目的... 文档范围... 目标读者... 其他说明... 冷备份... 热备份 ...

  3. [转]ORACLE 审计功能

    审计是对选定的用户动作的监控和记录,通常用于: u          审查可疑的活动.例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不 ...

  4. 转-利用Oracle审计功能来监测试环境的变化

    http://blog.csdn.net/luowangjun/article/details/5627102利用Oracle审计功能来监测试环境的变化 做过测试的人都应该会碰到这样的情况:测试发现的 ...

  5. oracle 审计功能

    Oracle 11g推出了审计功能,但这个功能会针对很多操作都产生审计文件.aud,日积月累下来这些文件也很多,默认情况下,系统为了节省资源,减少I/0操作,其审计功能是关闭的 一.审计功能关闭 1. ...

  6. Oracle日常运维操作总结-数据库的启动和关闭

    下面是工作中对Oracle日常管理操作的一些总结,都是一些基本的oracle操作和SQL语句写法,在此梳理成手册,希望能帮助到初学者(如有梳理不准确之处,希望指出). 一.数据库的启动和关闭 1.1 ...

  7. 如何使用swingbench进行oracle数据库压力测试

    如何使用swingbench进行oracle数据库压力测试 2014-10-06 08:09:02 标签:oracle 数据库压力测试 swingbench 原创作品,允许转载,转载时请务必以超链接形 ...

  8. 删除Oracle Online Redo 测试

    删除Oracle Online Redo 测试 SQL> select * from v$log; ​   GROUP#   THREAD# SEQUENCE#     BYTES BLOCKS ...

  9. Oracle数据库安装图文操作步骤1

    Oracle数据库安装图文操作步骤 一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符.   官 ...

随机推荐

  1. hdu 2177 取(2堆)石子游戏(威佐夫博奕)

    题目链接:hdu 2177 这题不是普通的 Nim 博弈,我想它应该是另一种博弈吧,于是便推 sg 函数打了个 20*20 的表来看,为了方便看一些,我用颜色作了标记,打表代码如下: #include ...

  2. K-邻近算法

    K-邻近算法 采用测量不同特征值之间的距离来进行分类 Ad:精度高,对异常值不敏感,无数据输入假定 Na:计算复杂度高,空间复杂度高 KNN原理 存在样本集,每个数据都存在标签,输入无标签的新数据后, ...

  3. iOS开发之滤镜的使用技巧(CoreImage)

    一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住command 点击CIFilter 进入接口文件 找到第1 ...

  4. zabbix3.0.4 部署之八 (zabbix3.0.4 微信报警)

    [root@sv-zabbix ~]# cat /usr/local/zabbix/share/zabbix/alertscripts/weixin.py #!/usr/bin/env python# ...

  5. (转载) PowerDesigner 生成sql文件

    Powerdesigner15-物理模型-导出建表sql语句 博客分类: Powerdesigner Powerdesigner15-物理模型-导出建表sql语句 1.设置哪种数据库导出的sql语句, ...

  6. Centos 关闭后台进程 .sh 等

    命令后加 & 符号可以让其在后台运行 如: node app.js & 想要关闭分两步: ps aux | grep app.js 查看app.js  所运行的进程号 kill 进程号 ...

  7. windows 下配置 Nginx 常见问题(转)

    windows 下配置 Nginx 常见问题 因为最近的项目需要用到负载均衡,不用考虑,当然用大名鼎鼎的Nginx啦.至于Nginx的介绍,这里就不多说了,直接进入主题如何在Windows下配置. 我 ...

  8. Octopus系列之js公共函数

    货币选择 ChangeCurrency(this.value) 示例 <select name="currency" id="sl_currency" c ...

  9. 搭建web服务器环境

    一. 安装apache 安装好之后测试:浏览器地址栏输入:localhost,若弹出"It works!"表明已成功安装. 管理方式:1.通过Apache自带的镜像管理器:2.wi ...

  10. Echarts源码总括

    Echarts采用MVC模型,典型的以数据驱动视图的逻辑. 所有的用于绘图的元素存放于Echarts::Zrender::storage中,所有的动画对象存放于Echarts::Zrender::an ...