Oracle 标准数据库审计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34556414/article/details/83011747

Standard database auditing:标准数据库审计

 

AUDIT_TRAIL审计的存放方式

 

None:是10g默认值,不做审计;11g默认值DB,将审计结果记录到aud$表中;

 

要使用数据库审计,必须先将静态AUDIT_TRAIL参数设置为指向审计记录的存储位置。这样做可启用数据库审计。

 

启用数据库审计并指定审计选项(登录事件、行使的系统和对象权限或使用的SQL 语句)后,数据库开始收集审计信息。

AUDIT_TRAIL = { none | os | db [, extended] | xml [, extended] }

 

如果将AUDIT_TRAIL设置为OS,审计记录存储在操作系统的审计系统中。

在Windows 环境下,审计记录存储在事件日志中。

 

在UNIX 或Linux 环境下,审计记录存储在使用AUDIT_FILE_DEST参数指定的文件中。

 

如果将AUDIT_TRAIL参数设置为DB或DB,_EXTENDED,可以在DBA_AUDIT_TRAIL视图(SYS方案的一部分)中查看审计记录。

 

如果AUDIT_TRAIL设置为XML或XML,EXTENDED,审计记录会写AUDIT_FILE_DEST参数指向的目录中的XML 文件。使用V$XML_AUDIT_TRAIL视图可查看此目录中的所有XML 文件。

 

初始化参数AUDIT_TRAIL用于控制数据库审计,默认值为none。
SYS@orcl> show parameter audit_trail ---->审计的存放方式

NAME TYPE VALUE
-------------------------------- ----------- ----------------
audit_trail string NONE

enable or disable database audit

AUDIT_TRAIL = { none | os | db | db,extended | xml | xml,extended }

 

参数详解:

AUDIT_TRAIL启用或禁用数据库审计。当设置该参数为NONE或FALSE时,将禁止数据库审计;当设置该参数为OS时,将激活数据库审计,并将审计记录写入到OS审计跟踪文件中;当设置该参数为DB或TRUE时,将激活数据库审计,并将审计记录写入到数据字典SYS.AUD$中;当设置该参数为DB_EXTENDED时,不仅将审计记录写入到数据字典SYS.AUD$中,还会填充该数据字典的SQLBIND和SQLTEXT列。

 

 

 

audit_sys_operations

 

默认为false,当设置为true时,所有sys用户(包括以sysdba, sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。

 

 

 

标准数据库审计

- 审计语法:
audit sql_statement_clause by {session | access} whenever [not] successful;
by session,在一个会话中,同类型的操作只审计一条
by access,每个符合审计的操作全部审计

- 审计相关参数( audit_trail):

audit_trail = { none | os | db [, extended] | xml [, extended] }
none:10g 默认值,不做审计;
os:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;
db:11g默认值,将审计结果记录到aud$表中;
db,extended:将审计结果记录到aud$表中,同时包括绑定变量及CLOB字段;
xml:记录OS文件的是XML格式的审计记录;
xml,extended:记录OS文件的是XML格式的审计记录,同时包括绑定变量及 CLOB 字段。

oracle10g:默认审计参数为 NONE,即未开启

Oracle11g:默认审计参数为 DB

维护审计线索是一项重要的管理任务。审计线索可能会迅速地增长,具体取决于审计选项的审计重点。

如果维护不当,审计线索会创建过多的记录,以至影响系统的性能。审计开销与生成的记录号直接相关。

 

 

配置审计线索

可使用AUDIT_TRAIL启用数据库审计。

可以在Enterprise Manager 中使用“Initialization Parameters(初始化参数)”页或者在

SQL*Plus 中使用ALTER SYSTEM SET命令来设置AUDIT_TRAIL参数。

ALTER SYSTEM SET AUDIT_TRAIL='XML' SCOPE=SPFILE;

因为这是一个静态参数,所以您必须重启数据库,更改才能生效。

如果数据库是使用Database

Configuration Assistant (DBCA) 创建的,默认情况下,audit_trail参数设置为DB

sys@TEST0924> show parameter AUDIT_TRAIL

NAME TYPE VALUE

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

audit_trail string DB

当AUDIT_TRAIL设置为DB时,默认的行为是将审计线索记录到数据库的AUD$表中。

对于大多数站点而言,这类审计不会对数据库性能造成太大影响。Oracle 建议使用操作系统审计线索文件。

如果数据库是手动创建的(使用CREATE DATABASE命令),默认将AUDIT_TRAIL设置为NONE。

 

 

 

 

实验开始:

——查看审计是否安装

  SQLPLUS> connect / AS SYSDBA

 

  SQLPLUS> select * from sys.aud$;     --没有记录返回  

 

  SQLPLUS> select * from dba_audit_trail;   - 没有记录返回

 

 如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。

 

 SQLPLUS> connect / as sysdba

 

  SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql

 

——查看审计是否开启: (DB表示为11g默认参数)

 

SYS@ORA11GR2>show parameter audit_trail

 

 

 

NAME                                 TYPE        VALUE

 

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

 

audit_trail                          string          DB

 

 

 

注:存储审计信息的表( aud$)的默认表空间为 system, system 表空间是不建议用的,所以最好为表aud$单独创建一个表空间用于存储审计数据。

 

 

——验证:

 

SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';

 

 

 

TABLE_NAME                     TABLESPACE_NAME

 

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

 

AUD$                           SYSTEM

 

 

 

1) 创建 ts_audit 表空间,用于存储审计信息

 

