AUDIT审计(2)

来源:这里教程网 时间:2026-03-03 11:44:38 作者:

二、审计位置

审计记录可以发送到SYS.AUD$数据库表或操作系统文件。为了启用审计并指定记录审计记录的位置,将初始参数AUDIT_TRAIL 设置为如下几个值之一:

NONE, FALSE

 禁用审计

OS

启用审计将审计记录发送到操作系统文件

DB, TRUE

 启用审计,将审计记录发送到SYS.AUD$

DB_EXTENDED

启用审计,将审计记录发送到SYS.AUD$表,并在CLOB SQLBIND SQLTEXT 中记录额外的信息

XML

 启用审计,以XML 格式写所有审计记录

EXTENDED

 启用审计,在审计跟踪中记录所有列,包括SqlText SqlBind 的值

 

参数AUDIT_TRAIL 不是动态的,为了使AUDIT_TRAIL 参数中的改动生效,必须关闭数据库并重新启动。在对SYS.AUD$表进行审计时,应该注意监控该表的大小,以避免影响SYS 表空间中其他对象的空间需求。推荐周期性归档SYS.AUD$中的行,并且截取该表。

 

在Oracle11g 中CREATE SESSION 作为受审计的权限来被记录,因此当SYSTEM 表空间因磁盘空间而无法扩展时将导致这部分审计记录无法生成,这将最终导致普通用户的新会话将无法正常创建,普通用户将无法登陆数据库。在这种场景中仍可以使用SYSDBA 身份的用户创建会话,在将审计数据合适备份后删除一部分记录,或者TRUNCATE AUD$都可以解决上述问题。在默认情况下会以AUTOEXTEND ON 自动扩展选项创建SYSTEM 表空间,因此系统表空间在必要时会自动增长,我们所需注意的是磁盘上的剩余空间是否能够满足其增长需求,以及数据文件扩展的上限,对于普通的8k smallfile 表空间而言单个数据文件的最大尺寸是32G。

 

三、开户审计功能

SQL> alter system set audit_trail=db_extended scope=spfile;

重启数据库生效:

SQL> startup force

 

四、语句审计:

对于语句审计,audit 命令的格式看起来如下所示:

AUDIT sql_statement_clause BY {SESSION |ACCESS}WHENEVER [NOT] SUCCESSFUL;

参数如下:

sql_statement_clause 包含很多条不同的信息,例如希望审计的SQL 语句类型以及审计什么人。

by access 在每次动作发生时都对其进行审计,by session 只审计一次。默认是by session。

whenever successful 审计成功的动作:没有生成错误消息的语句。

whenever not successful 审计语句的命令是否失败

 

对于大多数类别的审计方法,如果确实希望审计所有类型的表访问或某个用户的任何权限,则可以指定all 而不是单个的语句类型或对象。

 

表1-1 列出了可以审计的语句类型,并且在每个类别中包含了相关语句的简要描述。如果指定all,则审计该列表中的任何语句。然而,表1-2 中的语句类型在启用审计时不属于all 类别;必须在audit 命令中显式地指定它们。

 

表1-1 包括在ALL 类别中的可审计语句

 句 选 项

SQL 操作

ALTER SYSTEM

所有ALTER SYSTEM 选项,例如,动态改变实例参

数,切换到下一个日志文件组,以及终止用户会话

CLUSTER

CREATEALTERDROP TRUNCATE 集群

CONTEXT

CREATE CONTEXT DROP CONTEXT

DATABASE LINK

CREATE DROP 数据库链接

DIMENSION

CREATEALTER DROP 维数

DIRECTORY

 CREATE DROP 目录

INDEX

CREATEALTER DROP 索引

MATERIALIZED VIEW

CREATEALTER DROP 物化视图

NOT EXISTS

由于不存在的引用对象而造成的SQL 语句的失败

PROCEDURE

 CREATE DROP FUNCTIONLIBRARYPACKAGE

PACKAGE BODY PROCEDURE

PROFILE

 CREATEALTER DROP 配置文件

PUBLIC DATABASE LINK

CREATE DROP 公有数据库链接

PUBLIC SYNONYM

 CREATE DROP 公有同义词

ROLE

CREATEALTERDROP SET 角色

ROLLBACK

SEGMENT CREATEALTER DROP 回滚段

SEQUENCE

 CREATE DROP 序列

SESSION

 登录和退出

SYNONYM

 CREATE DROP 同义词

SYSTEM

 AUDIT 系统权限的AUDIT NOAUDIT

SYSTEM GRANT

 GRANT REVOKE 系统权限和角色

TABLE

CREATEDROP TRUNCATE 

TABLESPACE

 CREATEALTER DROP 表空间

TRIGGER

 CREATEALTER(启用/禁用)DROP 触发器;具有

ENABLE ALL TRIGGERS DISABLE ALL

TRIGGERS ALTER TABLE

TYPE

CREATEALTER DROP 类型以及类型主体

USER

CREATEALTER DROP 用户

VIEW

CREATE DROP 视图

 

 

 

表1-2 显式指定的语句类型

 句 选 项

SQL 操 作

ALTER SEQUENCE

 任何ALTER SEQUENCE 命令

ALTER TABLE

任何ALTER TABLE 命令

COMMENT TABLE

 添加注释到表、视图、物化视图或它们中的任何列

DELETE TABLE

 删除表或视图中的行

EXECUTE PROCEDURE

 执行程序包中的过程、函数或任何变量或游标

GRANT DIRECTORY

 GRANT REVOKE DIRECTORY 对象上的权限

GRANT PROCEDURE

 GRANT REVOKE 过程、函数或程序包上的权限

GRANT SEQUENCE

GRANT REVOKE 序列上的权限

GRANT TABLE

 GRANT REVOKE 表、视图或物化视图上的权限

GRANT TYPE

 GRANT REVOKE TYPE 上的权限

INSERT TABLE

 INSERT INTO 表或视图

LOCK TABLE

 表或视图上的LOCK TABLE 命令

SELECT SEQUENCE

 引用序列的CURRVAL NEXTVAL 的任何命令

SELECT TABLE

 SELECT FROM 表、视图或物化视图

UPDATE TABLE

 在表或视图上执行UPDATE

 

注意:

从Oracle Database 11g 开始,只有在初始参数AUDIT_TRAIL 被设置为DB_EXTENDED 时,才填充DBA_AUDIT_TRAIL 中的列SQL_TEXT 和SQL_BIND。默认情况下,AUDIT_TRAIL 的值是DB。

 

示例

[oracle@ocp Desktop]$ rlwrap sqlplus / as sysdba

SYS@orcl>show parameter audit_trail

SYS@orcl> alter system set audit_trail=db_extended

scope=spfile;

SYS@orcl> startup force

SYS@orcl>show parameter audit_trail

SYS@orcl> alter user scott account unlock identified by

scott;

SYS@orcl> audit create table by scott by access;

SYS@orcl>select user_name,audit_option,success,failure from

dba_stmt_audit_opts where user_name='SCOTT';

SYS@orcl> conn scott/scott

SCOTT@orcl> create table tt(id int);

SCOTT@orcl> conn / as sysdba

SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

HH24:MI') Timestamp,obj_name, action_name, sql_text from

dba_audit_trail where username= 'SCOTT';

 

使用noaudit 命令关闭审计,如下所示:

SYS@orcl> noaudit create table by scott;

SYS@orcl> conn scott/scott

SCOTT@orcl> create table ee(id int);

SCOTT@orcl> conn / as sysdba

SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

HH24:MI') Timestamp,obj_name, action_name, sql_text from

dba_audit_trail where username= 'SCOTT';

相关推荐