审计机制是DM数据库管理系统安全管理的重要组成部分之一。DM数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。DM具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。
审计开关
在DM系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由DM的INI参数ENABLE_AUDIT控制,有三种取值:
0:关闭审计
1:打开普通审计
2:打开普通审计和实时审计
在普通版本中,ENABLE_AUDIT的缺省值为0;在安全版本中,ENABLE_AUDIT的缺省值为2。
审计开关必须由具有DBA权限的管理员进行设置。
系统管理员可通过查询V$PARAMETER动态视图查询ENABLE_AUDIT的当前值。
SQL> select * from v$parameter where name='ENABLE_AUDIT'; LINEID ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION ---------- ----------- ------------ ---- ----- --------- ---------- --------------------------------------------------------------------------------------- 1 385 ENABLE_AUDIT SYS 0 0 0 Flag For Allowing Audit, 0: no audit 1: normal audit 2:normal audit and realtime audit used time: 8.170(ms). Execute id is 24948. SQL> sp_set_para_value(1,'ENABLE_AUDIT',2); DMSQL executed successfully used time: 80.901(ms). Execute id is 24968. SQL> select * from v$parameter where name='ENABLE_AUDIT'; LINEID ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION ---------- ----------- ------------ ---- ----- --------- ---------- --------------------------------------------------------------------------------------- 1 385 ENABLE_AUDIT SYS 2 2 2 Flag For Allowing Audit, 0: no audit 1: normal audit 2:normal audit and realtime audit used time: 6.829(ms). Execute id is 24969. SQL> select * from v$dm_ini where para_name='ENABLE_AUDIT'; LINEID PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE ---------- ------------ ---------- --------- --------- ------- ---------- ---------- --------------------------------------------------------------------------------------- --------- 1 ENABLE_AUDIT 2 0 2 N 2 2 Flag For Allowing Audit, 0: no audit 1: normal audit 2:normal audit and realtime audit SYS used time: 7.090(ms). Execute id is 24970. 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中相应的记录。
语句序列审计
DM还提供了语句序列审计功能,作为语句级审计和对象级审计的补充。语句序列审计需要审计员预先建立一个审计规则,包含N条SQL语句(SQL1,SQL2……),如果某个会话依次执行了这些SQL语句,就会触发审计。
建立语句序列审计规则的过程包括下面三个系统过程。
VOID SP_AUDIT_SQLSEQ_START( NAME VARCHAR (128) ) VOID SP_AUDIT_SQLSEQ_ADD( NAME VARCHAR (128), SQL VARCHAR (8188) ) VOID SP_AUDIT_SQLSEQ_END( NAME VARCHAR (128) )
参数说明:
NAME 语句序列审计规则名
SQL 需要审计的语句序列中的SQL语句
使用说明:
建立语句序列审计规则需要先调用SP_AUDIT_SQLSEQ_START,之后调用若干次SP_AUDIT_SQLSEQ_ADD,每次加入一条SQL语句,审计规则中的SQL语句顺序根据加入SQL语句的顺序确定,最后调用SP_AUDIT_SQLSEQ_END完成规则的建立。
例如,建立一个语句序列审计规则audit_sql1。
SQL> sp_audit_sqlseq_start('audit_sql1'); DMSQL executed successfully used time: 0.901(ms). Execute id is 25115. SQL> sp_audit_sqlseq_add('audit_sql1','select c2 from t1;'); DMSQL executed successfully used time: 0.698(ms). Execute id is 25117. SQL> sp_audit_sqlseq_add('audit_sql1','select c1 from t2;'); DMSQL executed successfully used time: 0.709(ms). Execute id is 25118. SQL> sp_audit_sqlseq_add('audit_sql1','select * from t3;'); DMSQL executed successfully used time: 0.814(ms). Execute id is 25119. SQL> sp_audit_sqlseq_end('audit_sql1'); DMSQL executed successfully used time: 32.279(ms). Execute id is 25120.
在别一个会话执行语句
SQL> select * from t1; DMSQL executed successfully used time: 0.814(ms). Execute id is 5119. SQL> select * from t2; DMSQL executed successfully used time: 0.814(ms). Execute id is 5120. SQL> select * from t3; DMSQL executed successfully used time: 0.814(ms). Execute id is 5121.
查询审计记录
SQL> select * from v$auditrecords; LINEID USERID USERNAME ROLEID ROLENAME IP SCHID SCHNAME OBJID OBJNAME OPERATION SUCC_FLAG SQL_TEXT DESCRIBTION OPTIME MAC ---------- ----------- -------- ----------- -------- ---------------- ----------- ------- ----------- ------- ------------ --------- ---------------------------------------------------------------------------------------------------- --------------------------- -------------------------- ------------------- 1 50331649 SYSDBA 67108864 DBA ::ffff:127.0.0.1 -1 -1 DROP TABLE Y drop table cs purge; 2020-05-27 19:28:06.000000 00:00:00:00:00:00 2 50331649 SYSDBA 67108864 DBA ::ffff:127.0.0.1 -1 -1 CREATE TABLE Y create table cs(id int,name varchar(20)); 2020-05-27 19:28:19.000000 00:00:00:00:00:00 3 50331649 SYSDBA 67108864 DBA ::ffff:127.0.0.1 -1 -1 CREATE USER Y create user cs2 identified by ******; 2020-05-27 19:32:18.000000 00:00:00:00:00:00 4 50331750 JY 67108864 DBA ::ffff:127.0.0.1 150995951 JY 1454 T1 UPDATE Y update t1 set c2='WY' where c1=2; 2020-05-27 19:36:39.000000 00:00:00:00:00:00 5 50331750 JY 67108864 DBA ::ffff:127.0.0.1 150995951 JY 1454 T1 DELETE Y delete from t1; 2020-05-27 19:37:08.000000 00:00:00:00:00:00 6 50331649 SYSDBA 67108864 DBA ::ffff:127.0.0.1 150995945 PERSON 1254 ADDRESS INSERT Y insert into person.address values('常德武陵区武陵大道938号',null,'德武陵区','415700',10); 2020-05-27 19:58:29.000000 00:00:00:00:00:00 7 50331649 SYSDBA -1 ::ffff:127.0.0.1 -1 -1 SQL SEQ Y select name from t1; select id from t2; select * from t3; audit_sql1 2020-05-27 20:14:44.000000 00:00:00:00:00:00 7 rows got used time: 1.013(ms). Execute id is 25133.
可使用下面的系统过程删除指定的语句序列审计规则。
VOID SP_AUDIT_SQLSEQ_DEL( NAME VARCHAR (128) )
参数说明:
NAME 语句序列审计规则名
例如,删除语句序列审计规则AUDIT_SQL1。
SQL> sp_audit_sqlseq_del('audit_sql1'); DMSQL executed successfully used time: 26.854(ms). Execute id is 25137.