Oracle数据库审计策略

Oracle数据库默认是关闭审计的,一旦开启了会对oracle数据库的性能产生影响。

Oracle默认安装后审计策略设置

默认情况下,审计策略是关闭的,而且审计记录存储的模式也未选择。所以默认情况下,某用户对某表做了某操作都是不做任何记录的。

audit_sys_operations 值只有TRUE和FALSE两个之分。

但是audit_trail值有如下情况:(1)audit_trail=’DB’

表示把审计日志记录到数据库sys.audit$表中。(2)audit_trail=’DB,extended’

在DB选项基础上,在audit$表中还增加了SQLBIND和SQLTEXT两个clob栏位,用来存储SQLBIND和SQLTEXT信息。(3) audit_trail=‘OS’

审计结果存放在操作系统的审计信息中,若是windows 平台,audit

trail会记录在windows的事件管理器中,若是linux/unix平台则会记录在audit_file_dest参数指定文件中。(4)audit_trail=‘xml’审计结果存放在XML中,

并包含XML文件可以由数据库以外的工具方便地处理,过滤出有用的事件,与其它系统中的审计日志组合,并格式化HTML显示,操作系统文件提供比SYS.AUD$表更强大的安全性,特别是在希望阻止数据库管理员查看或修改审计跟踪的情况下,即使关闭数据库实例,仍然可以继续使用保存在数据库外的审计日志。用以下代码确定写入审计文件的目录:

audit_file_dest='directorypath'

。注意,directorypath这不是一个目录对象,而是操作系统目录的实际路径名。(5)

audit_trail=‘xml,extended’,存储为xml,并包含SQLBIND和SQLTEXT信息。audit_trail是static参数,每次修改后需要重新启动数据库才能生效。

标准数据库审计的数据放于基表aud$上,而aud$位于system表空间上,众所周知,system表空间是存放数据字典表的地方,为避免因审计而较大的影响数据库的性能,应将此表移到其它表空间上。生产环境建议建一个单独的表空间存放审计表。

底层表是AUD$,上层该查询哪些表可通过SQL>

Select * from dict d where d.table_name like

‘%AUD%’;来查询

设置audit_trail值为DB,把审计日志记录到数据库sys.aud$表中。SQL > alter system set audit_sys_operations=TRUE scope=spfile

;

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

然后重启数据库

审计级别

当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。

标准的数据库审计(Standard database

auditing)

参数audit_trail=db后,就可以开始审计了,默认情况下,同一session查多次只会记录一次,不同session不论用户是否相同,查几次就会记录几次。

SQL>audit select on

scott.emp;

凡是有谁查询SCOTT用户的EMP表,就将它记录进aud$

表。

如果要让它哪怕是同一个session,查一次就要它记录一次,

如下(默认是by session,所依此处改成by

access)

SQL> audit select on scott.emp by access;

对数据库的影响极大,会造成最多50%性能的下降。

要做到审计要有两个条件:1.修改audit_sys_operations

和audit_trail

审计参数值(此处可理解为审计进程)。2.建立针对细致的审计策略。关闭审计功能,只要关闭以上两个条件之一即可。默认审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间有足够的空间存放审计信息。若SYSTEM表空间没有足够的空间存放审计信息或者为了不影响系统的性能保护SYSTEM表空间,可以将审计结果表从system表空间里移动到别的表空间上.

可以使用下面的语句来进行移动:实际上sys.aud$表上包含了两个lob字段,并不是简单的move

table就可以。下面是具体的过程:

alter table sys.aud$

move tablespace users;

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

USERS);

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

USERS);

alter index sys.I_AUD1 rebuild tablespace users;

alter table

audit_actions move tablespace;

alter index

i_audit_actions rebuild online tablespace;可以通过以下命令查看具体表空间剩余大小:

SQL> select

sum(bytes)/1024/1024 as free_space , tablespace_name from

dba_free_space group by tablespace_name ;

改变审计表空间后,审计记录不受影响。

建立细致的审计策略

SQL> Execute

dbms_fga.add_policy(object_schema=>'scott',object_name=>'dept',policy_name=>'chk_dept',statement_types=>'insert,update,delete');

(命令是建立针对scott账户对dept表进行insert、update、delete操作进行审计的策略)

测试针对insert操作的审计,

向dept表中插入一条数据,然后去查看是否对产生审计日志。

Sql>select t.timestamp,t.sql_text from sys.dba_fga_audit_trail

t;

如果为了节约磁盘空间,提高数据库性能。可以选择关闭审计策略。

