审计

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

5.1 审计开关

在 DM 系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由过程 VOID SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param 有三种取值:

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

缺省值为 0。

例 打开普通审计开关。

SP_SET_ENABLE_AUDIT (1);
注意

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

数据库审计员可通过查询 V$DM_INI 动态视图查询审计开关(ENABLE_AUDIT)的当前值。因为 ENABLE_AUDIT 值是通过 SP_SET_ENABLE_AUDIT 设置的,因此未在 DM.INI 中提供 ENABLE_AUDIT 参数进行配置。

例 查询审计开关的当前值。

SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';

5.2 审计的设置与取消

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

DM 允许在三个级别上进行审计设置,如表 5.1 所示。

表5.1 审计级别
审计级别 说明
系统级 系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录
语句级 导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句
对象级 审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句

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

审计记录的刷盘方式由动态系统级的 INI 参数 AUDIT_FLUSH_LEVEL 进行控制。当设置 AUDIT_FLUSH_LEVEL 为 0 时,表示设置为语句级刷盘,一条语句执行结束进行一次审计记录刷盘操作;当设置 AUDIT_FLUSH_LEVEL 为 1 时,表示设置为事务级刷盘,一个事务执行结束执行一次审计日志刷盘操作;当设置 AUDIT_FLUSH_LEVEL 为 2 时,表示设置为延迟刷盘,当审计记录缓存满时(缓存大小固定为 8MB)自动刷盘。

5.2.1 系统级审计

系统级审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录。表 5.2 记录了系统级审计的审计操作及对应说明。

表5.2 系统级审计选项
审计的数据库操作 说明
数据库系统启动关闭 区分第一次启动、正常退出后启动、异常退出后启动和还原库后第一次启动
审计空间不足告警 系统定时检测如果审计空间不足就会生成审计记录
数据库版本升级 包括数据字典版本、回滚段版本等
主备之间 redo 日志传输故障和恢复 包括主备之间 redo 日志传输异常和恢复两种
SP_SET_ENABLE_AUDIT 打开/关闭审计开关
SP_AUDIT_STMT/SP_NOAUDIT_STMT 设置/取消语句级审计
SP_AUDIT_XX/SP_NOAUDIT_XX 作为系统过程,本身不触发语句级审计
SP_AUDIT_OBJECT/SP_NOAUDIT_OBJECT 设置对象级审计/取消对象级审计
SP_AUDIT_SET_ENC 设置审计加密
SP_AUDIT_SQLSEQ_START 审计序列设置开始
SP_AUDIT_SQLSEQ_ADD 审计序列添加 SQL
SP_AUDIT_SQLSEQ_END 审计序列设置结束
SP_AUDIT_SQLSEQ_DEL 删除审计序列
SP_DROP_AUDIT_FILE 删除审计文件
SP_SWITCH_AUDIT_FILE 切换审计文件
SP_SET_PARA_VALUE 设置 DM.INI 文件中整型的参数值
SP_SET_PARA_STRING_VALUE 设置 DM.INI 文件中字符型的参数值
SP_SET_PARA_DOUBLE_VALUE 设置 DM.INI 文件中浮点型的参数值
SF_SET_SYSTEM_PARA_VALUE 修改整型、double、varchar 的静态配置参数或动态配置参数
SF_SET_SESSION_PARA_VALUE 设置会话级 INI 参数在当前会话上的值
SP_RESET_SESSION_PARA_VALUE 重置会话级 INI 参数在当前会话上的值,使得当前会话的参数值和全局值一致
SP_SET_PARAM_IN_SESSION 设置指定会话的会话级 INI 参数的值
SP_SET_SQLLOG_INI 修改 SQLLOG.INI 文件的内容
SP_DELETE_SQLLOG_INI_MODE 删除 SQLLOG.INI 文件中的模式

5.2.2 语句级审计

语句级审计的动作是全局的,不对应具体的数据库对象。其审计选项如表 5.3 所示。

表5.3 语句级审计选项
审计选项 审计的数据库操作 说明
ALL 所有的语句级审计选项 所有可审计操作
USER CREATE USER
ALTER USER
DROP USER
创建/修改/删除用户操作
ROLE CREATE ROLE
DROP ROLE
创建/删除角色操作
TABLESPACE CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
创建/修改/删除表空间操作
SCHEMA CREATE SCHEMA
DROP SCHEMA
SET SCHEMA
创建/删除/设置当前模式操作
TABLE CREATE TABLE
ALTER TABLE
DROP TABLE
TRUNCATE TABLE
创建/修改/删除/清空基表操作
VIEW CREATE VIEW
ALTER VIEW
DROP VIEW
创建/修改/删除视图操作
INDEX CREATE INDEX
DROP INDEX
创建/删除索引操作
PROCEDURE CREATE PROCEDURE
ALTER PROCEDURE
DROP PROCEDURE
创建/修改/删除存储模块操作
TRIGGER CREATE TRIGGER
ALTER TRIGGER
DROP TRIGGER
创建/修改/删除触发器操作
SEQUENCE CREATE SEQUENCE
ALTER SEQUENCE
DROP SEQUENCE
创建/修改/删除序列操作
CONTEXT CREATE CONTEXT INDEX
ALTER CONTEXT INDEX
DROP CONTEXT INDEX
创建/修改/删除全文索引操作
SYNONYM CREATE SYNONYM
DROP SYNONYM
创建/删除同义词
OPERATOR CREATE OPERATOR
DROP OPERATOR
创建/删除自定义运算符
GRANT GRANT 授予权限操作
REVOKE REVOKE 回收权限操作
AUDIT AUDIT 设置审计操作
NOAUDIT NOAUDIT 取消审计操作
INSERT TABLE INSERT INTO TABLE 表上的插入操作
UPDATE TABLE UPDATE TABLE 表上的修改操作
DELETE TABLE DELETE FROM TABLE 表上的删除操作
SELECT TABLE SELECT FROM TABLE 表上的查询操作
EXECUTE PROCEDURE CALL PROCEDURE 调用存储过程或函数操作
PACKAGE CREATE PACKAGE
DROP PACKAGE
创建/删除包规范
PACKAGE BODY CREATE PACKAGE BODY
DROP PACKAGE BODY
创建/删除包体
MAC POLICY CREATE POLICY
ALTER POLICY
DROP POLICY
创建/修改/删除策略
MAC LEVEL CREATE LEVEL
ALTER LEVEL
DROP LEVEL
创建/修改/删除等级
MAC COMPARTMENT CREATE COMPARTMENT
ALTER COMPARTMENT
DROP COMPARTMENT
创建/修改/删除范围
MAC GROUP CREATE GROUP
ALTER GROUP
DROP GROUP
ALTER GROUP PARENT
创建/修改/删除组,更新父组
MAC LABEL CREATE LABEL
ALTER LABEL
DROP LABEL
创建/修改/删除标记
MAC USER USER SET LEVELS
USER SET COMPARTMENTS
USER SET GROUPS
USER SET PRIVS
设置用户等级/范围/组/特权
MAC TABLE REMOVE TABLE POLICY
APPLY TABLE POLICY
取消/应用表标记
MAC SESSION SESSION LABEL
SESSION ROW LABEL
RESTORE DEFAULT LABELS
SAVE DEFAULT LABELS
保存/取消会话标记 设置会话默认标记 设置会话行标记
CHECKPOINT CHECKPOINT 检查点(checkpoint)
SAVEPOINT SAVEPOINT 设置保存点
RELEASE SAVEPOINT RELEASE SAVEPOINT 销毁保存点
EXPLAIN EXPLAIN 显示执行计划
NOT EXIST 分析对象不存在导致的错误
DATABASE ALTER DATABASE 修改当前数据库操作
CONNECT LOGIN LOGOUT 登录/退出操作
COMMIT COMMIT 提交操作
ROLLBACK ROLLBACK 回滚操作
SET TRANSACTION SET TRX ISOLATION
SET TRX READ WRITE
设置事务的读写属性和隔离级别
BACKUP BACKUP DATABASE
BACKUP TABLESPACE
BACKUP TABLE
BACKUP ARCHIVE
库/表空间/表/归档备份操作
RESTORE RESTORE TABLESPACE
RESTORE TABLE
表空间/表还原操作
DIMP DIMP FULL
DIMP OWNER
DIMP SCHEMA
DIMP TABLE
逻辑导入:库级/用户级/模式级/表级
DEXP DEXP FULL
DEXP OWNER
DEXP SCHEMA
DEXP TABLE
逻辑导出:库级/用户级/模式级/表级
FLDR FLDR IN
FLDR OUT
FLDR 工具导入/导出
WARNING AUD SPACE WARNING 审计剩余可用空间不足
KEY CREATE KEY
DESTROY KEY
生成/销毁密钥
CRYPT ENCRYPT
DECRYPT
数据加密/解密
DTS DTS IN
DTS OUT
DTS 工具迁入/迁出
PROFILE CREATE PROFILE
ALTER PROFILE
DROP PROFILE
创建/修改/删除 PROFILE

