Oracle 审计和测试操作

简介: .1  相关参数1.1.1  AUDIT_SYS_OPERATIONS参数默认为false,当设置为true时,所有以sysdba,sysoper身份登录的用户的操作都会被记录至操作系统...

.1  相关参数

1.1.1  AUDIT_SYS_OPERATIONS参数

默认为false,当设置为true时,所有以sysdba,sysoper身份登录的用户的操作都会被记录至操作系统中,sysdba相关操作和普通用户不同,它是记录在操作系统中不会放在aud$表中,注意这个参数修改后需要重启才生效

1.1.2  AUDIT_TRAIL 参数

AUDIT_TRAIL  用于开启和禁用审计,默认值为DB,当值为db的情况不会记录相关操作的具体SQL,只有为DB,EXTENDED时才会记录具体执行什么SQL(aud$表中sql_text才不为空),注意这个参数需要重启后才生效,这个参数有以下值可以设置,分别含义如下

Parameter Value

Meaning

DB

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

XML

All elements of the AuditRecord node except Sql_Text and Sql_Bind will be printed to the operating system XML audit file.

DB,EXTENDED

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.

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: CHARNCHARVARCHARVARCHAR2NVARCHAR2NUMBERFLOATBINARY_FLOAT,BINARY_DOUBLEDATELONGROWID, and TIMESTAMP.

XML,EXTENDED

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.)

OS

Enables database auditing and directs all audit records to an operating system file

NONE

Disables standard auditing (This value is the default.)

1.2  审计类型

分为审计按SQL语句审计,按权限审计,按对象审计和按网络进行审计

审计类型

作用

Statement

记录所有指定类型的审计语句,如 CREATE TABLETRUNCATE TABLECOMMENT ON TABLE DELETE TABLE等相关的语句.

Privilege

审计所有相关的系统权限,AUDIT CREATE ANY TRIGGER, CREATE ANY TRIGGER等系统权限.

Object

根据指定的对象进行审计,如只审计emp表的delete操作.

Network

审计网络错误.

 

1.3  审计的触发条件

1.3.1  根据语句执行是否成功进行审计

不管是语句,权限和对象都可以根据语句执行是否成功在审计语句后面加判断词,语法如下:

在审计语句后面加WHENEVER SUCCESSFUL or WHENEVER NOT SUCCESSFUL

如:

AUDIT CREATE TABLE WHENEVER NOT SUCCESSFUL;
AUDIT TRUNCATE TABLE WHENEVER NOT SUCCESSFUL;

1.3.2  根据指定用户进行审计

在做语句和权限进行审计的时候可以在审计语句后面加by再加指定用户名,多个用户用逗号隔开例如下面语句为开启对scott,blake两个用户的所有select tableupdate table权限

AUDIT SELECT TABLE, UPDATE TABLE  BY scott, blake;

 

1.4  审计相关的视图

可以通过dba_views查看所有相关的视图

select * from dba_views where view_name like '%AUDIT%'

最常用的视图如下:

---审计系统视图

select  *  from  STMT_AUDIT_OPTION_MAP    -- 审计选项类型代码

select  *  from  AUDIT_ACTIONS    -- action代码

select  *  from  ALL_DEF_AUDIT_OPTS    -- 对象创建时默认的对象审计选项

---三种审计已启用审计选项

select  *  from  DBA_STMT_AUDIT_OPTS    -- 当前数据库系统审计选项

select  *  from  DBA_PRIV_AUDIT_OPTS    -- 当前权限审计选项

select  *  from  DBA_OBJ_AUDIT_OPTS     ---查看当前审计了哪些对象

---审计结果,也可以直接查询sys.aud$表

select  *  from  DBA_AUDIT_TRAIL  ---查看审计记录,调用的sys.aud$表

select  *  from  DBA_AUDIT_OBJECT   ---查看对象审计记录

select  *  from  DBA_AUDIT_SESSION  -- session审计记录

select  *  from  DBA_AUDIT_STATEMENT   -- 查看语句审计记录 

select  *  from  DBA_AUDIT_EXISTS    -- 使用BY AUDIT NOT EXISTS选项的审计

