ORACLE数据库标准审计是怎么样的


本篇文章给大家分享的是有关ORACLE数据库标准审计是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、什么是审计审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查看)中。默认情况下审计是没有开启的。不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:用管理员权限连接Instance;启动数据库;关闭数据库。2、和审计相关的两个主要参数AUDIT_SYS_OPERATIONSAUDIT_SYS_OPERATIONS enables or disables the auditing of operations issued by user SYS, and users connecting with SYSDBA or SYSOPER privileges. The audit records are written to the operating system’s audit trail. The audit records will be written in XML format if the AUDIT_TRAIL initialization parameter is set to XML.AUDIT_TRAILAUDIT_TRAIL enables or disables database auditing.Values:noneDisables database auditing.osEnables database auditing and directs all audit records to the operating system’s audit trail.dbEnables database auditing and directs all audit records to the database audit trail (the SYS.AUD$ table).db,extendedEnables database auditing and directs all audit records to the database audit trail (the SYS.AUD$ table). In addition, populates the SQLBIND and SQLTEXT CLOB columns of the SYS.AUD$ table.xmlEnables database auditing and writes all audit records to XML format OS files.xml,extendedEnables database auditing and prints all columns of the audit trail, including SqlText and SqlBind values.You can use the SQL statement AUDIT to set auditing options regardless of the setting of this parameter.注:这两个参数是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权限,故会被审计。注意用户是自己表的所有者,所以用户访问自己的表不会被审计。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进行“审计”,这个功能稍显不足。4、审计的一些其他选项by access / by session:by access每一个被审计的操作都会生成一条audit trail。by session一个会话里面同类型的操作只会生成一条audit trail,默认为by session。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,即数据库设置过哪些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似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的薪水列。它不会显示更改前的薪水列的值—要捕获如此详细的更改,您将不得不编写您自己的触发器来捕获更改前的值,或使用LogMiner将它们从存档日志中检索出来。细粒度审计(FGA),是在Oracle 9i中引入的,能够记录SCN号和行级的更改以重建旧的数据,但是它们只能用于select语句,而不能用于DML,如update、insert和delete语句。因此,对于Oracle数据库10g之前的版本,使开发云主机域名用触发器虽然对于以行级跟踪用户初始的更改是没有吸引力的选择,但它也是唯一可靠的方法。

