注册
DM8数据库审计配置与管理
技术分享/ 文章详情 /

DM8数据库审计配置与管理

BigQ 2026/08/07 227 0 0

一 数据库审计概述

1.1 审计权限规范

所有审计开关启停、审计策略配置、日志查看,仅审计管理员 SYSAUDITOR 可操作;SYSDBA、普通业务用户无权修改审计配置、删除审计日志,杜绝管理员篡改操作痕迹,保障审计日志完整性。审计默认账号:SYSAUDITOR,环境初始化后,需及时修改SYSAUDITOR默认初始密码,规避安全风险。

1.2 审计基础粒度

普通审计与实时审计均支持三级审计粒度,可根据业务需求灵活搭配配置:

  • 系统级审计:默认自带生效,无需手动配置,主要记录数据库启停、实例重启、参数修改、审计开关变更等系统底层操作事件。
  • 语句级审计:粗粒度审计方式,针对SQL语句类型进行管控,可对DDL、DML、用户管理等各类语句,指定全体用户或单个用户进行操作记录。
  • 对象级审计:细粒度审计方式,精准针对指定模式、指定数据表的特定操作审计,适用于敏感数据、核心业务表的精细化监控场景。

1.3 审计核心参数

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资源
日志可靠性 极端宕机可能存在少量日志丢失 事务绑定机制,日志完整不可丢失

二 数据库审计管理

2.1 审计开启与关闭

DM8 审计参数为全局通用配置,参数修改即时生效,无需重启数据库实例,统一由审计管理员 SYSAUDITOR 执行操作。通过 ENABLE_AUDIT 参数可自由切换审计状态,适配不同安全运维场景。

登录SYSAUDITOR用户,执行以下操作进行审计模式切换:

  1. 关闭数据库审计功能
SQL> SP_SET_ENABLE_AUDIT(0);
  1. 开启普通日志审计
SQL> SP_SET_ENABLE_AUDIT(1);
  1. 开启实时日志审计
SQL> SP_SET_ENABLE_AUDIT(2);

2.2 审计日志参数

2.2.1 AUDIT_MAX_FILE_SIZE

单审计日志文件最大容量参数,用于限制单个审计日志文件的磁盘占用上限,避免生成超大日志文件导致日志解析、归档、备份卡顿。取值范围 8~4096(单位:MB),默认值 100MB。达到单文件上限后,数据库自动新建审计文件续写日志,保障日志文件规整可控。

注意:登录SYSDBA用户,执行以下操作进行修改,修改后立即生效:

--示例:修改单审计日志文件最大容量:200MB SQL> SP_SET_PARA_VALUE(1,'AUDIT_MAX_FILE_SIZE',200); DMSQL 过程已成功完成

2.2.2 AUDIT_SPACE_LIMIT

审计日志总空间软阈值参数,用于管控实例下所有审计日志文件的整体磁盘占用总量,防止审计日志无限制膨胀占用磁盘资源。取值范围 204800~1048576(单位:MB),0 表示不限制,缺省为 0。该参数为柔性限制,优先级低于日志保留天数参数。

注意:登录SYSDBA用户,执行以下操作进行修改,修改后重启生效:

--示例:审计日志总空间上限:200G SQL> SP_SET_PARA_VALUE(2,'AUDIT_SPACE_LIMIT',204800); DMSQL 过程已成功完成

2.2.3 AUDIT_KEEP_DAYS

审计日志最小保留天数硬阈值,强制规定审计日志的最短留存周期,杜绝合规日志被提前清理。取值范围 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

2.2.4 AUDIT_FILE_FULL_MODE

审计日志写满处置策略参数,用于定义审计空间触发上限、无过期日志可清理时的系统处理逻辑,直接决定极限场景下审计功能与数据库的运行状态。取值为 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 过程已成功完成

2.2.5 AUD_PATH

审计日志存储路径参数,用于自定义 DM8 审计日志文件的磁盘存放目录,支持指定绝对路径,灵活适配磁盘分区规划、独立日志盘挂载等生产场景。默认存储路径为实例目录 dmdata/实例名/audit,无固定取值限制,建议配置在独立非业务数据磁盘,避免日志膨胀挤占数据库数据盘空间。修改后新生成的审计日志将写入新路径,历史日志保留在原目录。

注意:该参数通过编辑dm.ini文件,新增 AUD_PATH 参数配置,修改后重启生效:

##示例:修改审计日志文件路径 [dmdba@dm8 DAMENG]$ vi dm.ini ##新增AUD_PATH参数指向新的路径 AUD_PATH = /dmaudit

2.2.6 AUDIT_FLUSH_LEVEL

管控审计日志刷盘机制参数,控制内存审计缓存写入磁盘的时机,兼顾日志实时性、数据完整性与数据库性能。

