ORACLE AUDIT

穿精又带淫゛_ 提交于 2019-12-03 05:16:19

 

Oracle 作者:Davis_itpub 时间:2018-06-27 16:28:39  61  0

审计(Audit)用于监视用户所执行的数据库操作,并且Oracle 会将审计跟踪结果存放到OS 文件(默认位置为$ORACLE_BASE/admin /$ORACLE_SID/adump/),或数据库(存储在system 表空间中的SYS.AUD$表中,可通过视图dba_audit_trail 查看)中。审计可以提供有用的信息,用于揭示权限的滥用和误用。当需要一定的粒度时,DBA 可以使用细粒度的审计来监控对表中某些行或列的访问,而不仅仅是是否访问表。

 

在oracle 11g 中,审计功能(AUDIT_TRAIL)是默认开启的。审计数据默认存放SYSTEM 表空间下的AUD$审计字典基表上。开启审计数据库会增加消耗,降低业务性能,因此,如果不是很必要,在安装好数据库后,可适当选择关闭数据库审计功能。

 

Oracle 公司还推荐使用基于OS 文件的审计日志记录方式(OSaudit trail files),当AUDIT_TRAIL 设置为OS 时,审计记录文件将在AUDIT_FILE_DEST 参数所指定的目录中生成。

 

一、审计类型

语句审计

按照语句类型审计SQL 语句,而不论访问何种特定的模式对象。也可以在数据库中指定一个或多个用户,针对特定的语句审计这些用户

权限审计

审计系统权限,例如CREATE TABLE 或ALTER INDEX。和语句审计一样,权限审计可以指定一个或多个特定的用户作为审计的目标

模式对象审计

审计特定模式对象上运行的特定语句(例如,DEPARTMENTS 表上的UPDATE 语句)。模式对象审计总是应用于数据库中的所有用户

细粒度的审计

根据访问对象的内容来审计表访问和权限。使用程序包DBMS_FGA 来建立特定表上的策略

 

二、审计位置

审计记录可以发送到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

CREATE、ALTER、DROP 或TRUNCATE 集群

CONTEXT

CREATE CONTEXT 或DROP CONTEXT

DATABASE LINK

CREATE 或DROP 数据库链接

DIMENSION

CREATE、ALTER 或DROP 维数

DIRECTORY

 CREATE 或DROP 目录

INDEX

CREATE、ALTER 或DROP 索引

MATERIALIZED VIEW

CREATE、ALTER 或DROP 物化视图

NOT EXISTS

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

PROCEDURE

 CREATE 或DROP FUNCTION、LIBRARY、PACKAGE、

PACKAGE BODY PROCEDURE

PROFILE

 CREATE、ALTER 或DROP 配置文件

PUBLIC DATABASE LINK

CREATE 或DROP 公有数据库链接

PUBLIC SYNONYM

 CREATE 或DROP 公有同义词

ROLE

CREATE、ALTER、DROP 或SET 角色

ROLLBACK

SEGMENT CREATE、ALTER 或DROP 回滚段

SEQUENCE

 CREATE 或DROP 序列

SESSION

 登录和退出

SYNONYM

 CREATE 或DROP 同义词

SYSTEM

 AUDIT 系统权限的AUDIT 或NOAUDIT

SYSTEM GRANT

 GRANT 或REVOKE 系统权限和角色

TABLE

CREATE、DROP 或TRUNCATE 表

TABLESPACE

 CREATE、ALTER 或DROP 表空间

TRIGGER

 CREATE、ALTER(启用/禁用)、DROP 触发器;具有

ENABLE ALL TRIGGERS DISABLE ALL

TRIGGERS ALTER TABLE

TYPE

CREATE、ALTER 和DROP 类型以及类型主体

USER

CREATE、ALTER 或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';

 

五、权限统计

审计系统权限具有与语句审计相同的基本语法,但审计系统权限是在sql_statement_clause 中,而不是在语句中,指定系统权限。

 

例如,将ALTER TABLESPACE 权限授予所有的DBA,生成审计记录。启用对这种权限的审计的命令:

audit alter tablespace by access whenever successful;

每次成功使用ALTER TABLESPACE 权限时,都会将一行内容添加到SYS.AUD$。

 

使用SYSDBA 和SYSOPER 权限或者以SYS 用户连接到数据库的系统管理员可以利用特殊的审计。为了启用这种额外的审计级别,可以设置初始参数AUDIT_SYS_OPERATIONS 为TRUE。这种审计记录发送到与操作系统审计记录相同的位置。当使用其中一种权限时执行的所有SQL 语句,以及作为用户SYS 执行的任何SQL 语句,都会发送到操作系统审计位置。

 

SYS@orcl> alter system set AUDIT_SYS_OPERATIONS=true

scope=spfile;

SYS@orcl> startup force

[oracle@ocp Desktop]$ cd /u01/app/oracle/admin/orcl/adump/

Vi 查看审计内容

 

 

权限审计示例:

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

SYS@orcl> audit session by scott;

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

dba_priv_audit_opts where user_name='SCOTT' order by

user_name;

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';

SYS@orcl> noaudit create table by scott;

 

六、对象审计

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

schema_object_clause 指定对象访问的类型以及访问的对象。

 

可以审计特定对象上14 种不同的操作类型。对象审计选项如下:

 象 选 项

说 明

ALTER

改变表、序列或物化视图

AUDIT

审计任何对象上的命令

COMMENT

添加注释到表、视图或物化视图

DELETE

从表、视图或物化视图中删除行

EXECUTE

执行过程、函数或程序包

FLASHBACK

执行表或视图上的闪回操作

GRANT

 授予任何类型对象上的权限

INDEX

 创建表或物化视图上的索引

INSERT

将行插入表、视图或物化视图中

