文章目录

  • 前言
  • 一、DM系统管理员
  • 二、审计开关
  • 2.1 审计的相关参数
  • 2.2 打开审计功能
  • 三、审计级别
  • 3.1语句级审计
  • 3.1.1 设置语句级审计
  • 3.1.2 取消语句级审计
  • 3.2 对象级审计
  • 3.2.1 设置对象级审计
  • 3.2.2 取消对象级审计
  • 3.3 语句序列审计
  • 3.3.1 建立语句序列审计
  • 3.3.2 删除语句序列审计
  • 四 审计文件管理
  • 五 审计信息查阅
  • 六 其他



前言

数据库审计主要用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是数据安全体系的重要组成部分。

本文使用的数据库版本为DM7。



一、DM系统管理员

为了保证数据库系统的安全性,DM 数据库采用“三权分立”或“四权分立”的安全机制,“三权分立”时系统内置三种系统管理员,包括数据库管理员、数据库安全员和数据库审计员,四权分立”时新增了一类用户,称为数据库对象操作员。它们各司其职,互相制约,有效地避免了将所有权限集中于一人的风险,保证了系统的安全性。

数据库管理员(DBA)、数据库安全员(SSO)、数据库审计员(AUDITOR)、数据库对象操作员(DBO)。

数据库审计中使用的是数据库审计员(AUDITOR)。
数据库审计员可以设置要审计的对象和操作、定义新的数据库审计员、查看和分析审计记录。通过设置审计,几乎可以跟踪任何人在系统内执行的任何操作,为事后追查提供便利。

二、审计开关

2.1 审计的相关参数

参数名

缺省值

属性

说明

ENABLE_AUDIT

0

动态,系统级

审计开关,0:关闭;1:打开普通审计;2 打开普通审计和实时审计

AUDIT_FILE_FULL_MODE

1

静态

审计文件满后的处理方式,1:删除文件;2:不删除文件,也不添加审计记录

AUDIT_MAX_FILE_SIZE

100

动态,系统级

审计文件的最大大小,以兆为单位。有效值范围(1~4096)

2.2 打开审计功能

使用SYSDBA账号

代码如下(示例):

----打开审计功能
SQL> sp_set_para_value(1,'ENABLE_AUDIT',1);

----查看审计状态
SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';

三、审计级别

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

DM 允许在三个级别上进行审计设置:

审计级别

说明

系统级

系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录

语句级

导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句

对象级

审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句

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

3.1语句级审计

语句级审计的动作是全局的,不对应具体的数据库对象。

审计选项

审计的数据库操作

说明

ALL

所有的语句级审计选项

所有可审计操作

TABLE

CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE

创建/修改/删除/清空基表操作

INSERT TABLE

INSERT INTO TABLE

表上的插入操作

UPDATE TABLE

UPDATE TABLE

表上的修改操作

DELETE TABLE

DELETE FROM TABLE

表上的删除操作

SELECT TABLE

SELECT FROM TABLE

表上的查询操作

……

……

……

3.1.1 设置语句级审计

----例 1,审计表的创建、修改和删除。
SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
----例 2,对 SYSDBA 创建用户成功进行审计。
SP_AUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
----例 3,对用户 USER2 进行的表的修改和删除进行审计,不管失败和成功。
SP_AUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');

3.1.2 取消语句级审计

使用说明:
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。

----例 1,取消对表的创建、修改和删除的审计。
SP_NOAUDIT_STMT('TABLE', 'NULL', 'ALL');
----例 2,取消对 SYSDBA 创建用户成功进行审计。
SP_NOAUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
----例 3,取消对用户 USER2 进行的表的修改和删除的审计。
SP_NOAUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_NOAUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');

3.2 对象级审计

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

3.2.1 设置对象级审计

----例 1,对 SYSDBA 对表 PERSON.ADDRESS 进行的添加和修改的成功操作进行审计。
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
----例 2,对 SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功的操作进行审计。
SP_AUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');

3.2.2 取消对象级审计

使用说明:
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。