设置语句级审计的系统过程如下:

VOID
SP_AUDIT_STMT(
    TYPE VARCHAR(30),
    USERNAME VARCHAR (128),
    WHENEVER VARCHAR (20)
)

参数说明:

TYPE 语句级审计选项,即上表中的第一列

USERNAME 用户名,NULL 表示不限制

WHENEVER 审计时机,可选的取值为:

  • ALL:所有的
  • SUCCESSFUL:操作成功时
  • FAIL:操作失败时

例 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');

取消语句级审计的系统过程如下:

VOID
SP_NOAUDIT_STMT(
    TYPE VARCHAR(30),
    USERNAME VARCHAR (128),
    WHENEVER VARCHAR (20)
)

参数说明:

TYPE 语句级审计选项,即上表中的第一列

USERNAME 用户名,NULL 表示不限制

WHENEVER 审计时机,可选的取值为:

  • ALL:所有的
  • SUCCESSFUL:操作成功时
  • FAIL:操作失败时

使用说明:

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

例 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');

5.2.3 对象级审计

对象级审计发生在具体的对象上,需要指定模式名以及对象名。其审计选项如表 5.4 所示。

表5.4 对象级审计选项
审计选项(SYSAUDITRECORDS 表中 operation 字段对应的内容) TABLE VIEW COL PROCEDURE FUNCTION TRIGGER
INSERT
UPDATE
DELETE
SELECT
EXECUTE
MERGE INTO
EXECUTE TRIGGER
LOCK TABLE
BACKUP TABLE
RESTORE TABLE
ALL(所有对象级审计选项)

其中,对于 UPDATE 和 DELETE 操作,因为也需要做 SELECT 操作,所以只要设置审计 SELECT 操作时,UPDATE 和 DELETE 也会作为 SELECT 操作被审计。

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

VOID
SP_AUDIT_OBJECT (
    TYPE VARCHAR(30),
    USERNAME VARCHAR (128),
    SCHNAME VARCHAR (128),
    TVNAME VARCHAR (128),
    WHENEVER VARCHAR (20)
)

VOID
SP_AUDIT_OBJECT (
    TYPE VARCHAR(30),
    USERNAME VARCHAR (128),
    SCHNAME VARCHAR (128),
    TVNAME VARCHAR (128),
    COLNAME VARCHAR (128),
    WHENEVER VARCHAR (20)
)

参数说明:

TYPE 对象级审计选项,即上表中的第一列

USERNAME 用户名。为空串或 NULL 时表示不限定用户

SCHNAME 模式名。为空串或 NULL 时表示不限定模式

TVNAME 表名、视图名、存储过程名。不支持取值为空串或 NULL

COLNAME 列名。为空串或 NULL 时表示不限定列

WHENEVER 审计时机,可选的取值为:

  • ALL:所有的
  • SUCCESSFUL:操作成功时
  • FAIL:操作失败时

例 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');

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

VOID
SP_NOAUDIT_OBJECT (
    TYPE VARCHAR(30),
    USERNAME VARCHAR (128),
    SCHNAME VARCHAR (128),
    TVNAME VARCHAR (128),
    WHENEVER VARCHAR (20)
)

VOID
SP_NOAUDIT_OBJECT (
    TYPE VARCHAR(30),
    USERNAME VARCHAR (128),
    SCHNAME VARCHAR (128),
    TVNAME VARCHAR (128),
    COLNAME VARCHAR (128),
    WHENEVER VARCHAR (20)
)

参数说明:

TYPE 对象级审计选项,即上表中的第一列

USERNAME 用户名。为空串或 NULL 时表示不限定用户

SCHNAME 模式名。为空串或 NULL 时表示不限定模式

TVNAME 表名、视图名、存储过程名。不支持取值为空串或 NULL

COLNAME 列名。为空串或 NULL 时表示不限定列

WHENEVER 审计时机,可选的取值为:

  • ALL:所有的
  • SUCCESSFUL:操作成功时
  • FAIL:操作失败时

使用说明:

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

例 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');

5.2.4 语句序列审计

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。

SP_AUDIT_SQLSEQ_START('AUDIT_SQL1');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT NAME FROM TEST1;');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT ID FROM TEST2;');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT * FROM TEST3;');
SP_AUDIT_SQLSEQ_END('AUDIT_SQL1');

可使用下面的系统过程删除指定的语句序列审计规则。

VOID
    SP_AUDIT_SQLSEQ_DEL(
    NAME VARCHAR (128)
)

参数说明:

NAME 语句序列审计规则名

例如,删除语句序列审计规则 AUDIT_SQL1。

SP_AUDIT_SQLSEQ_DEL('AUDIT_SQL1');

