审计机制是DM数据库管理系统安全管理的重要组成部分之一。DM数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。DM具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。

审计开关
在DM系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由DM的INI参数ENABLE_AUDIT控制,有三种取值:
0:关闭审计
1:打开普通审计
2:打开普通审计和实时审计
在普通版本中,ENABLE_AUDIT的缺省值为0;在安全版本中,ENABLE_AUDIT的缺省值为2。

审计开关必须由具有DBA权限的管理员进行设置。

系统管理员可通过查询V$PARAMETER动态视图查询ENABLE_AUDIT的当前值。

SQL>select*fromv$parameterwherename='ENABLE_AUDIT';LINEIDIDNAMETYPEVALUESYS_VALUEFILE_VALUEDESCRIPTION----------------------------------------------------------------------------------------------------------------------------------------------------1385ENABLE_AUDITSYS000FlagForAllowingAudit,0:noaudit1:normalaudit2:normalauditandrealtimeauditusedtime:8.170(ms).Executeidis24948.SQL>sp_set_para_value(1,'ENABLE_AUDIT',2);DMSQLexecutedsuccessfullyusedtime:80.901(ms).Executeidis24968.SQL>select*fromv$parameterwherename='ENABLE_AUDIT';LINEIDIDNAMETYPEVALUESYS_VALUEFILE_VALUEDESCRIPTION----------------------------------------------------------------------------------------------------------------------------------------------------1385ENABLE_AUDITSYS222FlagForAllowingAudit,0:noaudit1:normalaudit2:normalauditandrealtimeauditusedtime:6.829(ms).Executeidis24969.SQL>select*fromv$dm_iniwherepara_name='ENABLE_AUDIT';LINEIDPARA_NAMEPARA_VALUEMIN_VALUEMAX_VALUEMPP_CHKSESS_VALUEFILE_VALUEDESCRIPTIONPARA_TYPE-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------1ENABLE_AUDIT202N22FlagForAllowingAudit,0:noaudit1:normalaudit2:normalauditandrealtimeauditSYSusedtime:7.090(ms).Executeidis24970.SQL>

也可以通过使用客户端工具Console或调用系统过程SP_SET_PARA_VALUE重新设置ENABLE_AUDIT的值,ENABLE_AUDIT为动态INI参数。

审计的设置与取消
数据库审计员指定被审计对象的活动称为审计设置,只有具有AUDIT DATABASE权限的审计员才能进行审计设置。DM提供审计设置系统过程来实现这种设置,被审计的对象可以是某类操作,也可以是某些用户在数据库中的全部行踪。只有预先设置的操作和用户才能被DM系统自动进行审计。

DM允许在三个级别上进行审计设置
系统级:系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录
语句级:导致影响特定类型数据库对象的特殊SQL或语句组的审计。如AUDIT TABLE 将审计CREATE TABLE、ALTER TABLE和DROP TABLE等语句
对象级:审计作用在特殊对象上的语句。如test表上的INSERT语句

审计设置存放于DM字典表SYSAUDIT中,进行一次审计设置就在SYSAUDIT中增加一条对应的记录,取消审计则删除SYSAUDIT中相应的记录。

对象级审计
对象级审计发生在具体的对象上,需要指定模式名以及对象名

设置对象级审计的系统过程如下:

VOIDSP_AUDIT_OBJECT(TYPEVARCHAR(30),USERNAMEVARCHAR(128),SCHNAMEVARCHAR(128),TVNAMEVARCHAR(128),WHENEVERVARCHAR(20))VOIDSP_AUDIT_OBJECT(TYPEVARCHAR(30),USERNAMEVARCHAR(128),SCHNAMEVARCHAR(128),TVNAMEVARCHAR(128),COLNAMEVARCHAR(128),WHENEVERVARCHAR(20))

参数说明:
TYPE 对象级审计选项,即上表中的第一列
USERNAME 用户名
SCHNAME 模式名,为空时置‘null’
TVNAME 表、视图、存储过程名不能为空
COLNAME 列名
WHENEVER 审计时机,可选的取值为:
ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时

例1,对SYSDBA对表PERSON.ADDRESS进行的添加和修改的成功操作进行审计。