----例 1,取消对 SYSDBA 对表 PERSON.ADDRESS 进行的添加和修改的成功操作的审计。
SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_NOAUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
----例 2,取消对 SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功操作
的审计。
SP_NOAUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL
');

3.3 语句序列审计

DM 还提供了语句序列审计功能,作为语句级审计和对象级审计的补充。语句序列审计需要审计员预先建立一个审计规则,包含 N 条 SQL 语句(SQL1,SQL2……),如果某个会话依次执行了这些 SQL 语句,就会触发审计。

3.3.1 建立语句序列审计

使用说明:
建立语句序列审计规则需要先调用 SP_AUDIT_SQLSEQ_START,之后调用若干次SP_AUDIT_SQLSEQ_ADD,每次加入一条 SQL 语句,审计规则中的 SQL 语句顺序根据加入 SQL 语句的顺序确定,最后调用 SP_AUDIT_SQLSEQ_END 完成规则的建立。

----例如,建立一个语句序列审计规则 AUDIT_SQL1。
SP_AUDIT_SQLSEQ_START('AUDIT_SQL1');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT NAME FROM TEST1;');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT ID ROM TEST2;');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT * FROM TEST3;');
SP_AUDIT_SQLSEQ_END(' AUDIT_SQL1');

3.3.2 删除语句序列审计

----例如,删除语句序列审计规则 AUDIT_SQL1。
SP_AUDIT_SQLSEQ_DEL(' AUDIT_SQL1');

四 审计文件管理

审计文件的大小可以通过 DM 的 INI 参数 AUDIT_MAX_FILE_SIZE 指定。当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。AUDIT_MAX_FILE_SIZE 为动态系统级参数,缺省值为 100M,DBA用户可通过系统过程 SP_SET_PARA_VALUE 对其进行动态修改,有效值范围为 1~4096M。

随着系统的运行,审计记录将会不断增加,审计文件需要更多的磁盘空间。在极限情况下,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。
对这种情况的处理有两种策略,通过设置 DM 的 INI 参数 AUDIT_FILE_FULL_MODE 进行配置。当将 AUDIT_FILE_FULL_MODE 置为 1 时,将删除最老的审计文件,直至有足够的空间创建新审计文件;当将 AUDIT_FILE_FULL_MODE 置为 2 时,将不再写审计记录,默
认值为 1。AUDIT_FILE_FULL_MODE 为静态参数,可通过系统过程
SP_SET_PARA_VALUE 进行修改,但是修改需要重新启动 DM 数据库服务器才能生效。

若系统审计人员已对历史审计信息进行了充分分析,不再需要某个时间点之前的历史审计信息,可使用下面的系统过程删除指定时间点之前的审计文件,但是不会删除 DM 当前正在使用的审计文件。

----例如,指定删除 2015-12-6 16:30:00 以前的普通审计文件。
SP_DROP_AUDIT_FILE('2015-12-6 16:30:00',0);

五 审计信息查阅

当审计设置后,日志记录在 SYSAUDITOR.V$AUDITRECORDS

序号


数据类型

说明

1

USERID

INTEGER

用户 ID

2

USERNAME

VARCHAR(128)

用户名

3

ROLEID

INTEGER

角色 ID

4

ROLENAME

VARCHAR(128)

角色名

5

IP

VARCHAR(25)

IP 地址

6

SCHID

INTEGER

模式 ID

7

SCHNAME

VARCHAR(128)

模式名

8

OBJID

INTEGER

对象 ID

9

OBJNAME

VARCHAR(128)

对象名

10

OPERATION

VARCHAR(128)

操作类型名

11

SUCC_FLAG

CHAR(1)

成功标记

12

SQL_TEXT

VARCHAR(8188)

SQL 文本

13

DESCRIPTION

VARCHAR(8188)

描述信息

14

OPTIME

DATETIME

操作时间

----使用SYSAUDITOR审计账号登录
select * from  SYSAUDITOR.V$AUDITRECORDS ;

六 其他

参考文档《DM7安全管理.pdf》