5.2.5 关于审计设置的一些说明

  • 只要审计功能被启用,系统级的审计记录就会产生;
  • 在进行数据库审计时,审计员之间没有区别,可以审计所有数据库对象,也可取消其他审计员的审计设置;
  • 语句级审计不针对特定的对象,只针对用户;
  • 对象级审计针对指定的用户与指定的对象进行审计;
  • 在设置审计时,审计选项不区分包含关系,都可以设置;
  • 在设置审计时,审计时机不区分包含关系,都可以进行设置;
  • 如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。

5.3 审计文件管理

DM 审计信息存储在审计文件中。审计文件默认存放在数据库的 SYSTEM_PATH 指定的路径,即数据库所在路径。用户也可在 dm.ini 文件中添加参数 AUD_PATH 来指定审计文件的存放路径,例如:

#file location of dm.ctl
CTL_PATH	= D:\dmdbms\data\DAMENG\dm.ctl		#ctl file path
CTL_BAK_PATH	=D:\dmdbms\data\DAMENG\ctl_bak	#dm.ctl backup path
CTL_BAK_NUM	= 10   #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
SYSTEM_PATH	= D:\dmdbms\data\DAMENG        #system path
CONFIG_PATH	= D:\dmdbms\data\DAMENG        #config path
TEMP_PATH	= D:\dmdbms\data\DAMENG        #temporary file path
BAK_PATH	= D:\dmdbms\data\DAMENG\bak    #backup file path
AUD_PATH	=D:\dmdbms\data\DAMENG\aud

审计文件命名格式为“AUDIT_GUID_创建时间.log”,其中“GUID”为 DM 给定的一个唯一值。

DM 的审计文件总存储空间大小由 INI 参数 AUDIT_SPACE_LIMIT 进行限制,该参数取值范围为 204800~1024*1024M,0 表示不限制,缺省为 0。AUDIT_SPACE_LIMIT 为静态参数,可通过系统过程 SP_SET_PARA_VALUE 进行修改,但是修改需要重新启动 DM 数据库服务器才能生效。

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

DM 支持通过设置 INI 参数 AUDIT_KEEP_DAYS 来指定审计文件最小保留天数,该参数取值范围为 0~3660 天,即使达到审计文件总存储空间大小限制(即 AUDIT_SPACE_LIMIT 设置的值)也不会删除在指定保留天数内的审计文件。只有最老审计日志文件的保留天数超过 AUDIT_KEEP_DAYS 才会根据 AUDIT_FILE_FULL_MODE 设定值来处理老的审计文件。

随着系统的运行,审计记录将会不断增加,审计文件需要更多的磁盘空间。在极限情况下,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。对这种情况的处理有两种策略,通过设置 DM 的 INI 参数 AUDIT_FILE_FULL_MODE 进行配置。当将 AUDIT_FILE_FULL_MODE 置为 1 时,将删除最老的审计文件,直至有足够的空间创建新审计文件,若将所有可以删除的审计文件都删除后空间仍旧不够,则数据库会挂起不再处理任何请求,直至磁盘空间被清理出足够创建新审计文件的空间;当将 AUDIT_FILE_FULL_MODE 置为 2 时,将不再写审计记录;当将 AUDIT_FILE_FULL_MODE 置为 3 时,结合 1 和 2,先尝试删老审计文件,再创建审计文件,若空间仍不足则不再审计,系统会定时检测是否有空余空间,如果有则恢复审计;缺省值为 3。AUDIT_FILE_FULL_MODE 为静态参数,可通过系统过程 SP_SET_PARA_VALUE 进行修改,但是修改需要重新启动 DM 数据库服务器才能生效。

注意

这三种策略都会导致审计记录的缺失,因此,管理员应该及时对审计文件进行备份。

若系统审计人员已对历史审计信息进行了充分分析,不再需要某个时间点之前的历史审计信息,可使用下面的系统过程删除指定时间点之前的审计文件,但是不会删除 DM 当前正在使用的审计文件。若设置了 ini 参数 AUDIT_KEEP_DAYS,指定了审计文件最小保留天数,使用 SP_DROP_AUDIT_FILE 时也不会删除还在指定保留天数内的审计文件。

VOID
    SP_DROP_AUDIT_FILE(
    TIME_STR VARCHAR(128),
    TYPE INT
);

参数说明:

TIME_STR:指定的时间字符串

TYPE:审计文件类型,0 表示删除普通审计文件,1 表示删除实时审计文件

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

SP_DROP_AUDIT_FILE('2015-12-6 16:30:00',0);

DM 审计文件支持文件加密,审计管理员可使用下面的系统过程设置审计文件加密:

VOID
    SP_AUDIT_SET_ENC(
    NAME VARCHAR(128),
    KEY VARCHAR(128)
)

参数说明:

NAME:加密算法名,可使用 DM 支持的加密算法,见表 7.1;也支持用户自定义加密算法,见第 8 章加密引擎介绍

KEY:加密密钥

DM 审计文件支持手动进行切换。切换是指生成一个新的审计文件,并将新生成的审计信息存储在新生成的审计文件中。一般用在审计文件被删除无法存储审计信息,或任何需要生成新审计文件的情况下。审计管理员可用以下语句切换审计文件:

VOID
    SP_SWITCH_AUDIT_FILE(
    AUDIT_SWITCH	INT
)

参数说明:

AUDIT_SWITCH:切换开关值,取值 1 或 2。1 表示切换普通审计文件;2 表示同时切换普通和实时审计文件。对于 DMDSC 环境仅切换当前节点审计文件。

例 切换普通审计文件。

SP_SWITCH_AUDIT_FILE(1);

5.4 审计信息查阅

当使用 DM 提供的审计机制进行了审计设置后,除语句序列审计设置外的审计设置信息都记录在数据字典表 SYSAUDITOR.SYSAUDIT 中,结构如下表所示:

表5.5 SYSAUDITOR.SYSAUDIT表结构
序号 数据类型 说明
1 LEVEL SMALLINT 审计级别
2 UID INTEGER 用户 ID
3 TVPID INTEGER 表/视图/触发器/存储过程函数 ID
4 COLID SMALLINT 列 ID
5 TYPE SMALLINT 审计类型
6 WHENEVER SMALLINT 审计情况

语句序列审计设置信息记录在数据字典表 SYSAUDITOR.SYSAUDITSQLSEQ 中,结构如下表所示:

表5.6 SYSAUDITOR. SYSAUDITSQLSEQ表结构
序号 数据类型 说明
1 NAME VARCHAR(128) 语句序列审计规则名
2 SQLSEQ INTEGER 语句序列中的 SQL 语句序号
3 SQLSTR VARCHAR(8188) 语句序列中的 SQL 语句

审计类型用户可以查询上述数据字典表查看审计设置信息。