SQL>sp_audit_object('INSERT','SYSDBA','PERSON','ADDRESS','SUCCESSFUL');DMSQLexecutedsuccessfullyusedtime:18.455(ms).Executeidis25077.SQL>sp_audit_object('UPDATE','SYSDBA','PERSON','ADDRESS','SUCCESSFUL');DMSQLexecutedsuccessfullyusedtime:16.263(ms).Executeidis25080.

例2,对SYSDBA对表PERSON.ADDRESS的ADDRESS1列进行的修改成功的操作进行审计。

SQL>sp_audit_object('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');DMSQLexecutedsuccessfullyusedtime:15.465(ms).Executeidis25096.SQL>select*fromv$auditrecords;LINEIDUSERIDUSERNAMEROLEIDROLENAMEIPSCHIDSCHNAMEOBJIDOBJNAMEOPERATIONSUCC_FLAGSQL_TEXT------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------DESCRIBTIONOPTIMEMAC-------------------------------------------------------150331649SYSDBA67108864DBA::ffff:127.0.0.1-1-1DROPTABLEYdroptablecspurge;2020-05-2719:28:06.00000000:00:00:00:00:00250331649SYSDBA67108864DBA::ffff:127.0.0.1-1-1CREATETABLEYcreatetablecs(idint,namevarchar(20));2020-05-2719:28:19.00000000:00:00:00:00:00350331649SYSDBA67108864DBA::ffff:127.0.0.1-1-1CREATEUSERYcreateusercs2identifiedby******;2020-05-2719:32:18.00000000:00:00:00:00:00LINEIDUSERIDUSERNAMEROLEIDROLENAMEIPSCHIDSCHNAMEOBJIDOBJNAMEOPERATIONSUCC_FLAGSQL_TEXT------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------DESCRIBTIONOPTIMEMAC-------------------------------------------------------450331750JY67108864DBA::ffff:127.0.0.1150995951JY1454T1UPDATEYupdatet1setc2='WY'wherec1=2;2020-05-2719:36:39.00000000:00:00:00:00:00550331750JY67108864DBA::ffff:127.0.0.1150995951JY1454T1DELETEYdeletefromt1;2020-05-2719:37:08.00000000:00:00:00:00:00650331649SYSDBA67108864DBA::ffff:127.0.0.1150995945PERSON1254ADDRESSINSERTYinsertintoperson.addressvalues('常德武陵区武陵大道938号',null,'德武陵区','415700',10);2020-05-2719:58:29.00000000:00:00:00:00:00

取消对象级审计的系统过程如下:

VOIDSP_NOAUDIT_OBJECT(TYPEVARCHAR(30),USERNAMEVARCHAR(128),SCHNAMEVARCHAR(128),TVNAMEVARCHAR(128),WHENEVERVARCHAR(20))VOIDSP_NOAUDIT_OBJECT(TYPEVARCHAR(30),USERNAMEVARCHAR(128),SCHNAMEVARCHAR(128),TVNAMEVARCHAR(128),COLNAMEVARCHAR(128),WHENEVERVARCHAR(20))

参数说明:
TYPE 对象级审计选项,即上表中的第一列
USERNAME 用户名
SCHNAME 模式名,为空时置‘null’
TVNAME 表、视图、存储过程名不能为空
COLNAME 列名
WHENEVER 审计时机,可选的取值为:
ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时

使用说明:
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
例1,取消对SYSDBA对表PERSON.ADDRESS进行的添加和修改的成功操作的审计。

SQL>sp_noaudit_object('INSERT','SYSDBA','PERSON','ADDRESS','SUCCESSFUL');DMSQLexecutedsuccessfullyusedtime:14.435(ms).Executeidis25099.SQL>sp_noaudit_object('UPDATE','SYSDBA','PERSON','ADDRESS','SUCCESSFUL');DMSQLexecutedsuccessfullyusedtime:15.512(ms).Executeidis25100.

例2,取消对SYSDBA对表PERSON.ADDRESS的ADDRESS1列进行的修改成功操作的审计。

SQL>sp_noaudit_object('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');DMSQLexecutedsuccessfullyusedtime:25.550(ms).Executeidis25102.