SYS@ORA11GR2>create tablespace ts_audit datafile '/u01/app/oracle/oradata/ORA11GR2/ts_audit_01.dbf' size 10m autoextend on next 10m;

 

 

 

Tablespace created.

 

 

 

2) 将存储审计信息的表 move 到 ts_audit 表空间

 

SYS@ORA11GR2>alter table aud$ move tablespace ts_audit;

 

 

 

Table altered.

 

——验证:

 

SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';

 

 

 

TABLE_NAME                     TABLESPACE_NAME

 

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

 

AUD$                           TS_AUDIT

 

SQL> desc aud$;

 Name    Null?    Type

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

 SQLBIND     CLOB

 SQLTEXT     CLOB

 

【考虑将 aud$中 clob 字段单独存储一个表空间,如下

alter table sys.aud$ move lob(sqlbind) store as( tablespace USERS);

alter table sys.aud$ move lob(SQLTEXT) store as( tablespace USERS);

oracle10g 中,还可以考虑将索引 move 一个新的表空间, oracle11g 中 aud$表已无索引

alter index sys.I_AUD1 rebuild tablespace users;】

 

 

3) 查看审计参数并对其修改,改为存储到数据库并记录绑定变量

 

--查看当前数据库中参数 audit_trail 的值

 

SYS@ORA11GR2>show parameter audit_trail

 

 

 

NAME                                 TYPE        VALUE

 

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

 

audit_trail                          string      DB

 

 

 

--修改为审计记录保存到数据库中并且包含 clob 字段

 

SYS@ORA11GR2>alter system set audit_trail=db,extended scope=spfile;

 

 

 

System altered.

 

 

 

SYS@ORA11GR2>startup force;

 

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

 

ORACLE instance started.

 

 

 

Total System Global Area  830930944 bytes

 

Fixed Size                  2257800 bytes

 

Variable Size             503319672 bytes

 

Database Buffers          322961408 bytes

 

Redo Buffers                2392064 bytes

 

Database mounted.

 

Database opened.

 

——验证:

 

SYS@ORA11GR2>show parameter audit_trail

 

 

 

NAME                                 TYPE        VALUE

 

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

 

audit_trail                          string      DB, EXTENDED

 

 

 

4) 登录 scott 用户,创建 t 表并开启 update 审计,使用 by access 子句,每次 update 都审计

 

SCOTT@ORA11GR2>create table t(x int);

 

 

 

Table created.

 

 

 

SCOTT@ORA11GR2>insert into t values(9);

 

 

 

1 row created.

 

 

 

SCOTT@ORA11GR2>commit;

 

 

 

Commit complete.

 

——在scott用户下对t表进行access级别的审计

 

SCOTT@ORA11GR2>audit update on t by access;  表示对t表的每次更新操作进行审计

 

(by access,每个符合审计的操作全部审计;by session,在一个会话中,同类型的操作只审计一条)

 

 

Audit succeeded.

 

 

 

5) 使用绑定变量的 sql 进行 update 测试

 

SCOTT@ORA11GR2>var v_num number;

 

SCOTT@ORA11GR2>exec :v_num:=1000;   (:v_num绑定变量,:v_num:=给绑定变量授予一个值)

 

 

PL/SQL procedure successfully completed.

 

 

 

SCOTT@ORA11GR2>update t set x=:v_num;

 

 

 

1 row updated.

 

 

 

SCOTT@ORA11GR2>commit;

 

 

 

Commit complete.

 

 

 

6) 返回 sys 账户,验证结果

 

SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text='update t set x=:v_num';

 

 

 

USERNAME   SQL_TEXT                  SQL_BIND

 

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

 

SCOTT      update t set x=:v_num      #1(4):1000

 

 

 

7) 另: sql 语句中“&变量”非绑定变量,在审计表中也可以清晰的看出来

 

SYS@ORA11GR2>conn scott/tiger

 

Connected.

 

SCOTT@ORA11GR2>select * from t;

 

 

 

         X

 

----------

 

      1000

 

 

 

SCOTT@ORA11GR2>update t set x=&val;

 

Enter value for val: 9

 

old   1: update t set x=&val

 

new   1: update t set x=9

 

 

 

1 row updated.

 

 

 

SCOTT@ORA11GR2>commit;

 

 

 

Commit complete.

 

 

 

——查看:

 

SCOTT@ORA11GR2>conn / as sysdba

 

SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text like 'update t set x=%';

 

 

 

USERNAME   SQL_TEXT                  SQL_BIND

 

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

 

SCOTT      update t set x=:v_num      #1(4):1000

 

SCOTT      update t set x=9

 

 

 

8) 取消审计(取消语句无需写 by access 子句)

 

SYS@ORA11GR2>conn scott/tiger

 

Connected.

 

SCOTT@ORA11GR2>noaudit update on t;

 

 

 

Noaudit succeeded.

 

实验结束

 

 

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/83011747