只要 DM 系统处于审计活动状态,系统按审计设置进行审计活动,并将审计信息写入审计文件。审计用户可通过查询 V$AUDIT_SPACE 动态视图获取审计文件存储空间的相关信息,动态视图的结构如下表所示:

表5.7 V$AUDIT_SPACE视图结构
序号 数据类型 说明
1 AUD_PATH VARCHAR(256) 审计文件存放路径
2 AUDIT_FILE_FULL_MODE INTEGER 剩余空间不足时的处理方式:
1:审计文件创建失败,卡住;
2:审计文件创建失败,不再审计;
3:结合 1 和 2,先尝试删老审计文件,再创建审计文件失败则不再审计
3 AUDIT_MAX_FILE_SIZE INTEGER 单个审计文件的最大大小,单位 MB
4 AUD_SPACE_LIMIT INTEGER 审计文件总存储空间大小限制,单位 MB
5 AUD_SPACE_FREE INTEGER 可用审计文件存储空间大小,单位 MB
6 AUDIT_IS_NORMAL CHAR(1) 审计是否正常。Y:是;N:否,不再审计

审计用户可通过查询 V$AUDIT_FILE 动态视图获取审计文件存放路径下审计文件的具体信息,动态视图的结构如下表所示:

表5.8 V$AUDIT_FILE视图结构
序号 数据类型 说明
1 FILEPATH VARCHAR(256) 审计文件的完整路径
2 SGUID INTEGER 服务器的唯一标识,仅用于判断审计文件与库是否匹配
3 RT_FLAG INTEGER 是否实时审计
4 HPC_SEQNO INTEGER DSC 节点号
5 VERSION INTEGER 版本号
6 DBNAME VARCHAR(128) 库名称
7 IS_FULL INTEGER 审计文件是否已满。1:已满,0:未满。
8 BEGIN_TIME DATETIME(6) 审计文件的创建时间
9 LENGTH BIGINT 审计文件的长度,单位 BYTE

审计用户可通过查询 V$AUDITRECORDS 动态视图获取审计文件存放路径下审计文件中审计记录的具体信息,审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。动态视图的结构如下表所示:

表5.9 V$AUDITRECORDS结构
序号 数据类型 说明
1 USERID INTEGER 用户 ID
2 USERNAME VARCHAR(128) 用户名
3 ROLEID INTEGER 角色 ID。 没有具体角色的用户和 SQL 序列审计,没用角色信息。
4 ROLENAME VARCHAR(128) 角色名。 没有具体角色的用户和 SQL 序列审计,没用角色信息。
5 IP VARCHAR(64) 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(6) 操作时间
15 MAC VARCHAR(25) 操作对应的 MAC 地址
16 SEQNO TINYINT DMDSC 环境下表示生成审计记录的节点号,非 DMDSC 环境下始终 0
17 BIND_INFO VARCHAR(8188) 绑定参数具体值,如果绑定参数是复杂类型,仅记录类型名,不记录具体值

其中审计记录中的 IP 地址的显示格式由 DM 的 INI 参数 AUDIT_IP_STYLE 进行控制,设置为 0 时,仅显示 IP;设置为 1 时,显示 IP 和主机名;缺省值为 0。AUDIT_IP_STYLE 为静态参数,可通过系统过程 SP_SET_PARA_VALUE 进行修改,但是修改需要重新启动 DM 数据库服务器才能生效。

例如,SYSAUDITOR 进行如下的审计设置:

//以SYSAUDITOR身份登录 
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');

之后查询 SYSAUDITOR.SYSAUDIT 数据字典表,可以看到对应的审计设置记录:

SELECT * FROM SYSAUDITOR.SYSAUDIT;
行号 			LEVEL 		UID 	  TVPID 	  COLID 	 TYPE WHENEVER
---------- ----------- ----------- ----------- ----------- -----------
1 			2 			50331649 	1196 		-1 			50 		1
2 			2 			50331649 	1196 		-1 			53 		1

以 SYSDBA 登录,对表 PERSON.ADDRESS 进行插入和删除操作:

// 以SYSDBA身份登录
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE)
VALUES('AAA','','BBB','111111');
DELETE FROM PERSON.ADDRESS WHERE ADDRESS1='AAA';
COMMIT;

再以 SYSAUDITOR 登录,查询 SYSAUDITOR.V$AUDITRECORDS,可以看到 SYSDBA 刚才的插入操作生成的审计记录:

// 以SYSAUDITOR身份登录 
SELECT * FROM SYSAUDITOR.V$AUDITRECORDS WHERE USERNAME='SYSDBA';
行号       USERID      USERNAME ROLEID      ROLENAME IP  SCHID       SCHNAME
---------- ----------- -------- ----------- -------- --- ----------- -------
           OBJID       OBJNAME OPERATION SUCC_FLAG
           ----------- ------- --------- ---------
           SQL_TEXT
           ------------------------------------------------------------------
           DESCRIPTION OPTIME                      MAC               SEQNO
           ----------- --------------------------- ----------------- ----
	       BIND_INFO
	       ---------
1          50331649    SYSDBA   67108864    DBA      ::1 150995945   PERSON
           1196        ADDRESS INSERT    Y
           INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('AAA','','BBB','111111');
                       2016-03-15 15:07:49.000000E0-3F-49-AE-86-5F 0
	       NULL

由于并没有相关的审计设置,SYSDBA 之前执行的 DELETE 操作没有生成审计记录。

DM 还提供了以下系统函数供查看审计设置中涉及的审计类型 TYPE、审计级别 LEVEL、以及生成时机 WHENEVER 常量对应的具体信息,作为上述动态视图的补充。

  • SF_GET_AUDIT_TYPENAME
VARCHAR
    SF_GET_AUDIT_TYPENAME(
    TYPE INT
);

参数说明:

TYPE 审计类型,对应 SYSAUDIT 中 TYPE 字段值

返回值:

参数 TYPE 值的意义描述

例如,查看 SYSAUDIT 中 TYPE 值 50 的意义描述。

SELECT SF_GET_AUDIT_TYPENAME(50);

返回值为:INSERT

  • SF_GET_AUDIT_LEVELNAME
VARCHAR
    SF_GET_AUDIT_LEVELNAME(
    LEVEL INT
);

参数说明:

LEVEL 审计级别,对应 SYSAUDIT 中 LEVEL 字段值

返回值:

参数 LEVEL 值的意义描述

例如,查看 SYSAUDIT 中 LEVEL 值为 2 的意义描述。

SELECT SF_GET_AUDIT_LEVELNAME(2);

返回值为:OBJECT

  • SF_GET_AUDIT_WHENEVERNAME
VARCHAR
    SF_GET_AUDIT_WHENEVERNAME(
    WHENEVER INT
);

参数说明:

WHENEVER 审计记录生成时机,对应 SYSAUDIT 中 WHENEVER 字段值

返回值:

参数 WHENEVER 值的意义描述

例如,查看 SYSAUDIT 中 WHENEVER 值为 1 的意义描述。