SQL>Execute

dbms_fga.drop_policy(object_schema=>'scott',object_name=>'dept',policy_name=>'chk_dept');

基于值的审计(Value-based

auditing)

创建一个表sys_log,此表用来记录sys以sysdba角色登录数据库的情况。

SQL> create

table sys_log(a varchar2(200)) tablespace users;

创建一个触发器,在sys登录数据库时就往sys_log表中插入此sys在何时,何地,以何种操作系统用户的方式登录数据库中。

create or replace trigger trg_syslog after logon on database

when (user='SYS')

begin

insert

into

sys_log

values('Logon' || user || 'at' to_char(sysdate,'yyyy-mm-dd

hh24:mi:si')

|| sys_context('userenv','ip_address') ||

sys_context('userenv','os_user'));

commit;

end;

/

Conn / as sysdba与conn sys/oracle 由于都是以本地方式登录,所以IP不会记录。

通过tnsname网络方式登录就会记录IP。

细粒度审计

(Fine-grained auditing)

首先,创建一张表。

SQL>create table

sys_acc (a varchar2(200)) tablespace users;

其次,创建一个存储过程。细粒度审计需要fire

a procedure意译为触发一个存储过程。

create or replace procedure sys_a(

object_schema varchar2,

object_name varchar2,

policy_name varchar2)

as

begin

insert

into

sys_acc

values

(sys_context('userenv','os_user'));

commit;

end;

/

之后,加上一个规则,这个规则就是你想审计的内容。例:凡是有人查了empno

=7839的sal就将包含它查询所用SQL语句的相关信息记录下来。

begin

dbms_fga.add_policy(

object_schema

=> 'SCOTT',

object_name

=> 'EMP',

policy_name

=> 'policyscott',

audit_condition

=> 'empno=7839',

audit_column

=> 'sal',

handler_schema

=> 'sys',

handler_module

=> 'sys_a',

enable

=>

TRUE,

statement_types

=> null);

end;

/

数据库常用审计查询语句

1.查看审计日志

SELECT * FROM V$PARAMETER

WHERE NAME='audit_trail';

2.查看重要操作是否留存审计记录

(1)

SELECT * FROM

DBA_STMT_AUDIT_OPTS;

(2)

SELECT * FROM

DBA_OBJ_AUDIT_OPTS;

(3)

SELECT * FROM

DBA_PRIV_AUDIT_OPTS;

3.查看探测未成功登入的设置

SELECT * FROM

DBA_AUDIT_SESSION;

4.查看数据库用户的权限

(1)

SELECT * FROM

SYS.DBA_USERS;

(2)

SELECT * FROM

SYS.DBA_ROLES;

(3)

SELECT * FROM

SYS.DBA_ROLE_PRIVS;

5.查看DBA角色用户数目

SELECT substr(b.grantee,1,length(b.grantee)) ||

';'

||

substr(b.granted_role,1,length(b.granted_role))

FROMsys.dba_role_privs b,sys.dba_roles

c

WHEREb.granted_role = c.role

and

c.role =

'DBA'

order byb.grantee,b.granted_role;

6.查看DBA的资源参数和密码参数(加入了对密码策略设置函数的查询)

(1)

SELECT * FROM

SYS.DBA_PROFILES;

(2)

SELECT * FROM

DBA_SOURCE

WHERE TYPE='FUNCTION' AND NAME='VERIFY_FUNCTION';

7.查看用户远程登入数据库功能是否开启

SELECT NUM,NAME,TYPE,VALUE,ISDEFAULT,DESCRIPTION FROM

SYS.V_$PARAMETER

ORDER

BY NAME;

在查询结果中只需对一下两个查询检查:

SELECT NUM,NAME,TYPE,VALUE,ISDEFAULT,DESCRIPTION FROM

SYS.V_$PARAMETER

WHERE

NAME='os_authent_profilx'

OR NAME='remote_os_authent';

(1) os_authent_profilx

(2) remote_os_authent

8.查看当前数据库版本

SELECT * FROM V$VERSION;

9.数据库DBA用户列表

SELECT substr(b.grantee,1,length(b.grantee)) ||

';'

||

substr(b.granted_role,1,length(b.granted_role))

FROMsys.dba_role_privs b,sys.dba_roles

c

WHEREb.granted_role = c.role

and

c.role =

'DBA'

order byb.grantee,b.granted_role;

数据库oracle审计,Oracle数据库审计策略相关推荐

  1. 使用Oracle的审计功能监控数据库中的可疑操作

    看一下Oracle的审计功能(包括FGA细粒度审计)能给我们带来些什么的强悍效果. 我将通过这个小文儿向您展示一下Oracle很牛的审计功能.Follow me.  1.使用审计,需要先激活审计功能 ...

  2. oracle数据库登录审计,oracle数据库审计

    一.何谓数据库审计? 数据库审计,就是对数据库的活动做跟踪记录,主要包括数据库连接,SQL语句执行,数据库对象访问这些方面的跟踪记录. 二.审记记录的存储方式 分为两种:一种是存储在操作系统文件中,一 ...

  3. oracle开源数据库审计,oracle数据库审计

    一.何谓数据库审计? 数据库审计,就是对数据库的活动做跟踪记录,主要包括数据库连接,SQL语句执行,数据库对象访问这些方面的跟踪记录. 二.审记记录的存储方式 分为两种:一种是存储在操作系统文件中,一 ...

  4. oracle数据库审计os,审计Oracle数据库的使用

    Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 仅使用权限.角色.视图.甚至细粒度安全策略建立访问控制系统还不能保证数据 ...

  5. oracle10 数据库审计,Oracle数据库审计用法实例

    本节是从ORACLE METALINK的DOC:167293.1翻译整理而来的.通过举例的方式来说明ORACLE审计的用法.ORACLE的审计可以从语句级.对象 本节是从Oracle METALINK ...

  6. 使用oracle数据库审计,Oracle数据库审计功能详解

    一.审计分类: Oracle中审计总体上可分为"标准审计"和"细粒度审计"后者也称为"基于政策的审计",在Oracle10G之后功能得到很大 ...

  7. fga 例子 oracle,利用Oracle FGA实现审计

    原文出处:http://blog.sina.com.cn/s/blog_3f2ef11801000aad.html Oracle9i Database 推出了一种称为细粒度审计 (FGA) 的新特性. ...

  8. oracle学习笔记之 审计

    Oracle数据库审计 数据库审计是监视并记录选定的用户数据库操作.主要分为标准审计和精细粒度审计(FGA,Fine-Grained Auditing),标准审计可在语句级.对象级.权限级进行审计:精 ...

  9. Oracle审计篇——统一审计

    一. 统一审计作用 统一审计跟踪从各种来源捕获审计信息.通过统一审计,您可以从以下来源捕获审计记录: 来自统一审计策略和AUDIT设置中的审计记录(包括sys的审计记录) 来自DBMS_FGA的细粒度 ...

最新文章

  1. 【转】IOS中Json解析的四种方法
  2. 2017浙江省赛 B - Problem Preparation ZOJ - 3959
  3. java 压缩文件夹_java 实现压缩文件(单文件 或 文件夹)
  4. 升级Win11正式版啦!这优化神了,界面不输苹果,速度飞快让人秒弃Win10!
  5. 任务七:实现常见的技术产品官网的页面架构及样式布局
  6. JavaScript学习笔记(九)--内置函数
  7. STM32 (零)--------STM32介绍
  8. 瑞利分布概率密度函数推导_IBL推导及实现
  9. 无法启用Windows Hello-某些设置由您的组织管理
  10. Linux配置手册(八)基于MySQL构建PHP环境
  11. vb读取mysql数据库数据_VB读取ORACLE数据库的两种方法
  12. 实力秒杀ArcGIS,各种地图数据一键快速制图
  13. 樊登读书搞定读后感_樊登读书会《搞定》听后感
  14. Navigation Bar的背景图片设置
  15. GeographicLib安装
  16. PDFBOX将PDF转图片(PNG背景透明)
  17. [原创] RT7 Lite win7旗舰版精简方案
  18. IMF: Interactive Multimodal Fusion Model for Link Prediction
  19. 记一次惨痛的安装教训RegisterAddon
  20. 探究下疯狂动物城Zootopia为何如此高分的原因

热门文章

  1. TRY HACK ME| BLUE 永恒之蓝
  2. 青岛新媒体运营教程:三步浅谈活动运营,拆解策划实施
  3. Unity 仿 了不起修仙模拟器画符
  4. 怎么实现黑白负片爆闪效果,有Vegas就足够啦
  5. AMBA总线协议(一)——一文看懂APB总线协议
  6. PAT(乙级)1090.危险品装箱(25)
  7. HDU-3635 Dragon Balls
  8. Symfony HttpClient教程
  9. 金融科技专业计算机课程,课程大纲-1819S1-互联网金融科技
  10. 我放弃了年薪20万offer,挑战自动化测试(一)