审计机制是 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 所示。
审计级别 | 说明 |
---|---|
系统级 | 系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录 |
语句级 | 导致影响特定类型数据库对象的特殊 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 记录了系统级审计的审计操作及对应说明。
审计的数据库操作 | 说明 |
---|---|
数据库系统启动关闭 | 区分第一次启动、正常退出后启动、异常退出后启动和还原库后第一次启动 |
审计空间不足告警 | 系统定时检测如果审计空间不足就会生成审计记录 |
数据库版本升级 | 包括数据字典版本、回滚段版本等 |
主备之间 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 所示。
审计选项 | 审计的数据库操作 | 说明 |
---|---|---|
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 所示。
审计选项(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 中,结构如下表所示:
序号 | 列 | 数据类型 | 说明 |
---|---|---|---|
1 | LEVEL | SMALLINT | 审计级别 |
2 | UID | INTEGER | 用户 ID |
3 | TVPID | INTEGER | 表/视图/触发器/存储过程函数 ID |
4 | COLID | SMALLINT | 列 ID |
5 | TYPE | SMALLINT | 审计类型 |
6 | WHENEVER | SMALLINT | 审计情况 |
语句序列审计设置信息记录在数据字典表 SYSAUDITOR.SYSAUDITSQLSEQ 中,结构如下表所示:
序号 | 列 | 数据类型 | 说明 |
---|---|---|---|
1 | NAME | VARCHAR(128) | 语句序列审计规则名 |
2 | SQLSEQ | INTEGER | 语句序列中的 SQL 语句序号 |
3 | SQLSTR | VARCHAR(8188) | 语句序列中的 SQL 语句 |
审计类型用户可以查询上述数据字典表查看审计设置信息。
只要 DM 系统处于审计活动状态,系统按审计设置进行审计活动,并将审计信息写入审计文件。审计用户可通过查询 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 动态视图获取审计文件存放路径下审计文件的具体信息,动态视图的结构如下表所示:
序号 | 列 | 数据类型 | 说明 |
---|---|---|---|
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 动态视图获取审计文件存放路径下审计文件中审计记录的具体信息,审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。动态视图的结构如下表所示:
序号 | 列 | 数据类型 | 说明 |
---|---|---|---|
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 文件。配置项如下表所示。
项目 | 项目意义 | 字段 | 字段意义 |
---|---|---|---|
[PATH] | 实时审计警报记录文件所在的文件目录 | PATH | 实时审计警报记录文件所在的文件目录 |
[SENDER] | 发件人 | 发件人邮箱 | |
SMTP | 发件人邮箱 SMTP 服务器 | ||
USERNAME | 发件人用户名 | ||
PASSWORD | 发件人密码 | ||
[RECEIVER] | 收件人 | 收件人邮箱 | |
[INTERVAL] | 时间间隔 | INTERVAL | 检查审计警报记录文件的时间间隔,单位秒 |
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.6.1.1 审计规则
右键单击导航树中的“审计规则”节点,在弹出的菜单中选择“新建审计分析规则”,可打开如下图所示的新建审计分析规则窗口。
如上图中创建了一个名为 aud_sysdba 的审计分析规则,对 SYSDBA 的所有审计记录进行分析。之后我们就可以将这个审计分析规则应用于对审计记录文件的分析。右键点击“审计规则”或一个具体的审计分析规则节点,在弹出的菜单中选择“审计规则分析”,弹出如下图所示审计规则分析窗口。
选择需要应用的审计分析规则,可以同时选择多条,在下面的文件列表中添加需要进行分析的审计记录文件,Analyzer 工具就会根据审计分析规则对文件中的审计记录进行分析,将满足规则的审计记录以表格的形式显示出来,如下图所示。
在审计规则分析结果显示窗口中,还可以对显示的审计记录根据需要进行进一步过滤,进一步分析出需要的审计记录。
5.6.1.2 审计日志查看器
双击“审计日志查看器”节点,可打开如下图所示的条件设置窗口。
添加需要查看的审计记录文件,还可在窗口左侧的“选择项”中设置各种过滤条件,之后点击“确定”,将满足规则的审计记录以表格的形式显示出来,与图 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.2.2 dmaudtool 参数一览表
本节提供 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 参数更新审计日志文件密钥。
使用说明:
- 审计日志文件默认不使用加密算法进行加密,对于不加密文件则不更新密钥。
- dmaudtool 密钥更新功能不更新当前最新审计日志文件的密钥。使用密钥更新前需要先通过审计文件加密系统过程 sp_audit_set_enc 来设置更新密钥,切换新的审计日志文件,然后使用 dmaudtool 工具更新之前审计日志密钥。
- USERID 需要指定具有审计员权限用户,否则无法进行密钥更换。
-
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 分析指定时间之后的审计文件中的分析结果输出文件为例,操作步骤如下:
- 在目标库中创建一个与动态视图 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)
);
- 创建控制文件 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"
)
- 打开命令行窗口,进入 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 节点写入审计文件,在任意节点上均可查询到所有审计信息。