SELECT SF_GET_AUDIT_WHENEVERNAME(1);

返回值为:SUCCESSFUL

5.5 审计实时侵害检测

当执行 SP_SET_ENABLE_AUDIT (2);时,开启审计实时侵害检测功能。

实时侵害检测系统用于实时分析当前用户的操作,并查找与该操作相匹配的实时审计分析规则,如果规则存在,则判断该用户的行为是否是侵害行为,确定侵害等级,并根据侵害等级采取相应的响应措施。

5.5.1 创建与删除实时侵害检测规则

当执行 SP_SET_ENABLE_AUDIT (2);时,具有 AUDIT DATABASE 权限的用户可以使用下面的系统过程创建实时侵害检测规则。

VOID
SP_CREATE_AUDIT_RULE(
    RULENAME VARCHAR(128),
    OPERATION VARCHAR(30),
    USERNAME VARCHAR(128),
    SCHNAME VARCHAR(128),
    OBJNAME VARCHAR(128),
    WHENEVER VARCHAR(20),
    ALLOW_IP VARCHAR(1024),
    ALLOW_DT VARCHAR(1024),
    INTERVAL INTEGER,
    TIMES INTERGER
);

参数说明:

RULENAME :创建的审计实时侵害检测规则名。

OPERATION:审计操作名,取值可选项包括了语句级审计和对象级审计中的大部分可选操作及 SHUTDOWN、STARTUP、UNLOCK USER、CONNECT 和 DISCONNECT 操作,其中暂不支持语句级审计的 DIMP、DEXP、CONNECT、INSERT TABLE、UPDATE TABLE、DELETE TABLE、SELECT TABLE、EXECUTE PROCEDURE 审计选项对应的审计操作。

USERNAME:用户名,没有指定或'NULL'表示所有用户。

SCHNAME:模式名,没有时指定为'NULL'。

OBJNAME:对象名,没有时指定为'NULL'。

WHENEVER:审计时机,取值 ALL/SUCCESSFUL/FAIL。

ALLOW_IP:IP 列表,以’,’隔开。例如'"192.168.0.1","127.0.0.1"'。

ALLOW_DT:时间串,格式如下:

ALLOW_DT::= <时间段项>{,<时间段项>}
<时间段项> ::= <具体时间段> | <规则时间段>
<具体时间段> ::= <具体日期><具体时间> TO <具体日期><具体时间>
<规则时间段> ::= <规则时间标志><具体时间> TO<规则时间标志><具体时间>
<规则时间标志> ::= MON | TUE | WED | THURS | FRI | SAT | SUN

INTERVAL:时间间隔,单位为分钟。

TIMES:次数。

例 1 创建一个审计实时侵害检测规则 DANGEROUS_SESSION,该规则检测每个星期一 8:00 至 9:00 的所有非本地 SYSDBA 的登录动作。

SP_CREATE_AUDIT_RULE ('DANGEROUS_SESSION','CONNECT', 'SYSDBA', 'NULL', 'NULL', 'ALL', '"127.0.0.1"','MON "8:00:00" TO MON "9:00:00"',0, 0);

例 2 创建一个审计实时侵害检测规则 PWD_CRACK,该规则检测可能的口令暴力破解行为。

SP_CREATE_AUDIT_RULE ('PWD_CRACK','CONNECT', 'NULL', 'NULL', 'NULL', 'FAIL', 'NULL','NULL',1, 50);

当不再需要某个实时侵害检测规则时,可使用下面的系统过程进行删除。

VOID
SP_DROP_AUDIT_RULE(
	RULENAME VARCHAR(128)
);

参数说明:

RULENAME 待删除的审计实时侵害检测规则名

例如,删除已创建的实时侵害检测规则 DANGEROUS_SESSION。

SP_DROP_AUDIT_RULE ('DANGEROUS_SESSION');

5.5.2 实时侵害检测

当执行 SP_SET_ENABLE_AUDIT (2);时,实时侵害检测系统会实时分析用户的操作,将其与系统中创建的实时侵害检测规则进行匹配,判断该用户操作是否是侵害行为。

为了界定不同侵害行为对系统的危害情况,实时侵害检测系统定义了四种级别的侵害等级,从四级到一级侵害行为严重程度递增。这样根据用户操作匹配的实时侵害检测规则来可以判断其属于哪一级的侵害行为。

四种侵害等级如下:

  • 四级:操作只违反了 IP 或者时间段设置之一,且对应累计次数在规定时间间隔内没有达到门限值,或者没有门限值设置;
  • 三级:操作同时违反了 IP 和时间段设置,且累计次数在规定时间间隔内没有达到门限值,或者没有门限值设置;
  • 二级:操作的 IP 和时间段都正常,且累计次数在规定时间间隔内达到了门限值;
  • 一级:操作只违反了 IP 或时间段设置之一,且对应累计次数在规定时间间隔内达到了门限值,或者操作同时违反了 IP 和时间段设置,且累计次数在规定时间间隔内达到了门限值。

实时侵害检测规则的设置,使得某些操作可能会触发多条审计分析规则,也就是说可能存在多条审计分析规则同时匹配的情况。在这种情况下,需要把操作记录保存到所有匹配的、同时规定了操作频率门限值的审计分析规则下,并且使用这些审计分析规则对该操作进行分析,从所有满足的侵害等级中选择一个最高的侵害等级进行响应。

DM 实时侵害检测系统根据侵害检测结果做出相应的安全审计响应,由低到高四个等级分别为:

  • 四级响应:实时报警生成,对四级侵害行为进行响应。当系统检测到四级侵害行为时,生成报警信息;
  • 三级响应:违例进程终止,对三级侵害行为进行响应。当系统检测到三级侵害行为时,终止当前操作(用户当前连接仍然保持)。同时生成报警信息;
  • 二级响应:服务取消,对二级侵害行为进行响应。当系统检测到二级侵害行为时,强制断开用户当前连接,退出登录。同时生成报警信息;
  • 一级响应:账号锁定或失效,对一级侵害行为进行响应。当系统检测到一级侵害行为时,强制断开用户当前连接,退出登录,并且锁定账号或使账号失效。同时生成报警信息。

这些安全审计相应动作中除了生成报警信息,其余的都由 DM 数据库服务器即可完成。生成报警信息的实现包括 DM 数据库服务器将报警信息写入一个专门的日志文件,由 DM 的审计告警工具 dmamon 实时分析这个日志文件,发现报警信息并将报警信息以邮件的形式发送给指定的邮箱。

5.5.3 审计告警工具 dmamon

审计告警工具 dmamon 用来在 DM 实时侵害检测系统检测到侵害事件且需要进行报警时可将报警信息以邮件的形式发送给指定邮箱。

dmamon 的运行需要指定对应的配置文件 dmamon.ini,此配置文件只能通过工具 dmamon_ctl 进行创建或修改。