如果在命令后面添加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操作9、精细审计9.1、创建审计标记SQL> exec dbms_fga.add_policy(object_schema=>’ryan’,object_name=>’test’,policy_name=>’chk_test’,statement_types=>’select’);9.2、开启审计SQL> exec DBMS_FGA.ENABLE_POLICY(object_schema=>’ryan’ ,object_name=>’test’ ,policy_name=>’chk_test’);9.3、查看审计记录SQL> connsystem/811226@ryan123Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0Connected as systemSQL> SELECT session_id,TIMESTAMP,db_user,os_user,userhost,sql_text FROM Dba_Fga_Audit_Trail;SESSION_ID TIMESTAMP DB_USER OS_USER USERHOST SQL_TEXT———- ———– —————————— ——————————————————————————– ——————————————————————————– ——————————————————————————–201 2008-11-4 2 RYAN Ryan WORKGROUP/LENOVO-C30DA497 select * from test9.4、关闭审计SQL> exec DBMS_FGA.DISABLE_POLICY(object_schema=>’ryan’ ,object_name=>’TEST’ ,policy_name=>’chk_test’);9.5、删除审计标记SQL> exec DBMS_FGA.DROP_POLICY(object_schema=>’ryan’ ,object_name=>’TEST’ ,policy_name=>’chk_test’);设置ORACLE审计
下列步骤可以设置ORACLE的审计功能:
1.修改参数文件(init.ora,如果使用服务器参数文件使用alter system set= scope=spfile|both,设置AUDIT_TRAIL参数,并且重启数据库。AUDIT_TRAIL的取值如下:DB/TRUE:启动审计功能,并且把审计结果存放在数据库的SYS.AUD$表中OS:启动审计功能,并把审计结果存放在操作系统的审计信息中DB_EXTENDED:具有DB/TRUE的功能,另外填写AUD$的SQLBIND和SQLTEXT字段NONE/FALSE:关闭审计功能2.如果设置AUDIT_TRAIL = OS,还需要修改参数AUDIT_FILE_DEST。如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE_DEST所指定的目录下,并且文件名包含进程的PID。比如:AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit$ ls -l $ORACLE_HOME/rdbms/audit-rw-rw—- 1 ora92 dba 881 Mar 17 09:57 ora_13264.aud$ ps -ef|grep 13264ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)SQL> select spid, program, username from v$process;SPID PROGRAM USERNAME—— ——————————————– ————-13264oracle@frhp11(TNS V1-V3) ora92注意:WINDOWS NT不使用AUDIT_FILE_DEST参数,如果使用OS设置,那么审计信息会存放在WINDOWS NT的事件日志里。3.确认审计相关的表是否已经安装SQLPLUS> connect / AS SYSDBASQLPLUS> select * from sys.aud$; –没有记录返回SQLPLUS> select * from dba_audit_trail;–没有记录返回如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。
SQLPLUS> connect / as sysdbaSQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。4.关闭并重启数据库
5.设置所需要的审计信息下面是一个例子SQL> connect system/managerSQL> grant audit system to scott;SQL> connect scott/tigerSQL> audit session;停止审计:SQL> noaudit session;设置审计的实例:对试图尝试口令的访问的审计本节讨论的是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:
1.修改审计相关参数2.重启数据库3.设置审计信息SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL
4.查询AUD$SQL> select returncode, action#, userid, userhost, terminal,timestampfrom aud$
RETURNCODE ACTION# USERID USERHOST TERMINAL———- ———- ——– ——————– ——————– 1017 100 SCOTT WPRATA-BR 1017 100 SCOTT WPRATA-BR 1017 100 SCOTT WPRATA-BR
ORA-1017的含义为错误的用户名口令。通过查看AUD$表可以清楚地看到WPRATA-BR尝试破译SCOTT的口令。可以通过下面一个存储过程来分析AUD$表,找出可疑的信息:create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)isUSER_ID VARCHAR2(20);cursor c1 is select userid,count(*) from sys.aud$ wh开发云主机域名ere returncode=’1017′ and timestamp#>=to_date(Since,’yyyy-mm-dd’)group by userid;cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,’YYYY-MM-DD:HH24:MI:SS’)from sys.aud$ WHERE returncode=’1017′ and timestamp#>=to_date(Since,’yyyy-mm-dd’) AND USERID=USER_ID;ct PLS_INTEGER;V_USERHOST VARCHAR2(40);V_TERMINAL VARCHAR(40);V_DATE VARCHAR2(40);BEGIN OPEN C1; dbms_output.enable(1024000); LOOP FETCH C1 INTO USER_ID,CT; EXIT WHEN C1%NOTFOUND; IF(CT>=TIMES) THEN DBMS_OUTPUT.PUT_LINE(‘USER BROKEN ALARM:’||USER_ID); OPEN C2; LOOP FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE; DBMS_OUTPUT.PUT_LINE(CHR(9)||’HOST:’||V_USERHOST||’,TERM:’||V_TERMINAL||’,TIME:’||V_DATE); EXIT WHEN C2%NOTFOUND; ENDLOOP; close c2; END IF; ENDLOOP; close c1;END;/一下是执行结果:SQL>set serveroutput on;SQL> execute auditlogin(‘2004-01-01’,2);USER BROKEN ALARM:SYS HOST:,TERM:XUJI,TIME:2004-09-22:11:08:00 HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01 HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29 HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
PL/SQL过程已成功完成。将审计相关的表移动到其他表空间由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:实际上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 ;以上就是ORACLE数据库标准审计是怎么样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注开发云行业资讯频道。

相关推荐: 如何买阿里云服务

这期内容当中小编将会给大家带来有关如何买阿里云服务器,文章内容丰富且以专业的角度为大家分析和叙述开发云主机域名,阅读完这篇文章希望大家可以有所收获。购买阿里云服务器可以在其官网注册账号直接购买,也可以在其各个代理商网站购买。1.打开浏览器,百度搜索阿里云服务器…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/28 22:10
Next 03/28 22:10

相关推荐