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

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

INSERT、DROP VIEW、DELETE、LOGON 和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/,如需转载,请注明出处,

ORACLE AUDIT的更多相关文章

  1. [20190530]oracle Audit文件管理.txt

    [20190530]oracle Audit文件管理.txt --//昨天听课,讲一些oracle相关安全的问题,对方提到audit file的管理,应该引入OS audit,这样目的是仅仅root查 ...

  2. 转- Oracle Audit 功能的使用和说明

    http://blog.itpub.net/9399028/viewspace-712457/审计(Audit) 用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在syst ...

  3. Oracle Audit 审计功能的认识与使用

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

  4. ORACLE AUDIT 审计

    转自 http://blog.csdn.net/dnnyyq/article/details/4525980 1.什么是审计 审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计 ...

  5. [Oracle]Audit(一)--认识Audit

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

  6. Oracle Audit 功能的使用和说明

    http://blog.itpub.net/9399028/viewspace-712457/审计(Audit) 用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在syst ...

  7. [Oracle]Audit(二)--清理Audit数据

    在上一篇,初步了解了Audit的作用以及如何使用Audit,本篇记录如何手动清理Audit数据. (一) 概述 Audit的数据主要存储在sys.aud$表中,该表默认位于system表空间中,我们根 ...

  8. Oracle数据库11g各版本介绍及功能比较

    .标准版和企 业版.所有这些版本都使用相同的通用代码库构建,这意味着企业的数据库管理软件可以轻松地从规模较小的单一处理器服务器扩展到多处理器服务器集 群,而无需更改一行代码.Oracle数据库11g企 ...

  9. Oracle 中记录用户登录信息

    我们可以使用 Oracle Audit 函数来记录用户登录信息,但是如果开放了 Audit 函数将会使 Oracle 性能下降,甚至导致 Oracle 崩溃.那我们如何才能记录用户登录信息呢?其实我们 ...

随机推荐

  1. javascript_16-对象字面量

    JSON与对象字面量相似,仅仅是属性需要使用双引号引号引起. json是描述数据的一种规范 什么是JSON JavaScript Object Notation (JavaScript 对象表示形式) ...

  2. Unable to guess the mime type as no guessers are available 2 9

    做了一个上传图片的功能,在本地上传通过,服务器报 bug Unable to guess the mime type as no guessers are available(Did you enab ...

  3. Android笔记(五十八)Android总结:四大组件——Activity篇

    什么是Activity Activity是一种包含用户界面的组件,主要用于和用户进行交互,一个APP通常由多个Activity组成. 每个Activity都对应一个布局文件,通过setContentV ...

  4. Scyther tool 入门

    1.Scyther 适合分析什么样的协议    首先协议分析工具并不是可以分析所有的协议,每种协议都有其自己适合的分析方法,并不都是可以使用形式化方法来分析. 目前协议分析方法: 模态逻辑分析(BAN ...

  5. Spark 用Scala和Java分别实现wordcount

    Scala import org.apache.spark.{SparkConf, SparkContext} object wordcount { def main(args: Array[Stri ...

  6. 【HICP Gauss】数据库 数据库管理(调优 启动流程)-4

    数据库参数: 创建数据库 调优数据库 其他---->控制资源使用 控制数据库内部机制 设置重要属性 参数数据保存在cfg/Zengine.ini 文件中 参数保存使用 key=value的保存形 ...

  7. k8s 如何支持私有镜像

    k8s如何支持私有镜像 实现无密钥编排 kubectl create secret docker-registry regsecret --docker-server=registry.cn-shen ...

  8. Linux中通过ssh将客户端与服务端的远程连接

    前提需要:1.在VMware中装上两台linux虚拟机,本博客使用的都是CentOS 7.2.两部虚拟机可以通过命令ping通.3.两部虚拟机中已经通过yum本地仓库安装了sshd服务. 首先  1. ...

  9. bash 实用技巧

    一..将文件的内容赋给一个变量: file=$(cat filelist) file=$(< file) NOTE:后者性能比前者好 二..bash 分组匹配: HOSTNAME='mysql- ...

  10. WebService接口学习【1】

    工具: 1.Eclipse(or)IDEA编辑器 2.SoapUI测试工具 1.wsdl文件标签体的约束: 一:namespace:相当于文件的id 二:targetNamespace属性:用来指定s ...