LOCK

锁定表、视图或物化视图

READ

对DIRECTORY 对象的内容执行读操作

RENAME

重命名表、视图或过程

SELECT

从表、视图、序列或物化视图中选择行

UPDATE

更新表、视图或物化视图

 

 

对象审计示例:

SYS@orcl>show parameter audit_trail

SYS@orcl> alter system set audit_trail=db_extended

scope=spfile;

SYS@orcl>show parameter audit_trail

SYS@orcl> startup force

SYS@orcl> alter user scott account unlock identified by

scott;

SYS@orcl> audit select,insert,delete on scott.dept by

access;

SYS@orcl> select

object_name,object_type,alt,del,ins,upd,sel from

dba_obj_audit_opts;

SYS@orcl> conn scott/scott

SCOTT @orcl> insert into dept values(11,'aa','aa');

SCOTT @orcl> insert into dept values(12,'bb','bb');

SCOTT @orcl> commit;

SCOTT@orcl> conn / as sysdba

SYS@orcl> select timestamp,action_name,sql_text from

dba_audit_trail where owner='SCOTT';

SYS@orcl> noaudit select,insert,delete on scott.dept;

 

审计查询

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 select,insert,delete on scott.dept by

access;

SYS@orcl>delete sys.aud$;

SYS@orcl> conn scott/scott

SCOTT @orcl> insert into dept values(13,'cc','cc');

SCOTT @orcl>select * from dept;

SCOTT @orcl>delete from dept where deptno=11;

SCOTT @orcl>update dept set loc='abc' where deptno=12;

SCOTT@orcl> conn / as sysdba

SYS@orcl>select

username,timestamp,owner,action_name,obj_name from

dba_audit_object;

 

七、细粒度的审计

细粒度的对象审计,或称为FGA,审计变得更为关注某个方面,并且更为精确。由称为DBMS_FGA 的PL/SQL 程序包实现FGA。

 

使用标准的审计,可以轻松发现访问了哪些对象以及由谁访问,但无法知道访问了哪些行或列。细粒度的审计可解决这个问题,它不仅为需要访问的行指定谓词(或where 子句),还指定了表中访问的列。通过只在访问某些行和列时审计对表的访问,可以极大地减少审计表条目的数量。

 

程序包DBMS_FGA 具有4 个过程:

ADD_POLICY 添加使用谓词和审计列的审计策略

DROP_POLICY 删除审计策略

DISABLE_POLICY 禁用审计策略,但保留与表或视图关联的策略

ENABLE_POLICY 启用策略

 

用户wl 通常每天访问HR.EMPLOYEES 表,查找雇员的电子邮件地址。系统管理员怀疑wl 正在查看经理们的薪水信息,因此他们建立一个FGA 策略,用于审计任何经理对SALARY 列的任何访问。

 

可以使用数据字典视图DBA_FGA_AUDIT_TRAIL 访问细粒度审计的审计记录。如果一般需要查看标准的审计行和细粒度的审计行,则数据字典视图DBA_COMMON_AUDIT_TRAIL 结合了这两种审计类型中的行。

 

示例如下:

[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> create user wl identified by wl;

SYS@orcl> grant create session to wl;

SYS@orcl> grant select on hr.employees to wl;

SYS@orcl> alter user hr account unlock identified by hr;

SYS@orcl> begin

dbms_fga.add_policy(object_schema => 'HR',

object_name => 'EMPLOYEES',

policy_name => 'SAL_SELECT_AUDIT',

audit_condition => 'instr(job_id,''_MAN'') > 0',

audit_column => 'SALARY');

end;

/

SYS@orcl> conn wl/wl

WL@orcl> select employee_id, first_name, last_name, email

from hr.employees where employee_id = 114;

WL@orcl> conn / as sysdba

SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')

timestamp,object_schema, object_name, policy_name,

statement_type from dba_fga_audit_trail where db_user =

'WL';

SYS@orcl> conn wl/wl

WL@orcl> select employee_id, first_name, last_name, salary

from hr.employees where employee_id = 114;

WL@orcl> conn / as sysdba

SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')

timestamp,object_schema, object_name, policy_name,

statement_type from dba_fga_audit_trail where db_user =

'WL';

 

第一个查询访问经理信息,但没有访问SALARY 列。第二个查询与第一个查询相同,但是访问了SALARY 列,因此触发了FGA 策略,从而在审计跟踪中生成了一行

 

 

八、与审计相关的数据字典视图

数据字典视图

说 明

AUDIT_ACTIONS

包含审计跟踪动作类型代码的描述,例如

INSERTDROP VIEWDELETELOGON LOCK

DBA_AUDIT_OBJECT

 与数据库中对象相关的审计跟踪记录

DBA_AUDIT_POLICIES

 数据库中的细粒度审计策略

DBA_AUDIT_SESSION

与CONNECT 和DISCONNECT 相关的所有审计跟踪记录

DBA_AUDIT_STATEMENT

与GRANT、REVOKE、AUDIT、NOAUDIT 和ALTER SYSTEM命令相关的审计跟踪条目

DBA_AUDIT_TRAIL

 包含标准审计跟踪条目。USER_AUDIT_TRAIL 只包含已连接用户的审计行

DBA_FGA_AUDIT_TRAIL

细粒度审计策略的审计跟踪条目

DBA_COMMON_AUDIT_TRAIL

 将标准的审计行和细粒度的审计行结合在一个视图中

DBA_OBJ_AUDIT_OPTS

 对数据库对象生效的审计选项

DBA_PRIV_AUDIT_OPTS

 对系统权限生效的审计选项

DBA_STMT_AUDIT_OPTS

 对语句生效的审计选项

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31520497/viewspace-2156868/,如需转载,请注明出处,

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!