Oracle 审计
1、什么是审计
审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可议决视图dba_audit_trail查看)中。默认情况下审计是没有开启的。
不管你能无法drop table if exists admin 打开数据库的审计功能,以下这些操作系统会强制记载:用维护员权限连接Instance;启动数据库;关上数据库。
不管你能无法drop table if exists admin 打开数据库的审计功能,以下这些操作系统会强制记载:用维护员权限连接Instance;启动数据库;关上数据库。
2、和审计相关 的两个首要参数
Audit_sys_operations:
默认为false,当配置为true时,所有sys用户(包含以sysdba,sysoper身份登录的用户)的操作都会被记载,audit trail不会写在aud$表中,这个很好理会,假如数据库还未启动aud$无法用,那么像conn /as sysdba这样的连接信息,只好记载在其它地点。假如是windows平台,au
默认为false,当配置为true时,所有sys用户(包含以sysdba,sysoper身份登录的用户)的操作都会被记载,audit trail不会写在aud$表中,这个很好理会,假如数据库还未启动aud$无法用,那么像conn /as sysdba这样的连接信息,只好记载在其它地点。假如是windows平台,au
dti trail会记载在windows的事件维护中,假如是linux/unix平台则会记载在audit_file_dest参数指定的文件中。
Audit_trail:
None:是默认值,不做审计;
DB:将audit trail 记载在数据库的审计相关 表中,如aud$,审计的结果只有连接信息;
DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的详细语句;
OS:将audit trail 记载在操作系统文件中,文件名由audit_file_dest参数指定;
XML:10g里新增的。
None:是默认值,不做审计;
DB:将audit trail 记载在数据库的审计相关 表中,如aud$,审计的结果只有连接信息;
DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的详细语句;
OS:将audit trail 记载在操作系统文件中,文件名由audit_file_dest参数指定;
XML:10g里新增的。
注:这两个参数是static参数,须要重新启动数据库才能生效。
3、审计级别
当开启审计功能后,可在三个级别对数据库执行 审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement:
按语句来审计,比如audit table 会审计数据库中所有的create table,drop table,truncate table语句,alter session by cmy会审计cmy用户所有的数据库连接。
Privilege:
按权限来审计,当用户运用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户a 访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。留心用户是自身表的所有者,所以用户访问自身的表不会被审计。
按权限来审计,当用户运用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户a 访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。留心用户是自身表的所有者,所以用户访问自身的表不会被审计。
Object:
按对象审计,只审计on重要字指定对象的相关 操作,如aduit alter,delete,drop,insert on cmy.t by scott; 这里会对cmy用户的t表执行 审计,但同时运用了by子句,所以只会对scott用户发起的操作执行 审计。留心 Oracle没有提供对schema中所有对象的审计功能,只好一个一个对象审计,对于后面建立的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;后, 对于随后建立的对象的drop操作都会审计。但这个default会对之后建立的所有数据库对象有效,似乎没方法指定只对某个用户建立的对象有效,想比trigger能够对schema的DDL执行 “审计”,这个功能稍显不足。
按对象审计,只审计on重要字指定对象的相关 操作,如aduit alter,delete,drop,insert on cmy.t by scott; 这里会对cmy用户的t表执行 审计,但同时运用了by子句,所以只会对scott用户发起的操作执行 审计。留心 Oracle没有提供对schema中所有对象的审计功能,只好一个一个对象审计,对于后面建立的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;后, 对于随后建立的对象的drop操作都会审计。但这个default会对之后建立的所有数据库对象有效,似乎没方法指定只对某个用户建立的对象有效,想比trigger能够对schema的DDL执行 “审计”,这个功能稍显不足。
4、审计的一些其他选项
by access / by session:
by access 每一个被审计的操作都会生成一条audit trail。
by access 每一个被审计的操作都会生成一条audit trail。
by session 一个会话里面同类型的操作只会生成一条audit trail,默认为by session。
whenever [not] successful:
whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计,
whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计。
whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计,
whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计。
5、和审计相关 的视图
dba_audit_trail:保存所有的audit trail,实际上它只是一个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一个子集。
dba_stmt_audit_opts:能够用来查看statement审计级别的audit options,即数据库配置过哪
dba_stmt_audit_opts:能够用来查看statement审计级别的audit options,即数据库配置过哪
些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似
all_def_audit_opts:用来查看数据库用on default子句配置了哪些默认对象审计。
all_def_audit_opts:用来查看数据库用on default子句配置了哪些默认对象审计。
6、撤销审计
将对应审计语句的audit改为noaudit即可,如audit session whenever successful对应的撤销审计语句为noaudit session whenever successful;
7、10g中的审计告知一切
Oracle 数据库 10g 审计以一种特别细致的级别捕获用户行为,它能够消除手动的、基于触发器的审计。
假定用户 Joe 具有更新那张表的权限,并按如下所示的方式更新了表中的一行数据:
update SCOTT.EMP set salary = 12000 where empno = 123456;
您如何 在数据库中跟踪这种行为呢?在 Oracle 9i 数据库及其较低版本中,审计只好捕获“谁”执行此操作,而无法捕获执行了“什么”内容。比方,它让您知晓 Joe 更新了 SCOTT 所有的表EMP,但它不会显示他更新了该表中员工号为 123456 的薪水列。它不会显示修改
假定用户 Joe 具有更新那张表的权限,并按如下所示的方式更新了表中的一行数据:
update SCOTT.EMP set salary = 12000 where empno = 123456;
您如何 在数据库中跟踪这种行为呢?在 Oracle 9i 数据库及其较低版本中,审计只好捕获“谁”执行此操作,而无法捕获执行了“什么”内容。比方,它让您知晓 Joe 更新了 SCOTT 所有的表EMP,但它不会显示他更新了该表中员工号为 123456 的薪水列。它不会显示修改
前的薪水列的值 — 要捕获如此细致的修改,您将不得不编写您自身的触发器来捕获修改前的值,或运用 LogMiner 将它们从存档日志中检索出来。
细粒度审计(FGA) ,是在 Oracle 9i 中引入的,能够记载 SCN 号和行级的修改以重建旧的数据,但是它们只好用于 select 语句,而无法用于 DML ,如 update 、insert 和delete 语句。因此,对于 Oracle 数据库 10g 之前的版本,运用触发器虽然对于以行级跟踪用户原始的修改是没有吸引力的挑选,但它也是独一可靠的要领。
细粒度审计(FGA) ,是在 Oracle 9i 中引入的,能够记载 SCN 号和行级的修改以重建旧的数据,但是它们只好用于 select 语句,而无法用于 DML ,如 update 、insert 和delete 语句。因此,对于 Oracle 数据库 10g 之前的版本,运用触发器虽然对于以行级跟踪用户原始的修改是没有吸引力的挑选,但它也是独一可靠的要领。
8、实例讲解
8.1、激活审计
sqlplus / as sysdba
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
audit_syslog_level string
audit_trail string NONE
SQL> alter system set audit_sys_operations=TRUE scope=spfile; --审计维护用户(以sysdba/sysoper角登陆)
SQL> alter system set audit_trail=db,extended scope=spfile;
SQL> startup force;
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean TRUE
SQL> alter system set audit_trail=db,extended scope=spfile;
SQL> startup force;
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB, EXTENDED
audit_trail string DB, EXTENDED
8.2、开始审计
sqlplus / as sysdba
SQL> audit all on t_test;
SQL> conn u_test
SQL> select * from t_test;
SQL> insert into u_test.t_test (c2,c5) values ('test1','2');
SQL> commit;
SQL> delete from u_test.t_test;
SQL> commit;
SQL> conn /as sysdba
SQL> col DEST_NAME format a30
col OS_USERNAME format a15
col USERNAME format a15
col USERHOST format a15
col TERMINAL format a15
SQL> audit all on t_test;
SQL> conn u_test
SQL> select * from t_test;
SQL> insert into u_test.t_test (c2,c5) values ('test1','2');
SQL> commit;
SQL> delete from u_test.t_test;
SQL> commit;
SQL> conn /as sysdba
SQL> col DEST_NAME format a30
col OS_USERNAME format a15
col USERNAME format a15
col USERHOST format a15
col TERMINAL format a15
col OBJ_NAME format a30
col SQL_TEXT format a60
SQL> select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,sessionid,os_process,sql_text from dba_audit_trail;
col SQL_TEXT format a60
SQL> select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,sessionid,os_process,sql_text from dba_audit_trail;
sql> audit select table by u_test by access;
假如在命令后面添加by user则只对user的操作执行 审计,假如省去by用户,则对系统中所有的用户执行 审计(不包含sys用户).
假如在命令后面添加by user则只对user的操作执行 审计,假如省去by用户,则对系统中所有的用户执行 审计(不包含sys用户).
例:
AUDIT DELETE ANY TABLE; --审计删除表的操作
AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL; --只审计删除失败的情况
AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL; --只审计删除成功的情况
AUDIT DELETE,UPDATE,INSERT ON user.table by test; --审计test用户对表user.table的delete,update,insert操作
AUDIT DELETE ANY TABLE; --审计删除表的操作
AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL; --只审计删除失败的情况
AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL; --只审计删除成功的情况
AUDIT DELETE,UPDATE,INSERT ON user.table by test; --审计test用户对表user.table的delete,update,insert操作
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论