审计机制是 DM 数据库管理系统安全管理的重要组成部分之一。 DM 数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。 DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。
一、DM8审计级别
DM 允许在三个级别上进行审计设置,分别是系统级、语句级和对象级。
系统级:系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录;
语句级:导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。 如 AUDIT TABLE 将审计 CREATE TABLE、 ALTER TABLE 和 DROP TABLE 等语句;
对象级:审计作用在特殊对象上的语句。 如 test 表上的 INSERT 语句
二、DM8审计功能开关
在 DM 系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由过程 VOID SP_SET_ENABLE_AUDIT(param int) ;控制, 过程执行完后会立即生效, param 有三种取值:
0:关闭审计
1:打开普通审计
2:打开普通审计和实时审计
缺省值为 0。
打开普通审计开关。
SP_SET_ENABLE_AUDIT (1);
审计开关必须由具有数据库审计员权限的管理员进行设置。
其它用户执行打开审计系统包报错,如下:
[dmdba@dm8-study ~]$ rlwrap disql sysdba/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 289.063(毫秒)
disql V8
SQL> SP_SET_ENABLE_AUDIT (1);
SP_SET_ENABLE_AUDIT (1);
[-5598]:没有执行权限.
已用时间: 714.429(毫秒). 执行号:0.
审计用户执行打开审计功能能够正常执行,如下示:
[dmdba@dm8-study ~]$ rlwrap disql sysauditor/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.699(毫秒)
disql V8
SQL> SP_SET_ENABLE_AUDIT (1);
DMSQL 过程已成功完成
已用时间: 214.831(毫秒). 执行号:510.
数据库审计员可通过查询 V$DM_INI 动态视图查询 ENABLE_AUDIT 的当前值。
SQL> SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE
---------- ------------ ---------- --------- --------- ------- ----------
FILE_VALUE
----------
DESCRIPTION
-----------------------------------------------------------------
PARA_TYPE
---------
1 ENABLE_AUDIT 1 0 2 N 1
0
Flag For Allowing Audit, 0: no audit 1: normal audit 2:normal audit and realtime audit
READ ONLY
已用时间: 6.289(毫秒). 执行号:512.
三、语句级审计设置
打开语句级别的审计:SP_AUDIT_STMT(TYPE,USERNAME,WHENVER)
TYPE:审计选项
USERNAME:用户,null表示不限制
WHENEVER:审计时机 ALL :所有的、 SUECCFUL:操作成功时、FAIL:操作失败时。
审计表的创建、修改和删除。
SQL> SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
DMSQL 过程已成功完成
已用时间: 176.986(毫秒). 执行号:516.
这里需要使用SYSAUDITOR这个用户去操作上面命令才能执行。
查看语句级别审计是否执行成功:
SQL> SELECT * FROM SYSAUDITOR."V$AUDITRECORDS" ;
行号 USERID USERNAME ROLEID ROLENAME IP
---------- ----------- ---------- ----------- -------------- ---
SCHID SCHNAME OBJID OBJNAME OPERATION
----------- ------- ----------- ------- ---------
SUCC_FLAG SQL_TEXT
--------- --------------------------------------
DESCRIBTION
--------------------------------------
OPTIME
----------------------------------------------------------------------------------------------------
MAC SEQNO
----------------- -----------
1 50331649 SYSDBA 67108864 DBA ::1
-1 -1 EXECUTE
N SP_SET_ENABLE_AUDIT (1);
没有执行权限
2020-12-30 23:02:17.000000
0
行号 USERID USERNAME ROLEID ROLENAME IP
---------- ----------- ---------- ----------- -------------- ---
SCHID SCHNAME OBJID OBJNAME OPERATION
----------- ------- ----------- ------- ---------
SUCC_FLAG SQL_TEXT
--------- --------------------------------------
DESCRIBTION
--------------------------------------
OPTIME
----------------------------------------------------------------------------------------------------
MAC SEQNO
----------------- -----------
2 50331650 SYSAUDITOR 67108867 DB_AUDIT_ADMIN ::1
-1 -1 EXECUTE
Y SP_SET_ENABLE_AUDIT (1);
SP_SET_ENABLE_AUDIT (1);
2020-12-30 23:05:28.000000
0
行号 USERID USERNAME ROLEID ROLENAME IP
---------- ----------- ---------- ----------- -------------- ---
SCHID SCHNAME OBJID OBJNAME OPERATION
----------- ------- ----------- ------- ---------
SUCC_FLAG SQL_TEXT
--------- --------------------------------------
DESCRIBTION
--------------------------------------
OPTIME
----------------------------------------------------------------------------------------------------
MAC SEQNO
----------------- -----------
3 50331650 SYSAUDITOR 67108867 DB_AUDIT_ADMIN ::1
-1 -1 EXECUTE
Y SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
2020-12-30 23:33:00.000000
00:0C:29:AD:EF:80 0
已用时间: 51.209(毫秒). 执行号:517.
取消语句级别审计:
SQL> SP_NOAUDIT_STMT('TABLE','NULL','ALL');
DMSQL 过程已成功完成
已用时间: 109.169(毫秒). 执行号:518.
查询取消语句级别审计的执行结果:
行号 USERID USERNAME ROLEID ROLENAME IP
---------- ----------- ---------- ----------- -------------- ---
SCHID SCHNAME OBJID OBJNAME OPERATION
----------- ------- ----------- ------- ---------
SUCC_FLAG SQL_TEXT
--------- --------------------------------------
DESCRIBTION
--------------------------------------
OPTIME
----------------------------------------------------------------------------------------------------
MAC SEQNO
----------------- -----------
4 50331650 SYSAUDITOR 67108867 DB_AUDIT_ADMIN ::1
-1 -1 EXECUTE
Y SP_NOAUDIT_STMT('TABLE','NULL','ALL');
SP_NOAUDIT_STMT('TABLE','NULL','ALL');
2020-12-30 23:37:19.000000
00:0C:29:AD:EF:80 0
已用时间: 1.133(毫秒). 执行号:519.
四、对象级审计
对象级审计:是对数据对象的操作做审计,主要有INSERT、UPDATE、DELETE、SELECT、EXECUTE、MERGE
INTO、EXECUTE TRIGGER。
打开对象级别的审计语法:SP_AUDIT_OBJECT(TYPE,USERNAME,SCHNAME,TVNAME,COLNAME,WHENVER)
TYPE 对象级审计选项,即上表中的第一列
USERNAME 用户名
SCHNAME 模式名,为空时置‘null’
TVNAME表、视图、存储过程名不能为空
COLNAME 列名
WHENEVER:审计时机
ALL :所有的
SUECCFUL:操作成功时
FAIL:操作失败时。
设置语句级别的审计
审计SYSDBA用户查看DMHR.EMPLOYEE这张表:
SQL>SP_AUDIT_OBJECT('SELECT','SYSDBA','DMHR','EMPLOYEE','ALL');
DMSQL 过程已成功完成
已用时间: 58.429(毫秒). 执行号:2512.
进行测试:
用sysdba用户对EMPLOYEE表进行查询操作
SELECT * FROM DMHR.EMPLOYEE;
查看审计是否执行成功:
SELECT * FROM SYSAUDITOR."V$AUDITRECORDS" ;
审计结果如下:
取消对象级别审计:SP_NOAUDIT_OBJECT(‘SELECT’,‘SYSDBA’,‘DMHR’,‘EMPLOYEE’,‘ALL’)
再次对EMPLOYEE表进行查询
SELECT * FROM DMHR.EMPLOYEE;
查看审计是否执行成功:
SELECT * FROM SYSAUDITOR."V$AUDITRECORDS" ;
审计结果如下示,取消审计后,不再记录操作动作:
五、审计设置补充说明
只要审计功能被启用,系统级的审计记录就会产生;
在进行数据库审计时,审计员之间没有区别,可以审计所有数据库对象,也可取消
其他审计员的审计设置;
语句级审计不针对特定的对象,只针对用户;
对象级审计针对指定的用户与指定的对象进行审计;
在设置审计时,审计选项不区分包含关系,都可以设置;
在设置审计时,审计时机不区分包含关系,都可以进行