5.5.3.1 创建或修改 dmamon.ini

使用 dmamon_ctl 工具创建或修改 dmamon.ini。

启动 dmamon_ctl 工具的命令格式为:

dmamon_ctl [FILE =value]
或
dmamon_ctl [FILE =value] DCR_INI= value

参数说明:

FILE:用来指定需要编辑的 dmamon.ini 的路径。创建 dmamon.ini 时,可以不指定 FILE 参数。

DCR_INI:在 DMASM 环境下,用来指定 dmdcr.ini 路径。非 DMASM 环境不用指定。

例如:

dmamon_ctl FILE=c:\dmamon.ini

当需要创建 dmamon.ini 时,可以不指定 FILE 参数,则 dmamon_ctl 工具会一步步引导用户配置 dm.ini 所在目录、发送和接收邮件的电子邮箱等信息,创建一个新的 dmamon.ini 文件。配置项如下表所示。

表5.10 dmamon.ini配置项
项目 项目意义 字段 字段意义
[PATH] 实时审计警报记录文件所在的文件目录 PATH 实时审计警报记录文件所在的文件目录
[SENDER] 发件人 EMAIL 发件人邮箱
SMTP 发件人邮箱 SMTP 服务器
USERNAME 发件人用户名
PASSWORD 发件人密码
[RECEIVER] 收件人 EMAIL 收件人邮箱
[INTERVAL] 时间间隔 INTERVAL 检查审计警报记录文件的时间间隔,单位秒

dmamon_ctl 工具支持的命令如下表。

表5.11 dmamon_ctl命令
命令 说明
EDIT 修改 INI 文件信息
ADD 增加接收者的邮件地址信息
REMOVE 删除接收者的邮件地址信息
SHOW 显示当前控制文件的内容
SAVE 保存,保存路径必须为 dmamon.ini 的绝对路径。退出之前须保存,否则修改无效
EXIT 退出当前程序
HELP 显示帮助信息

5.5.3.2 使用 dmamon

配置好 dmamon.ini 后,就可以使用 dmamon 工具进行实时审计告警了。启动 dmamon 工具的命令格式为:

dmamon  PATH=<dmamon.ini路径>   USERID=<userid>
或
dmamon  PATH=<dmamon.ini路径>  USERID=<userid>  dcr_ini=<dmdcr.ini路径>
<userid>::=<username>/<password>[@<connect_identifier>][<option>] 
<connect_identifier> ::=<svc_name> | {<host>[:<port>]} | <unixsocket_file>
<option>::= #{ <extend_option>=<value>{,<extend_option>=<value>} }  //此行外层{}是为了封装参数之用,书写时需要保留
<os_auth>::= AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}

参数说明:

PATH:指定 dmamon.ini 文件的路径,字符串类型。

USERID:指定登录数据库的信息。

*<username>/<*password>:指定用户名和密码,仅支持具有审计权限的用户使用 dmamon 工具。

<svc_name>:服务名。

*<host>[:<*port>]:服务器 IP 地址和端口号。缺省情况下默认为本地服务器和端口号 LOCALHOST:5236。当服务器为本机时,SERVER:PORT 可直接写 LOCALHOST。当连接其他服务器时,SERVER:PORT 需写上 IP 地址和 PORTNUM,例如:192.168.0.248:8888。

<unixsocket_file>:专门用于在 LINUX 系统中,当服务器与客户端之间使用 UNIXSOCKET(UNIX DOMAIN SOCKET - IPC)协议通信时,指定客户端连接的 socket 文件路径。例如:

./dmamon PATH=/home/dmamon.ini USERID=SYSAUDITOR/DMauditor_123@/home/test/foo.sock#{inet_type=UNIXSOCKET} 

*<option> 为扩展选项,用法为 <extend_option>=<*value>。所有 value 值不能包含空格,不能包含特殊的符号,如引号等。书写扩展选项时需要用引号#"{ }"进行封装,例如:#"{INET_TYPE=tcp,mpp_type=local}"。

现支持的扩展选项如下:

extend_option value
mpp_type MPP 登录属性,此属性的设置对非 MPP 系统没有影响。取值 GLOBAL 和 LOCAL,缺省为 GLOBAL。GLOBAL 表示 MPP 环境下建立的会话为全局会话,对数据库的导入导出操作在所有节点进行;LOCAL 表示 MPP 环境下建立的会话为本地会话,对数据库的导入导出操作只在本地节点进行
inet_type 网络通信协议类型。取值 TCP/UDP/IPC/UNIXSOCKET/RDMA,缺省为 TCP。
使用 UDP 协议时,服务器需要设置 INI 参数 ENABLE_UDP 非 0;使用 IPC 协议时,会忽略 IP 地址和端口号,直接连接本机上 INI 参数 ENABLE_IPC=1 的服务器,一台机器上只能有一个服务器设置 ENABLE_IPC=1;使用 UNIXSOCKET 协议时,无需指定 IP 地址和端口号,但服务器需要配置 INI 参数 UNIX_SOCKET_PATHNAME 指定 socket 文件路径,客户端连接服务器时也需要指定 socket 文件路径,二者必须一致,仅 LINUX 环境下支持 UNIXSOCKET;使用 RDMA 协议时,需要安装并配置 RDMA 网卡,连接数据库时需要指定 RDMA 网卡配置的 IP 地址以及服务器的端口号
ssl_path 通信加密的 SSL 数字证书路径,缺省为不使用加密。数字证书路径由用户自己创建,将相应的证书需放入该文件夹中。其中服务器证书必须与 dmserver 目录同级,客户端目录可以任意设置。和 ssl_pwd 一起使用。
各用户只能使用自己的 SSL 数字证书,例如 SYSAUDITOR 账户只能使用/home/dmdbms/bin/client_ssl/SYSAUDITOR 下的证书和密码,如果证书没有密码可以用缺省或任意数字代替。
例如:./dmamon PATH=/home/dmamon.ini USERID=SYSAUDITOR/DMauditor_123@192.168.1.64:5236#"{ssl_path= /home/dmdbms/bin/client_ssl/SYSAUDITOR,ssl_pwd=12345}"
ssl_pwd 通信加密的 SSL 数字证书密码。和 ssl_path 一起使用。缺省为不加密

DCR_INI:在 DMASM 环境下,用来指定 dmdcr.ini 路径。非 DMASM 环境不用指定。

5.6 审计分析

DM 提供了图形界面的审计分析工具 Analyzer 以及通过命令行启动的审计分析工具 dmaudtool。

Analyzer 实现对审计记录的分析功能,能够根据所制定的分析规则,对审计记录进行分析,判断系统中是否存在对系统安全构成危险的活动。只有审计用户才能使用审计分析工具 Analyzer。

