Oracle数据库审计Author:罗振其LastUpdatetime:2021-06-27目录为什么要审计..........................................................................................................................1审计参数..................................................................................................................................1查询并设定参数设定值..........................................................................................................2添加审计对象..........................................................................................................................3常用审计操作:.........................................................................................................................3审计结果查询:......................................................................................................................7添加对象的审计例子:.............................................................................................................7审计表的清理..........................................................................................................................8为什么要审计数据被误删除,不知道是什么时候被删除,是人为操作还是程序代码的bug?是在哪台机器上做的?对应的SQL语句是什么?审计是记录数据库上方方面面操作、事件等信息,是数据安全管理的重要手段。如果没有事前进行审计,就无法知道是何时、哪台机、用什么用户、用什么语句对数据库进行更改,对表误删除了。审计需要预先设置,在表被误删除有记录可循。审计参数AUDIT_TRAIL:启用或禁用数据库审计。参数详解、取值说明:none禁用数据库审计os启用数据库审计,并将数据库审计记录定向到操作系统审计记录db启用数据库审计,并将数据库所有审计记录定向到数据库的SYS.AUD$表db,extended启用数据库审计,并将数据库所有审计记录定向到数据库的SYS.AUD$表。另外,填充SYS.AUD$表的SQLBIND列和SQLTEXTCLOB列。AUDIT_SYS_OPERATIONS:audit_sys_operations审计SYSDBA的活动。默认值是false(设置成true的话要重启数据库),此时相关的审计信息不会记录在aud$中,因为有可能此时数据库还未启动,只能记录在操作系统层面的文件中。默认为false,不意味着没有审计信息,像conn/assysdba这样的操作仍然会被记录。audit_file_dest参数指定的审计信息的文件夹。将audit_sys_operations设置成true后,那么做为sysdba或sysoper连接数据库的用户所发布的每条语句都会被写入操作系统的审计中,从而能够给出DBA所进行操作的完整记录。查询并设定参数设定值columnnameformata40columnvalueformata60setlinesize200selectname,valuefromv$parameterwherenamein('audit_trail','audit_sys_operations');Oracle11G,12C以上数据库审计默认是开启的,不必修改参数,可以直接对对象进行审计!Oracle10G需要修改参数并重启数据库。假如查询结果不是”DB”或”db,extended”,则需要用以下语句修改参数:altersystemsetaudit_trail=db,extendedscope=spfile;shutdownimmediate;--关闭数据库startup;--开启数据库操作如下所示:添加审计对象查看系统中哪些对象有做审计跟踪select*fromDBA_OBJ_AUDIT_OPTS;例:没有出现在查询结果中的对象表示还没对它进行审计,需要加入到审计中。常用审计操作:1)表的查询、插入,更新,删除的审计经常被误删除的表、莫明丢失数据的表、非常重要敏感的表可以考虑增加到审计列表中语法:AUDITINSERT,DELETE,updateON用户名.表名BYACCESS;审计的表的插入,更新,删除记录操作进行记录,也可以单独对其中一个操作进行审计,如:AUDITDELETEON用户名.表名BYACCESS;例:2)审计数据库中所有的createtable,droptable,truncatetable语句audittable;noaudittable;--取消审计selectOS_USERNAME,USERNAME,USERHOST,TERMINAL,TIMESTAMP,OWNER,OBJ_NAME,ACTION,ACTION_NAME,COMMENT_TEXT,SESSIONID,RETURNCODE,PRIV_USED,EXTENDED_TIMESTAMP,SCN,SQL_TEXTFROMdba_audit_trailAorderbytimestampasc;3)对表空间的添加删除进行审计audittablespace;要有dba,sysdba,createtablespace,droptablespace权限,就可添加或删除表空间,无论他是否以assysdba登录auditcreatetablespace,droptablespace,altertablespace;或者audittablespace;注意:对于类似"alterdatabasedatafile'/u01/app/oracle/data/datafile/micr/tbsp2_2.dbf'offlinedrop;"的操作,需要对数据进行auditdatabase;4)对存储过程进行审计,追踪创建,更改,删除、执行PROCEDURE、package的动作,通过创建带破坏性的存储过程并运行它,会破坏数据库,这样的破坏性操作很具隐蔽性,也较难发现auditprocedure;--对创建,修改,删除存储过程进行审计,但它并不对执行存储过程进行审计noauditprocedure;-取消审计auditcreateprocedure;auditEXECUTEPROCEDURE;--对所有存储过程的执行都进行审计,这意味着会生成大量的审计记录,所以很少使用selectOS_USERNAME,USERNAME,USERHOST,TERMINAL,TIMESTAMP,OWNER,OBJ_NAME,ACTION,ACTION_NAME,COMMENT_TEXT,SESSIONID,RETURNCODE,PRIV_USED,EXTENDED_TIMESTAMP,SCN,SQL_TEXTFROMdba_audit_trailAorderbytimestampasc;5)对触发器进行审计,防止通过创建触发器来达到破坏数据库,却很难追踪到责任人的问题audittrigger;noaudittrigger;-取消审计6)审计"alterdatabase....."操作,对可能极具破坏性操作进行审计auditalterdatabase;7)对视图进行审计auditview;noauditview;8)模式对象的查询,插入,更新,删除权限赋与他人的操作的记录auditgrantanyobjectprivilegebyaccess;9)审计"altersystem....."操作,对可能极具破坏性操作进行审计auditaltersystem;10)对创建操作员,删除操作员进行审计AUDITcreateoperator,DROPANYOPERATOR;11)审计用户,对创建用户,删除用户,更改密码,更改默认表空间,用户状态进行审计;audituser;--对创建,删除用户,更改密码,默认表空间,用户状态进行审计noaudituser;12)对所有登录到oracle的普通用户进行审计auditsession;noauditsession;--审计所有普通用户登录AUDITSESSIONBYSCOTT,LUO;--指定用户auditsessionwheneversuccessful;auditsessionwhenevernotsuccessful;selectSESSIONID,cast(/*TIMESTAMP*/(from_tz(ntimestamp#,'00:00')atlocal)asdate),LOGOFF$TIME,USERID,USERHOST,TERMINAL,SPARE1,COMMENT$TEXT,ACTION#,RETURNCODE,OBJ$CREATOR,OBJ$NAME,INSTANCE#,PROCESS#,SCN,SQLBIND,SQLTEXTfromsys.aud$Aorderbyntimestamp#asc;13)Altersystemsetaudit_sys_operations=truescope=spfile;审计以sysdba/sysoper角色登录14)角色审计创建新角色、删除角色的动作进行追踪,删除角色会使相应的用户具有的权限被取消,会引起应用程序缺少权限而无法正常运行;通过创建新角色再赋与系统权限或角色给新角色,然后赋与用户角色会带来风险,所有像createrolerole5;droprolerole5;这些操作都会被记录下来auditrole;noauditrole;15)系统权限赋审计把系统权限赋与用户或者把角色赋与角色,把权限赋与角色的操作行为进行记录,例如Grant、Revoke等命令的审计,具有相应的权限的用户可以随意破坏数据库AUDITSYSTEMGRANT;--对赋与权限/角色,收回权限/角色进行审计16)对所有表进行审计AUDITDELETETABLE;--会审计所有表的删除语句auditselecttable;auditinserttable;auditupdatetable;auditdeletetable;AUDITSELECT,INSERT,DELETE,updateONLUO.EMPBYACCESS;--只是审核某个特定的表,只要luo.emp表有insert,update,delete的语句,都将会被记录到sys.aud$表。--即使是使用scott/tiger(假如scott具有deleteanytable权限,或者删除luo.emp表记录的权限),也会将被记录到sys.aud$表。--假如是使用sys/123456assysdba来执行"deleteluo.empwhererownum<2",那么审计记录将不会记录到sys.aud$表中,但是会有相关的审计记录到adump/目录下相关文件,如下所示:TueNov818:21:032011LENGTH:'166'ACTION:[35]'deletefromluo.empwhererownum<2'DATABASEUSER:[1]'/'PRIVILEGE:[6]'SYSDBA'CLIENTUSER:[6]'oracle'CLIENTTERMINAL:[5]'pts/2'STATUS:[1]'0'审计结果查询:select*fromsys.aud$;或以下语句:selectSESSIONID,cast(/*TIMESTAMP*/(from_tz(ntimestamp#,'00:00')atlocal)asdate),LOGOFF$TIME,USERID,USERHOST,TERMINAL,SPARE1,COMMENT$TEXT,ACTION#,RETURNCODE,OBJ$CREATOR,OBJ$NAME,INSTANCE#,PROCESS#,SCN,SQLBIND,SQLTEXTfromsys.aud$Aorderbyntimestamp#asc;添加对象的审计例子:审计表的清理sys.aud$是审计结果存放记录的地方,这个表默认存在sysaux表空间,审计的项目多,时间久,操作频繁的话,会产生大量的记录,可以对该表进行转存和清理,truncatetablesys.aud$;绝对不会对数据库造成损坏,只会丢失审计的记录。