所有审计开关启停、审计策略配置、日志查看,仅审计管理员 SYSAUDITOR 可操作;SYSDBA、普通业务用户无权修改审计配置、删除审计日志,杜绝管理员篡改操作痕迹,保障审计日志完整性。审计默认账号:SYSAUDITOR,环境初始化后,需及时修改SYSAUDITOR默认初始密码,规避安全风险。
普通审计与实时审计均支持三级审计粒度,可根据业务需求灵活搭配配置:
DM8通过内置存储过程统一控制审计模式,参数修改即时生效,无需重启数据库实例,核心参数ENABLE_AUDIT取值对应不同审计状态:
| 参数取值 | 审计模式 | 核心说明 |
|---|---|---|
| 0 | 关闭审计 | 默认状态,不生成任何审计日志 |
| 1 | 普通审计 | 异步记录操作日志,仅支持事后追溯 |
| 2 | 实时审计 | 兼容普通审计能力,新增实时检测与主动干预功能 |
可通过以下语句查询当前数据库审计状态:
SQL> SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
行号 PARA_NAME PARA_VALUE
---------- ------------ ----------
1 ENABLE_AUDIT 0
结合官方机制与实际运维场景,普通审计与实时审计模式的差异如下:
| 对比维度 | 普通审计 | 实时审计 |
|---|---|---|
| 核心定位 | 事后追溯、合规留存 | 事中防护、实时拦截、事后追溯兼顾 |
| 写入机制 | 异步批量刷盘,存在日志延迟 | 同步写入,绑定事务日志,无延迟 |
| 安全能力 | 仅日志记录,无主动干预能力 | 支持风险检测、违规告警、会话阻断、账号锁定 |
| 规则体系 | 系统级、语句级、对象级基础规则 | 兼容基础规则,支持时间、IP、频次自定义风险规则 |
| 性能开销 | 极低,对业务影响较小 | 中等偏高,占用一定CPU、磁盘IO资源 |
| 日志可靠性 | 极端宕机可能存在少量日志丢失 | 事务绑定机制,日志完整不可丢失 |
DM8 审计参数为全局通用配置,参数修改即时生效,无需重启数据库实例,统一由审计管理员 SYSAUDITOR 执行操作。通过 ENABLE_AUDIT 参数可自由切换审计状态,适配不同安全运维场景。
登录SYSAUDITOR用户,执行以下操作进行审计模式切换:
SQL> SP_SET_ENABLE_AUDIT(0);
SQL> SP_SET_ENABLE_AUDIT(1);
SQL> SP_SET_ENABLE_AUDIT(2);
单审计日志文件最大容量参数,用于限制单个审计日志文件的磁盘占用上限,避免生成超大日志文件导致日志解析、归档、备份卡顿。取值范围 8~4096(单位:MB),默认值 100MB。达到单文件上限后,数据库自动新建审计文件续写日志,保障日志文件规整可控。
注意:登录SYSDBA用户,执行以下操作进行修改,修改后立即生效:
--示例:修改单审计日志文件最大容量:200MB
SQL> SP_SET_PARA_VALUE(1,'AUDIT_MAX_FILE_SIZE',200);
DMSQL 过程已成功完成
审计日志总空间软阈值参数,用于管控实例下所有审计日志文件的整体磁盘占用总量,防止审计日志无限制膨胀占用磁盘资源。取值范围 204800~1048576(单位:MB),0 表示不限制,缺省为 0。该参数为柔性限制,优先级低于日志保留天数参数。
注意:登录SYSDBA用户,执行以下操作进行修改,修改后重启生效:
--示例:审计日志总空间上限:200G
SQL> SP_SET_PARA_VALUE(2,'AUDIT_SPACE_LIMIT',204800);
DMSQL 过程已成功完成
审计日志最小保留天数硬阈值,强制规定审计日志的最短留存周期,杜绝合规日志被提前清理。取值范围 0~3660 天,默认值 0。即使审计总空间达到 AUDIT_SPACE_LIMIT 上限,系统也不会删除该周期内的审计日志,保障合规追溯有效性。只有最老审计日志文件的保留天数超过 AUDIT_KEEP_DAYS 才会根据 AUDIT_FILE_FULL_MODE 设定值来处理老的审计文件。
注意:登录SYSDBA用户,执行以下操作进行修改,修改后重启生效,当输入值为非整数时,实际生效值会进行四舍五入:
--示例:审计日志最小保留天数:90天
SQL> SP_SET_PARA_VALUE(2,'AUDIT_KEEP_DAYS',90);
DMSQL 过程已成功完成
--参数AUDIT_KEEP_DAYS输入非整数值
SQL> SP_SET_PARA_VALUE(2,'AUDIT_KEEP_DAYS',3.5);
DMSQL 过程已成功完成
--进行四舍五入取整
SQL> SELECT PARA_NAME,FILE_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_KEEP_DAYS';
行号 PARA_NAME FILE_VALUE
---------- --------------- ----------
1 AUDIT_KEEP_DAYS 4
审计日志写满处置策略参数,用于定义审计空间触发上限、无过期日志可清理时的系统处理逻辑,直接决定极限场景下审计功能与数据库的运行状态。取值为 1、2、3,默认值 3。
AUDIT_FILE_FULL_MODE 三种模式:
(1)值为1:
当审计文件总大小达到 AUDIT_SPACE_LIMIT,且最老审计文件保留天数已超过 AUDIT_KEEP_DAYS:
从最老审计文件开始删,直到腾出足够空间创建新审计文件;
若把所有“可删的超期老文件”都删光,空间仍不够创建新文件 → 数据库挂起(HANG),不再处理任何新请求;
必须等 DBA 在 OS 层清出足够磁盘空间(或调大 AUDIT_SPACE_LIMIT 重启)才能解挂;
业务风险最高,可能丢失老的审计日志,也可能把库写挂。
(2)值为2:
达到审计日志限制后:
直接停止写审计记录,当前及后续会话的审计不再落盘;
已有审计文件原样保留,不删任何文件;
数据库正常运行,业务不中断;
审计出现空白期,直到 DBA 手动 SP_DROP_AUDIT_FILE 清文件或调大上限重启恢复写入。
(2)值为3:
达到审计日志限制后:
先按模式 1 尝试:删最老超期审计文件腾空间,尝试建新文件;
若删光可删文件仍不够 → 不挂库,转为模式 2 行为:停止写审计;
系统后台定时检测磁盘/审计目录空余空间,一旦有足够空间 → 自动恢复审计写入;
注意:登录SYSDBA用户,执行以下操作进行修改,修改后重启生效:
--示例:修改为审计文件创建失败时,不再审计
SQL> SP_SET_PARA_VALUE(2,'AUDIT_FILE_FULL_MODE',2);
DMSQL 过程已成功完成
审计日志存储路径参数,用于自定义 DM8 审计日志文件的磁盘存放目录,支持指定绝对路径,灵活适配磁盘分区规划、独立日志盘挂载等生产场景。默认存储路径为实例目录 dmdata/实例名/audit,无固定取值限制,建议配置在独立非业务数据磁盘,避免日志膨胀挤占数据库数据盘空间。修改后新生成的审计日志将写入新路径,历史日志保留在原目录。
注意:该参数通过编辑dm.ini文件,新增 AUD_PATH 参数配置,修改后重启生效:
##示例:修改审计日志文件路径
[dmdba@dm8 DAMENG]$ vi dm.ini
##新增AUD_PATH参数指向新的路径
AUD_PATH = /dmaudit
管控审计日志刷盘机制参数,控制内存审计缓存写入磁盘的时机,兼顾日志实时性、数据完整性与数据库性能。
AUDIT_FLUSH_LEVEL 参数取值:
注意:登录SYSDBA用户,执行以下操作进行修改,修改后立即生效:
--示例:修改刷盘规则为语句级刷盘
SQL> SP_SET_PARA_VALUE(1,'AUDIT_FLUSH_LEVEL',0);
DMSQL 过程已成功完成
SP_DROP_AUDIT_FILE 是 DM8 专属审计日志手动清理存储过程,仅审计管理员 SYSAUDITOR 有权执行。用于手动精准删除指定时间、指定路径的历史审计日志文件,区别于系统自动清理策略,该存储过程可人工介入清理过期冗余审计文件,适配日志迁移、历史垃圾日志清理、磁盘临时扩容等运维场景。
注意:若数据库设置 AUDIT_KEEP_DAYS指定了审计文件最小保留天数,使用 SP_DROP_AUDIT_FILE 时不会删除还在指定保留天数内的审计文件。
基本语法如下:
VOID SP_DROP_AUDIT_FILE(
TIME_STR VARCHAR(128), -- 时间字符串,删除该时间之前的审计文件
TYPE INT -- 0=普通审计文件,1=实时审计文件
);
示例:
-- 删除指定时间之前的普通审计日志
SQL> SP_DROP_AUDIT_FILE('2026-07-23 17:00:00', 0);
DMSQL 过程已成功完成
当使用 DM 提供的审计机制进行了审计设置后,除语句序列审计设置外的审计设置信息都记录在数据字典表 SYSAUDITOR.SYSAUDIT 中,可以通过查看该视图,了解当前审计规则。
--查询系统当前审计规则
SQL> SELECT
SF_GET_AUDIT_LEVELNAME(LEVEL) AS AUDIT_LEVEL,
SF_GET_USERNAME_BY_ID(UID) AS USERNAME,
SF_GET_AUDIT_TYPENAME(TYPE) AS AUDIT_TYPE,
SF_GET_AUDIT_WHENEVERNAME("WHENEVER") AS AUDIT_WHEN
FROM SYSAUDITOR.SYSAUDIT;
行号 AUDIT_LEVEL USERNAME AUDIT_TYPE AUDIT_WHEN
---------- ----------- -------- ------------ ----------
1 STMT APP_USER SELECT TABLE ALL
审计用户可通过查询 V$AUDITRECORDS 动态视图获取审计文件存放路径下审计文件中审计记录的具体信息,审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。
--查询系统当前的审计记录
SQL> SELECT * FROM V$AUDITRECORDS;
普通审计是DM8基础审计模式,采用异步缓冲写入机制。数据库内核捕获匹配规则的操作事件后,先写入内存缓冲区,再由后台线程周期性批量刷入磁盘生成审计日志。该模式存在短暂日志落地延迟,仅用于事后行为追溯、故障排查与合规留存,无实时风险拦截能力,整体性能损耗较低,对业务运行影响较小。
系统审计用于记录数据库启动、关闭、参数修改、登录失败等系统级行为,由数据库内核自动产生,无需也无法由用户单独配置,只需开启审计开关即可生效;系统审计具体内容,可参考《DM8安全管理》文档 5.2.1 系统级审计。
--开启系统审计
SQL> SP_SET_ENABLE_AUDIT(1);
语句审计用于跟踪指定SQL类型(如SELECT、INSERT、DDL等)的执行情况,实现按操作类别的宏观审计,能够覆盖全库范围内的行为监控,适用于账号权限变更、高危 DDL、批量数据访问等场景,是实现安全合规与异常行为发现的基础审计手段。
基本语法如下:
--开启语句级审计
SP_AUDIT_STMT(
TYPE VARCHAR(30), --语句级审计选项,具体可参考官方文档《表 5.3 语句级审计选项》
USERNAME VARCHAR (128), --用户名,NULL 表示不限制
WHENEVER VARCHAR (20) --审计时机,可选的取值为:
--ALL:所有的
--SUCCESSFUL:操作成功时
--FAIL:操作失败时
)
--关闭语句级审计
SP_NOAUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
示例:
--1. 登录SYSAUDITOR用户,设置审计 APP_USER 用户的 TABLE 操作
SQL> SP_AUDIT_STMT('TABLE', 'APP_USER', 'ALL');
DMSQL 过程已成功完成
--2. 登录SYSAUDITOR用户,查看当前的审计规则
SQL> SELECT
SF_GET_AUDIT_LEVELNAME(LEVEL) AS AUDIT_LEVEL,
SF_GET_USERNAME_BY_ID(UID) AS USERNAME,
SF_GET_AUDIT_TYPENAME(TYPE) AS AUDIT_TYPE,
SF_GET_AUDIT_WHENEVERNAME("WHENEVER") AS AUDIT_WHEN
FROM SYSAUDITOR.SYSAUDIT;
行号 AUDIT_LEVEL USERNAME AUDIT_TYPE AUDIT_WHEN
---------- ----------- -------- ---------- ----------
1 STMT APP_USER TABLE ALL
--3. 登录APP_USER,进行 create table 操作
[dmdba@dm8 ~]$ disql app_user/xxxxx
SQL> create table TEMP_EMP AS SELECT * FROM EMP;
--4. 查看审计记录
SQL> select USERNAME,ROLENAME,IP,SCHNAME,OBJID,OBJNAME,OPERATION,SUCC_FLAG,SQL_TEXT,OPTIME FROM V$AUDITRECORDS WHERE USERNAME='APP_USER' and SCHNAME='APP_USER';
服务器[LOCALHOST:5236]:处于普通打开状态
已连接
SQL> select USERNAME,ROLENAME,IP,SCHNAME,OBJID,OBJNAME,OPERATION,SUCC_FLAG,SQL_TEXT,OPTIME FROM V$AUDITRECORDS WHERE USERNAME='APP_USER' and OPERATION='CREATE TABLE';
行号 USERNAME ROLENAME IP SCHNAME OBJID OBJNAME OPERATION SUCC_FLAG SQL_TEXT OPTIME
---------- -------- -------- ------------------- ------- ----------- ------- ------------ --------- ------------------------------------------- --------------------------
1 APP_USER RESOURCE ::ffff:192.168.56.1 -1 CREATE TABLE Y create table TEMP_EMP AS SELECT * FROM EMP; 2026-07-23 11:23:42.000000
对象级审计用于针对特定的数据库对象(如某张表、视图、存储过程等)跟踪指定 SQL 操作(如 SELECT、INSERT、UPDATE、DELETE、EXECUTE 等)的执行情况,实现按“对象 × 操作”的细粒度审计;它只在命中具体对象时才记录,不关心整体 SQL 类型分布,适用于对核心业务表、敏感数据表、权限入口对象进行精准溯源与防泄露管控,是语句级审计在敏感资产层面的必要补充。
基本语法如下:
--开启对象级审计
SP_AUDIT_OBJECT (
TYPE VARCHAR(30), --对象级审计选项
USERNAME VARCHAR (128), --用户名,为空串或 NULL 时表示不限定用户
SCHNAME VARCHAR (128), --模式名,为空串或 NULL 时表示不限定模式
TVNAME VARCHAR (128), --表名、视图名、存储过程名,不支持取值为空串或 NULL
COLNAME VARCHAR (128), --列名,为空串或 NULL 时表示不限定列
WHENEVER VARCHAR (20) --审计时机,可选的取值为:ALL:所有的;SUCCESSFUL:操作成功时;FAIL:操作失败时
);
--关闭对象级审计
SP_NOAUDIT_OBJECT (
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
COLNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
示例:
--1. 对 删除 APP_USER 用户 APPINFO 模式下 T200 表操作设置审计
SQL> SP_AUDIT_OBJECT('DELETE','APP_USER','APPINFO','T200','ALL');
DMSQL 过程已成功完成
--2. 查询确认审计规则
SQL> SELECT
SF_GET_AUDIT_LEVELNAME(LEVEL) AS AUDIT_LEVEL,
SF_GET_USERNAME_BY_ID(UID) AS USERNAME,
SF_GET_AUDIT_TYPENAME(TYPE) AS AUDIT_TYPE,
SF_GET_AUDIT_WHENEVERNAME("WHENEVER") AS AUDIT_WHEN
FROM SYSAUDITOR.SYSAUDIT;
行号 AUDIT_LEVEL USERNAME AUDIT_TYPE AUDIT_WHEN
---------- ----------- -------- ---------- ----------
1 OBJECT APP_USER DELETE ALL
--3. 登录APP_USER,进行 delete 操作
[dmdba@dm8 ~]$ disql app_user/xxxxx
SQL> DELETE FROM APPINFO.T200;
SQL> COMMIT;
--4. 查看审计记录
SQL> select USERNAME,ROLENAME,IP,SCHNAME,OBJID,OBJNAME,OPERATION,SUCC_FLAG,SQL_TEXT,OPTIME FROM V$AUDITRECORDS WHERE USERNAME='APP_USER' and SCHNAME='APPINFO';
行号 USERNAME ROLENAME IP SCHNAME OBJID OBJNAME OPERATION SUCC_FLAG SQL_TEXT OPTIME
---------- -------- -------- ------------------- ------- ----------- ------- --------- --------- ------------------------- --------------------------
1 APP_USER RESOURCE ::ffff:192.168.56.1 APPINFO 1118 T200 DELETE Y DELETE FROM APPINFO.T200; 2026-07-23 11:43:21.000000
实时审计是 DM8 提供的高阶审计模式,在兼容普通审计全部日志记录与事后追溯能力的基础上,优化了规则校验与日志写入机制,适用于高安全等级与强合规场景。
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 INTEGER );
参数含义如下:
SP_DROP_AUDIT_RULE( RULENAME VARCHAR(128) );
SQL> SP_SET_ENABLE_AUDIT(2); DMSQL 过程已成功完成
示例:检测短时间内多次登录失败的暴力破解行为,1分钟内登录失败超5次标记为风险操作。
SP_CREATE_AUDIT_RULE(
'PWD_CRACK_AUDIT', -- 规则名称
'CONNECT', -- 监控登录操作
'APP_USER', -- 监控APP_USER用户
'NULL',
'NULL',
'FAIL', -- 仅匹配登录失败操作
'NULL',
'NULL',
1, -- INTERVAL:1分钟统计间隔(官方单位:分钟)
5 -- TIMES:最大允许失败5次
);
-- 查询所有已创建的实时审计规则
SELECT ID,
RULENAME AS 规则名,
SF_GET_USERNAME_BY_ID(USERID) AS 用户名,
SCHID AS 模式ID,
SF_GET_SCHEMA_NAME_BY_ID(SCHID) AS 模式名,
OBJID AS 对象ID,
COLID AS 列ID,
OPTYPE AS 操作类型编码,
SF_GET_AUDIT_WHENEVERNAME("WHENEVER$") AS 记录时机,
ALLOW_IP AS 允许IP,
ALLOW_DT AS 允许时段,
INTERVAL$ AS 时间窗口_秒,
TIMES AS 触发阈值
FROM SYSAUDITOR.SYSAUDITRULES
ORDER BY ID;
行号 ID 规则名 用户名 模式ID 模式名 对象ID 列ID 操作类型编码 记录时机 允许IP 允许时段 时间窗口_秒 触发阈值
---------- ----------- --------------- --------- ----------- --------- ----------- ----------- ------------------ ------------ -------- ------------ ---------------- ------------
1 2 PWD_CRACK_AUDIT APP_USER -1 NULL -1 -1 118 FAIL 1 5
文章
阅读量
获赞