dmaudtool 实现对审计记录的解析、筛选以及导出功能。审计文件的内容是不可视的,dmaudtool 可解析审计文件中的审计记录并导出至指定输出文件当中以供用户查看。同时 dmaudtool 也提供筛选功能,可以针对审计记录中的用户名、模式名、对象名或者操作时间有选择性地筛选导出。审计分析工具 dmaudtool 的使用对用户无限制。

下面将详细介绍审计分析工具 Analyzer 和 dmaudtool 的使用方法。

5.6.1 审计分析工具 Analyzer

审计用户登录审计分析工具后,通过 Analyzer 可以创建和删除审计规则,并可以指定对某些审计文件应用某些规则。并将审计结果以表格的方式展现出来。

审计用户登录 Analyzer 后可看到工具主界面如图 5.1 所示。

图 5.1 Analyzer 工具主界面.png

图5.1 Analyzer工具主界面

5.6.1.1 审计规则

右键单击导航树中的“审计规则”节点,在弹出的菜单中选择“新建审计分析规则”,可打开如下图所示的新建审计分析规则窗口。

图 5.2 新建审计分析规则窗口.png

图5.2 新建审计分析规则窗口

如上图中创建了一个名为 aud_sysdba 的审计分析规则,对 SYSDBA 的所有审计记录进行分析。之后我们就可以将这个审计分析规则应用于对审计记录文件的分析。右键点击“审计规则”或一个具体的审计分析规则节点,在弹出的菜单中选择“审计规则分析”,弹出如下图所示审计规则分析窗口。

图 5.3 审计规则分析窗口.png

图5.3 审计规则分析窗口

选择需要应用的审计分析规则,可以同时选择多条,在下面的文件列表中添加需要进行分析的审计记录文件,Analyzer 工具就会根据审计分析规则对文件中的审计记录进行分析,将满足规则的审计记录以表格的形式显示出来,如下图所示。

图 5.4 审计规则分析结果.png

图5.4 审计规则分析结果

在审计规则分析结果显示窗口中,还可以对显示的审计记录根据需要进行进一步过滤,进一步分析出需要的审计记录。

5.6.1.2 审计日志查看器

双击“审计日志查看器”节点,可打开如下图所示的条件设置窗口。

图 5.5 审计日志查看条件设置窗口.png

图5.5 审计日志查看条件设置窗口

添加需要查看的审计记录文件,还可在窗口左侧的“选择项”中设置各种过滤条件,之后点击“确定”,将满足规则的审计记录以表格的形式显示出来,与图 5.5 的显示相同。

5.6.2 审计分析工具 dmaudtool

审计信息以审计记录的形式存放在 DM 数据库审计文件中,关于审计文件的存放路径等信息请参见 5.3 审计文件管理。审计文件的内容是不可视的,审计分析工具 dmaudtool 可以筛选解析审计文件中的审计记录并且导出至指定输出文件当中以供用户查看。只有具有 DB_AUDIT_SOI 角色权限的用户可以使用审计分析工具 dmaudtool。

分析本地磁盘上的审计文件时,要求 dmaudtool 工具与审计文件在同一台主机上。分析 DMASM 文件系统中的审计文件时,不要求 dmaudtool 工具与审计文件在同一台主机上。

5.6.2.1 使用 dmaudtool 工具

dmaudtool 工具位于 DM 安装目录的 bin 目录下。启动 dmaudtool 工具的命令格式为:

dmaudtool USERID=<userid> AFIL_PATH=<afil_path> OUT_PATH=<out_path> {PARAMETER=<value>}

USERID:指定数据库的连接信息,必选参数。详细参数介绍请参考 5.5.3.2 使用 dmamon

AFIL_PATH:指定审计文件所在的路径,必选参数。

OUT_PATH:指定审计分析结果的输出文件完整路径,必选参数。若指定的输出文件已存在,则报错。

PARAMETER:其他可选参数,多个参数之间排列顺序无影响,参数之间使用空格间隔。参数将在下一节进行详细介绍。

<value>:参数取值。

例如:分析 E:\dmdbms\data\DAMENG 目录下的所有审计文件,并将分析结果输出至 E:\dmdbms\data\DAMENG\out\aud_out.txt 文件中,行间隔符设为 AAAA,输出文件大小不限。命令行操作如下:

dmaudtool USERID=SYSAUDITOR/DMauditor_123@192.168.1.60:5236 AFIL_PATH=E:\dmdbms\data\DAMENG OUT_PATH=E:\dmdbms\data\DAMENG\out\aud_out R_SEP=AAAA 

显示如下:

图 5.6 使用 dmaudtool 工具示例.png

图5.6 使用dmaudtool工具示例

若指定的输出文件已存在,则报错:

图 5.7 分析审计记录时存在同名文件.png

图5.7 分析审计记录时存在同名文件

5.6.2.2 dmaudtool 参数一览表

本节提供 dmaudtool 的参数一览表,供用户快速参考。

表5.12 dmaudtool参数一览表
参数 含义 备注
USERID 指定数据库的连接信息 必选。仅支持本地连接
AFIL_PATH 指定审计文件所在的路径 必选
OUT_PATH 指定审计分析结果的输出文件完整路径 必选。与OUT_SIZE配合使用,若文件大小超过OUT_SIZE指定值,则会在目录下生成同名+序号的新输出文件
UPDATE_KEY 更新审计日志文件密钥 可选。专门用于使用更新审计日志密钥功能的场景中
OUT_SIZE 指定审计分析结果输出文件的大小,单位为兆(MB)。指定范围为500~65534(M) 可选。缺省为0,表示不限制文件大小
DCR_INI DCR_INI路径,分析存储在DMASM上的审计文件时指定 可选。专门用于分析存储在DMASM上的审计文件的场景中。缺省时系统将不考虑该参数值
USERNAME 对应审计记录中的用户名,表示收集该用户名的审计记录 可选。若未指定则不考虑该参数值,若均未指定则默认分析指定目录下所有审计文件
SCHNAME 对应审计记录中模式名,表示收集该模式名的审计记录
OBJNAME 对应审计记录中对象名,表示收集该对象名的审计记录
TIME_FROM 对应审计记录中操作时间,用于指定收集审计记录的起始时间
TIME_TO 对应审计记录中操作时间,用于指定收集审计记录的结束时间
R_SEP 指定输出文件中的行分隔符,用于间隔输出文件中行与行之间的数据 可选。缺省为回车符。考虑到记录中可能存在的字符,间隔符需要设置相对复杂,避免解析出错
C_SEP 指定输出文件中的列分割符,用于间隔输出文件中列与列之间的数据 可选。缺省为‘|’
HELP 打印帮助信息 可选

5.6.2.3 dmaudtool 工具使用示例

5.6.2.3.1 帮助 HELP

使用 help 参数即可查看帮助信息。帮助信息中会显示 dmaudtool 版本信息以及所有参数的大致信息,供用户快速参考。

命令行操作如下:

dmaudtool HELP
5.6.2.3.2 分析指定目录下所有审计文件