select  *  from  DBA_AUDIT_POLICIES    -- 审计POLICIES

select  *  from  DBA_COMMON_AUDIT_TRAIL  -- 标准审计+精细审计记录


1.5  设置默认表空间不为system


alter table aud$ move tablespace audit_tbs;
alter table aud$ move
  LOB ("SQLBIND") store as ( tablespace audit_tbs);
alter table aud$ move
  LOB ("SQLTEXT") store as ( tablespace audit_tbs);

 

 

1.6  测试过程

1.6.1  修改audit_trail参数并重启数据库

SQL> alter system set audit_trail=DB,EXTENDED  scope=spfile;

System altered.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

SQL> startup

ORACLE instance started.

Total System Global Area 1640484864 bytes

Fixed Size                  1345296 bytes

Variable Size             973080816 bytes

Database Buffers          654311424 bytes

Redo Buffers               11747328 bytes

Database mounted.

Database opened.

SQL>

1.6.2  测试按语句审计

(1)在sys用户下面开启语句审计

SQL> AUDIT delete any TABLE, UPDATE any TABLE,insert any table, ALTER any table BY eymit;

Audit succeeded.

SQL>

SQL> AUDIT table BY eymit;

Audit succeeded

 

(2)在eymit用户下创建相关的表和执行部分操作

create table eymit.T_EYMIT

(

  ID   NUMBER,

  NAME VARCHAR2(20)

);

SQL> insert into t_eymit values(1,'aaaa');

1 row inserted

SQL> insert into t_eymit values(2,'bbbbbb');

1 row inserted

SQL> insert into t_eymit values(3,'cccccc');

1 row inserted

SQL> commit;

Commit complete

SQL> update t_eymit set name='bbbbb2' where id=2;

1 row updated

SQL> commit;

Commit complete

SQL>

SQL> alter table T_EYMIT

  2    add constraint pk_eymit primary key (ID);

Table altered

3)查看添加的审计

SQL> select * from DBA_STMT_AUDIT_OPTS where USER_NAME='EYMIT';

 

USER_NAME             PROXY_NAME             AUDIT_OPTION         SUCCESS    FAILURE

--------------------- -------------- ------------------------- ---------- ----------

EYMIT                                   DELETE ANY TABLE        BY ACCESS   BY ACCESS

EYMIT                                   UPDATE ANY TABLE        BY ACCESS   BY ACCESS

EYMIT                                   INSERT ANY TABLE        BY ACCESS   BY ACCESS

EYMIT                                   ALTER ANY TABLE         BY ACCESS   BY ACCESS

 

SQL> select * from DBA_PRIV_AUDIT_OPTS  where USER_NAME='EYMIT';

 

USER_NAME           PROXY_NAME          PRIVILEGE               SUCCESS    FAILURE

----------------- ----------------- ----------------------- ---------- ----------

EYMIT                                 DELETE ANY TABLE          BY ACCESS   BY ACCESS

EYMIT                                 UPDATE ANY TABLE          BY ACCESS   BY ACCESS

EYMIT                                 INSERT ANY TABLE          BY ACCESS   BY ACCESS

EYMIT                                 ALTER ANY TABLE           BY ACCESS   BY ACCESS

 

 

SQL> select owner,object_name,object_type from DBA_OBJ_AUDIT_OPTS  where wner='EYMIT';

 

OWNER                          OBJECT_NAME                    OBJECT_TYPE

--------------------------- --------------------------------------------------


SQL>

(4)查看有没有记录具体的SQL

测试下来发现,上面语句并没有记录相关的操作包括DDL,DML都不会记录具体执行什么SQL,但是会记录操作类型

SQL> SELECT T.USERID,T.SQLBIND,T.SQLTEXT FROM AUD$ T WHERE userid='EYMIT';

 

USERID         SQLBIND           SQLTEXT

------- ------------------- ----------------------

EYMIT                                                                                                          

EYMIT                                                                                                           

EYMIT                                                                                                          

EYMIT                                                                                                           

(5)再次测试,发现还是没有记录具体的SQL