AUDIT_FLUSH_LEVEL 参数取值:

  • 0 :语句级刷盘:单条SQL语句执行完成后,立即触发审计日志刷盘写入磁盘。日志实时性最强、零缓存延迟,数据完整性最高,但高频业务场景磁盘IO开销较大。
  • 1:事务级刷盘(默认):单个数据库事务提交完成后,统一批量刷盘写入审计日志。平衡性能与日志完整性,避免单语句频繁IO。
  • 2:延迟缓存刷盘:系统默认8MB审计缓存,仅当缓存写满后统一批量刷盘。IO性能最优、开销最低,但极端宕机场景会丢失缓存内未落地日志。

注意:登录SYSDBA用户,执行以下操作进行修改,修改后立即生效:

--示例:修改刷盘规则为语句级刷盘 SQL> SP_SET_PARA_VALUE(1,'AUDIT_FLUSH_LEVEL',0); DMSQL 过程已成功完成

2.3 手动清理审计日志

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 过程已成功完成

2.4 查看审计规则

当使用 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

2.5 查看审计记录

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

--查询系统当前的审计记录 SQL> SELECT * FROM V$AUDITRECORDS;

三 数据库普通审计

3.1 普通审计原理

普通审计是DM8基础审计模式,采用异步缓冲写入机制。数据库内核捕获匹配规则的操作事件后,先写入内存缓冲区,再由后台线程周期性批量刷入磁盘生成审计日志。该模式存在短暂日志落地延迟,仅用于事后行为追溯、故障排查与合规留存,无实时风险拦截能力,整体性能损耗较低,对业务运行影响较小。

3.2 普通审计配置

3.2.1 系统级审计

系统审计用于记录数据库启动、关闭、参数修改、登录失败等系统级行为,由数据库内核自动产生,无需也无法由用户单独配置,只需开启审计开关即可生效;系统审计具体内容,可参考《DM8安全管理》文档 5.2.1 系统级审计。

--开启系统审计 SQL> SP_SET_ENABLE_AUDIT(1);

3.2.2 语句级审计

语句审计用于跟踪指定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

3.2.3 对象级审计

对象级审计用于针对特定的数据库对象(如某张表、视图、存储过程等)跟踪指定 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

四 数据库实时审计

4.1 实时审计原理

实时审计是 DM8 提供的高阶审计模式,在兼容普通审计全部日志记录与事后追溯能力的基础上,优化了规则校验与日志写入机制,适用于高安全等级与强合规场景。

4.2 实时审计基本语法

  1. 创建实时侵害检测规则
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 );

参数含义如下:

  • RULENAME:自定义实时侵害检测审计规则名称,最大长度128字节,全局唯一,用于规则创建、查询、删除、匹配识别,不可重复。
  • OPERATION:待审计的数据库操作类型,最大长度30字节,支持对象级审计中的全部可选操作、语句级审计中的部分可选操作、系统级合规操作,包含 SHUTDOWN、STARTUP、CONNECT、DISCONNECT、UNLOCK USER 等。
  • USERNAME:限定监控的数据库用户名,最大长度128字节,传 ‘NULL’ 表示匹配系统所有数据库用户。
  • SCHNAME:限定监控的数据库模式名,最大长度128字节,传 ‘NULL’ 表示匹配系统所有模式。
  • OBJNAME:限定监控的数据库对象名(表、视图、存储过程等),最大长度128字节,传 ‘NULL’ 表示匹配系统所有数据库对象。
  • WHENEVER:操作结果审计时机,最大长度20字节,官方固定三取值:ALL(匹配所有成功、失败操作)、SUCCESSFUL(仅匹配执行成功操作)、FAIL(仅匹配执行失败操作)。
  • ALLOW_IP:白名单客户端IP列表,最大长度1024字节,多IP以英文逗号分隔,IP需带双引号格式书写,传 ‘NULL’ 表示不限制客户端IP。仅白名单内IP的操作会被规则匹配审计。
  • ALLOW_DT:规则生效时间段,最大长度1024字节,支持周度规则时段、固定日期时段组合配置,传 ‘NULL’ 表示全天候24小时生效,非指定时段的操作不会触发该审计规则。
  • INTERVAL:高频行为统计时间间隔,整型,官方单位为分钟,配合 TIMES 实现高频异常操作检测,设置为0代表不开启频次检测规则。
  • TIMES:指定间隔内最大允许操作次数,整型,与 INTERVAL 联动生效。若单位时间内操作次数超出该阈值,将判定为侵害行为并标记风险审计日志,设置为0代表不限制操作次数。
  1. 删除实时侵害检测规则
SP_DROP_AUDIT_RULE( RULENAME VARCHAR(128) );

4.3 实时审计配置

  1. 开启实时审计功能
SQL> SP_SET_ENABLE_AUDIT(2); DMSQL 过程已成功完成
  1. 创建自定义审计规则

示例:检测短时间内多次登录失败的暴力破解行为,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次 );
  1. 查询创建的实时审计规则
-- 查询所有已创建的实时审计规则 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 ASID, 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
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服