分析 E:\dmdbms\data\DAMENG 目录下的所有审计文件,将分析结果保存至 E:\dmdbms\data\DAMENG\out\aud_out.txt 文件中,行间隔符设为 AAAA,输出文件大小不限。

命令行操作如下:

dmaudtool USERID=SYSAUDITOR/DMauditor_123@192.168.1.60:5236 AFIL_PATH=E:\dmdbms\data\DAMENG OUT_PATH=E:\dmdbms\data\DAMENG\out\aud_out_1.txt R_SEP=AAAA 
5.6.2.3.3 分析指定用户的审计记录

使用 USERNAME 参数指定用户名,分析审计文件中指定用户的所有审计记录。

命令行操作如下:

dmaudtool USERID=SYSAUDITOR/DMauditor_123@192.168.1.60:5236 AFIL_PATH=E:\dmdbms\data\DAMENG OUT_PATH=E:\dmdbms\data\DAMENG\out\aud_out_3.txt R_SEP=AAAA TIME_FROM="2022/9/1 21:00:00"
5.6.2.3.4 分析指定时间之后的审计文件

使用 TIME_FROM 参数指定起始时间,分析指定时间之后的所有审计文件。

命令行操作如下:

dmaudtool USERID=SYSAUDITOR/*****@192.168.1.60:5236 AFIL_PATH=E:\dmdbms\data\DAMENG OUT_PATH=E:\dmdbms\data\DAMENG\out\aud_out_3.txt R_SEP=AAAA TIME_FROM="2022/9/1 21:00:00"
5.6.2.3.5 分析存储在 ASM 上的审计文件

若审计文件存储在 DMASM 文件系统中,则需要设置 DCR_INI 参数,指定 dmdcr.ini 文件的路径。

命令行操作如下:

./dmaudtool USERID=SYSAUDITOR/DMauditor_123@192.168.100.121:5425 AFIL_PATH=+DMDATA/home/data/DAMENG OUT_PATH=/home/test/out/aud_out.txt DCR_INI=/home/data/DAMENG/DSC01/dmdcr.ini R_SEP=AAAA
5.6.2.3.6 更新审计日志文件密钥

通过指定 UPDATE_KEY 参数更新审计日志文件密钥。

使用说明:

  1. 审计日志文件默认不使用加密算法进行加密,对于不加密文件则不更新密钥。
  2. dmaudtool 密钥更新功能不更新当前最新审计日志文件的密钥。使用密钥更新前需要先通过审计文件加密系统过程 sp_audit_set_enc 来设置更新密钥,切换新的审计日志文件,然后使用 dmaudtool 工具更新之前审计日志密钥。
  3. USERID 需要指定具有审计员权限用户,否则无法进行密钥更换。
  4. UPDATE_KEY指定为NULL,实际没有用到。
    

命令行操作如下:

dmaudtool.exe USERID=SYSAUDITOR/DMauditor_123@192.168.0.33:4356 AFIL_PATH=c:\dm7data\dameng\aud UPDATE_KEY=NULL

5.6.2.4 审计分析结果导入到目标库中

将审计分析结果导入到目标库中需要利用 DM 自带的导入导出工具 dmfldr。将 dmaudtool 的分析结果输出文件作为 dmfldr 的输入文件,并配置与 dmaudtool 分隔符相匹配的控制文件即可完成导入工作。dmaudtool 按照动态视图 V$AUDITRECORDS 的行列顺序输出审计结果,因此需要在目标库中创建一个与动态视图 V$AUDITRECORDS 结构一样的目标表,用以存放审计记录。

以章节 5.6.2.3.4 分析指定时间之后的审计文件中的分析结果输出文件为例,操作步骤如下:

  1. 在目标库中创建一个与动态视图 V$AUDITRECORDS 结构相同的目标表;

SQL 语句如下:

CREATE TABLE aud_test

(

"USERID" INTEGER,

"USERNAME" VARCHAR(128),

"ROLEID" INTEGER,

"ROLENAME" VARCHAR(128),

"IP" VARCHAR(64),

"SCHID" INTEGER,

"SCHNAME" VARCHAR(128),

"OBJID" INTEGER,

"OBJNAME" VARCHAR(128),

"OPERATION" VARCHAR(128) NOT NULL,

"SUCC_FLAG" CHAR(1) NOT NULL,

"SQL_TEXT" VARCHAR(8188),

"DESCRIPTION" VARCHAR(8188),

"OPTIME" DATETIME(6) NOT NULL,

"MAC" VARCHAR(25),

"SEQNO" BYTE,

"BIND_INFO" VARCHAR(8188)

);
  1. 创建控制文件 out.ctrl,并存放到 E:\dmdbms\data\DAMENG 目录下;

out.ctrl 中内容如下:

LOAD DATA

INFILE 'E:\dmdbms\data\DAMENG\out\aud_out_3.txt' STR 'AAAA'

INTO TABLE aud_test

FIELDS '|'

(

"USERID",

"USERNAME",

"ROLEID",

"ROLENAME",

"IP",

"SCHID",

"SCHNAME",

"OBJID",

"OBJNAME",

"OPERATION",

"SUCC_FLAG",

"SQL_TEXT",

"DESCRIPTION",

"OPTIME",

"MAC",

"SEQNO",

"BIND_INFO"

)
  1. 打开命令行窗口,进入 DM 安装目录的 bin 目录,运行 dmfldr,将分析结果导入到目标表中。

命令行操作如下:

dmfldr userid=SYSDBA/DMdba_123@192.168.1.60:5236 control='e:\dmdbms\data\DAMENG\out.ctrl'
注意

审计记录中可能存在过长的执行语句,所以在导入目标表时可能出现“记录超长”的错误,可以使用新库作为目标库,初始化数据库时调大建库参数page_size。例如,存在一个执行语句长度为3900字节,可以设置page_size=32。

5.7 集群环境审计说明

本节主要介绍主备集群、DMDSC 集群以及 DMDPC 集群环境下的审计文件生成规则。

  • 主备集群环境

主库和备库各自生成审计文件,并且只能查询自身审计文件中的信息。

主库节点审计规则与单机一致,可以根据审计设置正常审计所有内容,并查询相关所有审计信息。

备库节点不会加载审计系统表,除了系统启动、关闭或者 OPEN 时会强制生成审计信息外,不会生成其他审计信息。

  • DMDSC 集群环境

DMDSC 集群环境下,每个节点各自生成审计文件,可以正常审计所有内容,在任意节点上均可查询到所有节点的审计信息。

  • DMDPC 集群环境

DMDPC 集群环境下,仅 MP 节点生成审计文件,其他节点会从 MP 节点获取审计设置信息,生成相应审计内容,最终都由 MP 节点写入审计文件,在任意节点上均可查询到所有审计信息。

微信扫码
分享文档
扫一扫
联系客服