SQL> create table t_eymit2 as select * from t_eymit;

Table created

SQL>  alter table T_EYMIT2  add constraint pk_eymit2 primary key (ID);

Table altered

SQL> alter table T_EYMIT2 add name2 varchar2(20);

Table altered

sys下面查看是否生成审计记录

SQL> select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;

 

SQL_TEXT

----------------------------

 

SQL>

(6)重设audit_sys_operations,并进行测试

按文档说明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的问题

 

SQL>  alter system set  audit_sys_operations=true  scope=spfile;

 

System altered.

SQL> startup force

ORACLE instance started.

Total System Global Area 1640484864 bytes

Fixed Size                  1345296 bytes

Variable Size             973080816 bytes

Database Buffers          654311424 bytes

Redo Buffers               11747328 bytes

Database mounted.

Database opened.

SQL>

eymit用户下面执行创建表的操作

SQL> create table t_eymit3 as select * from t_eymit;

Table created

再使用sys用户查看审计信息,发现已经有记录了

SQL>  select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;

SQL_TEXT

------------------

create table t_eymit3 as select * from t_eymit

SQL>

1.6.3  测试指定对象

使用sys用户执行下面操作

SQL> audit delete,insert,update on eymit.t_eymit by session;

Audit succeeded

SQL> delete FROM AUD$;

16 rows delete

SQL> commit;

eymit用户下面作部分操作

SQL> update t_eymit set name='ffffff1' where id=5;

1 row updated

SQL> update t_eymit set name='ffffff2' where id=5;

1 row updated

SQL> commit;

sys下面查看是否记录了相关的SQL

SQL> select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;

 

SQL_TEXT

----------------

update t_eymit set name='ffffff1' where id=5

update t_eymit set name='ffffff2' where id=5

SQL>

下面操作只记录新建对象的DDL操作,对新表的操作审计并没有记录,注意Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access后,对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效

sys下面清除的审计

SQL> delete FROM AUD$;

SQL> commit;

eymit用户下新表上执行DML操作

SQL> create table eymit2 as select * from t_eymit;

Table created

SQL> delete eymit2 where id=5;

1 row deleted

SQL> commit;

Commit complete

SQL> insert into eymit2 values(5,'cccccc5');

1 row inserted

SQL> commit;

Commit complete

 

使用sys查看审计

SQL> select sql_text from DBA_AUDIT_TRAIL where username='EYMIT' ;

 

SQL_TEXT

--------------------------------------------------------------------------

create table eymit2 as select * from t_eymit

 

SQL>

目录
相关文章
|
6月前
|
Oracle 关系型数据库 Java
实时计算 Flink版操作报错之读取Oracle数据库时遇到找不到驱动,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
实时计算 Flink版操作报错之读取Oracle数据库时遇到找不到驱动,是什么原因
|
5月前
|
消息中间件 Java 数据库
【消息队列开发】 实现 VirtualHostTests 类——测试虚拟主机操作
【消息队列开发】 实现 VirtualHostTests 类——测试虚拟主机操作
|
4月前
|
Oracle 关系型数据库 数据库
|
4月前
|
监控 Oracle 关系型数据库
关系型数据库Oracle恢复测试
【7月更文挑战第20天】
75 7
|
4月前
|
分布式计算 Oracle 大数据
MaxCompute产品使用合集之没有数据源,只是将批量状态和时间写入Oracle表里,该如何操作
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4月前
|
SQL DataWorks 数据可视化
DataWorks操作报错合集之测试OSS数据源的连通性时,出现503 Service Temporarily Unavailable的错误,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
JSON Java 测试技术
SpringBoot实用开发篇第二章(测试操作)
SpringBoot实用开发篇第二章(测试操作)
|
5月前
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
44 3
|
5月前
|
SQL DataWorks 数据处理
DataWorks操作报错合集之在创建ES的数据源时,测试连通性提示无法连通,出现报错,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
消息中间件 Java 测试技术
【消息队列开发】 测试MessageFileManager(对硬盘中的消息操作)类
【消息队列开发】 测试MessageFileManager(对硬盘中的消息操作)类

推荐镜像

更多