达梦数据库DM8之数据库审计功能
审计机制是DM数据库管理系统安全管理的重要组成部分之一。DM数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。DM具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。
1. 审计开关
在DM系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由过程 SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param有三种取值:
0:关闭审计
1:打开普通审计
2:打开普通审计和实时审计
缺省值为0。
示例:
1)打开普通审计开关。
SP_SET_ENABLE_AUDIT (1); --DM8打开方式
SP_SET_PARA_VALUE (1,‘ENABLE_AUDIT’,1); --DM7打开方式
2)关闭普通审计开关。
SP_SET_ENABLE_AUDIT (0);
注意:审计开关必须由具有数据库审计员权限的管理员进行设置(即:安全版:登录SYSSSO用户开启审计,企业版:登录SYSAUDITOR用户开启审计)。
数据库审计员可通过查询V$DM_INI动态视图查询ENABLE_AUDIT的当前值。
SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
2. 审计的设置与取消
数据库审计员指定被审计对象的活动称为审计设置,只有具有AUDIT DATABASE权限的审计员才能进行审计设置。DM提供审计设置系统过程来实现这种设置,被审计的对象可以是某类操作,也可以是某些用户在数据库中的全部行踪。只有预先设置的操作和用户才能被DM系统自动进行审计。
DM允许在三个级别上进行审计设置,如表所示。
注意:审计设置存放于DM字典表SYSAUDIT中,进行一次审计设置就在SYSAUDIT中增加一条对应的记录,取消审计则删除SYSAUDIT中相应的记录。
2.1 语句级审计
语句级审计的动作是全局的,不对应具体的数据库对象。
1)开启审计
设置语句级审计的系统过程如下:
SP_AUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
参数说明:
TYPE: 语句级审计选项
USERNAME: 用户名,NULL表示不限制
WHENEVER: 审计时机,可选的取值为:
ALL: 所有的
SUCCESSFUL: 操作成功时
FAIL: 操作失败时
示例:
SP_AUDIT_STMT('TABLE', 'NULL', 'ALL'); --审计表的创建、修改和删除。
SP_AUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL'); --对SYSDBA创建用户成功进行审计。
SP_AUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL'); --对用户USER2进行的表的修改进行审计,不管失败和成功。
SP_AUDIT_STMT('DELETE TABLE', 'USER2', 'ALL'); --对用户USER2进行的表的删除进行审计,不管失败和成功。
2)关闭审计
取消语句级审计的系统过程如下:
VOID
SP_NOAUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
参数说明:
TYPE 语句级审计选项,即上表中的第一列
USERNAME 用户名,NULL表示不限制
WHENEVER 审计时机,可选的取值为:
ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时
使用说明:
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
示例:
SP_NOAUDIT_STMT('TABLE', 'NULL', 'ALL'); --取消对表的创建、修改和删除的审计。
SP_NOAUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL'); --取消对SYSDBA创建用户成功进行审计。
SP_NOAUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL'); --取消对用户USER2进行的表的修改的审计。
SP_NOAUDIT_STMT('DELETE TABLE', 'USER2', 'ALL'); --取消对用户USER2进行的表的删除的审计。
2.2 对象级审计
对象级审计发生在具体的对象上,需要指定模式名以及对象名。
1)开启审计
设置对象级审计的系统过程如下:
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 用户名
SCHNAME 模式名,为空时置‘null’
TVNAME 表、视图、存储过程名不能为空
COLNAME 列名
WHENEVER 审计时机,可选的取值为:
ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时
示例:
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL'); --对SYSDBA对表PERSON.ADDRESS进行的添加的成功操作进行审计。
SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL'); --对SYSDBA对表PERSON.ADDRESS进行的修改的成功操作进行审计。
SP_AUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL'); --对SYSDBA对表PERSON.ADDRESS的ADDRESS1列进行的修改成功的操作进行审计。
2)关闭审计
取消对象级审计的系统过程如下:
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 用户名
SCHNAME 模式名,为空时置‘null’
TVNAME 表、视图、存储过程名不能为空
COLNAME 列名
WHENEVER 审计时机,可选的取值为:
ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时
使用说明:
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
示例:
SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL'); --取消对SYSDBA对表PERSON.ADDRESS进行的添加的成功操作的审计。
SP_NOAUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL'); --取消对SYSDBA对表PERSON.ADDRESS进行的修改的成功操作的审计。
SP_NOAUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL'); --取消对SYSDBA对表PERSON.ADDRESS的ADDRESS1列进行的修改成功操作的审计。
2.3 关于审计设置的一些说明
只要审计功能被启用,系统级的审计记录就会产生;
在进行数据库审计时,审计员之间没有区别,可以审计所有数据库对象,也可取消其他审计员的审计设置;
语句级审计不针对特定的对象,只针对用户;
对象级审计针对指定的用户与指定的对象进行审计;
在设置审计时,审计选项不区分包含关系,都可以设置;
在设置审计时,审计时机不区分包含关系,都可以进行设置;
如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。
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
DFS_PATH = ##path of db_file in dfs
AUD_PATH =D:\dmdbms\data\DAMENG\aud
审计文件命名格式为“AUDIT_GUID_创建时间.log”,其中“GUID”为DM给定的一个唯一值。
审计文件的大小可以通过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数据库服务器才能生效。
注意:两种策略都会导致审计记录的缺失,因此,管理员应该及时对审计文件进行备份。
4. 审计文件删除
若系统审计人员已对历史审计信息进行了充分分析,不再需要某个时间点之前的历史审计信息,可使用下面的系统过程删除指定时间点之前的审计文件,但是不会删除DM当前正在使用的审计文件。
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);
SP_DROP_AUDIT_FILE(sysdate,0);
5. 审计文件加密
DM审计文件支持文件加密,审计管理员可使用下面的系统过程设置审计文件加密:
VOID
SP_AUDIT_SET_ENC(
NAME VARCHAR(128),
KEY VARCHAR(128)
)
参数说明:
NAME 加密算法名,可使用DM支持的加密算法;也支持用户自定义加密算法
KEY 加密密钥
6.审计信息查阅
1) SYSAUDITOR.SYSAUDIT: 当使用DM提供的审计机制进行了审计设置后,这些审计设置信息都记录在数据字典表SYSAUDITOR.SYSAUDIT中;
2) SYSAUDITOR.V$AUDITRECORDS: 只要DM系统处于审计活动状态,系统按审计设置进行审计活动,并将审计信息写入审计文件。审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。审计用户可以通过动态视图SYSAUDITOR.V$AUDITRECORDS查询系统默认路径下的审计文件的审计记录
例如,SYSAUDITOR进行如下的审计设置:
/*-------- 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 1120 -1 50 1
2 2 50331649 1120 -1 53 1
以SYSDBA登录,对表PERSON.ADDRESS进行插入和删除操作:
/*-------- SYSDBA/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/SYSAUDITOR ----------*/
SELECT * FROM SYSAUDITOR.V$AUDITRECORDS WHERE USERNAME='SYSDBA';
行号 USERID USERNAME ROLEID ROLENAME IP SCHID SCHNAME OBJID OBJNAME OPERATION SUCC_FLAG
---------- ----------- -------- ----------- -------- -------------------- ----------- ------- ----------- ------- --------- ---------
SQL_TEXT DESCRIBTION
---------------------------------------------------------------------------------------------- ------------------
OPTIME MAC SEQNO
-------------------------- --- -----------
2 50331649 SYSDBA 67108864 DBA ::ffff:192.168.186.1 150995947 PERSON 1120 ADDRESS INSERT Y
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES('AAA','','BBB','111111');
2022-05-30 13:11:07.000000 0
注意:由于并没有相关的审计设置,SYSDBA之前执行的DELETE操作没有生成审计记录。
7. 审计分析
DM提供了图形界面的审计分析工具Analyzer以及通过命令行启动的审计分析工具dmaudtool。
Analyzer实现对审计记录的分析功能,能够根据所制定的分析规则,对审计记录进行分析,判断系统中是否存在对系统安全构成危险的活动。只有审计用户才能使用审计分析工具Analyzer。
dmaudtool实现对审计记录的解析、筛选以及导出功能。审计文件的内容是不可视的,dmaudtool可解析审计文件中的审计记录并导出至指定输出文件当中以供用户查看。同时dmaudtool也提供筛选功能,可以针对审计记录中的用户名、模式名、对象名或者操作时间有选择性地筛选导出。审计分析工具dmaudtool的使用对用户无限制。
7.1 审计分析工具Analyzer
审计用户登录审计分析工具后,通过Analyzer可以创建和删除审计规则,并可以指定对某些审计文件应用某些规则。并将审计结果以表格的方式展现出来。
[dmdba@tool]$ ./analyzer
1)右键“审计规则”,可以选择新建审计规则
2)新建规则的名称,IP,用户名等信息
3)新建规则的DDL规则
说明:新建规则的类型有很多,这里就不一一阐述了,可以自行创建测试。
4)审计日志查看器
7.2 审计分析工具dmaudtool
审计信息以审计记录的形式存放在DM数据库审计文件中。审计文件的内容是不可视的,审计分析工具dmaudtool可以筛选解析审计文件中的审计记录并且导出至指定输出文件当中以供用户查看。审计分析工具dmaudtool的使用对用户无限制。
1) 使用dmaudtool工具
dmaudtool工具需要从命令行启动。用户需要在cmd命令行工具中找到DM安装目录的bin文件夹/dmdbms/bin,输入dmaudtool和参数后回车。参数在下一节详细介绍。
语法如下:
[dmdba@ bin]$ ./dmaudtool help
dmaudtool V8
格式: ./dmaudtool KEYWORD=value
例程: ./dmaudtool USERID=sysauditor/sysauditor@192.168.0.33:4356 AFIL_PATH=/opt/dm7data/dameng/aud OUT_PATH=/opt/dm7data/dameng/out/aud_out.txt
必选参数: USERID、AFIL_PATH、OUT_PATH
关键字 说明
--------------------------------------------------------------------------------
USERID 用户名/口令 格式:<username>/<password>[@<connect_identifier>][<option>],必选
<connect_identifier> : [<svc_name> | host[:port] | <unixsocket_file>]
<option> : #{<exetend_option>=<value>[,<extend_option>=<value>]...}
--此行外层{}是为了封装参数之用,书写时需要保留
AFIL_PATH 审计文件所在的路径,必选
OUT_PATH 输出文件的生成路径,与OUT_SIZE配合使用,若超过指定文件大小,则会生成同名加序号后缀的文件,必选。
OUT_SIZE 输出文件的指定大小,单位为兆(M),默认为0,表示不限制文件大小,最小500,最大65534。
DCR_INI DCR_INI路径,用于连接ASM使用。当审计文件存在与ASM上使用,若没有,则忽略。
USERNAME 对应审计记录中记录的用户名,若指定,则说明收集满足该用户名的审计记录。若未指定,则不考虑
SCHNAME 对应审计记录中记录的模式名,若指定,则说明收集满足该模式名的审计记录。若未指定,则不考虑
OBJNAME 对应审计记录中记录的对象名,若指定,则说明收集满足该对象名的审计记录。若未指定,则不考虑
TIME_FROM 对应审计记录中操作时间,若指定,则收集指定时间之后的审计记录。若未指定,则不考虑
TIME_TO 对应审计记录中操作时间,若指定,则收集指定时间之前的审计记录。若未指定,则不考虑
R_SEP 输出文件中行分隔符,默认回车符
C_SEP 输出文件中列分隔符,默认|号符
HELP 打印帮助信息
例如:分析用户名为SYSDBA,密码为SYSDBA,IP地址为192.168.186.129,端口号为5240的数据库的审计文件,并将分析结果输出保存。审计文件所在路径为E:\dmdbms\data\DAMENG。分析结果输出路径为E:\dmdbms\data\DAMENG\out\aud_out.txt,若已经存在,则报错。行间隔符设为AAAA,输出文件大小不限。
分析本地磁盘上的审计文件时,要求dmaudtool与审计文件在同一台主机上。命令行操作如下:
dmaudtool userid=SYSDBA/123456789@192.168.1.60:5236 afil_path=E:\dmdbms\data\DAMENG out_path=E:\dmdbms\data\DAMENG\out\aud_out R_SEP=AAAA
显示如下:
达梦数据库社区地址:https://eco.dameng.com/