数据库审计可以记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。
1 审计开关
在 DM 系统中,审计开关由 INI 参数 ENABLE_AUDIT 控制,该参数有三种值:
0:关闭审计
1:打开普通审计
2:打开普通审计和实时审计
在普通版本中,ENABLE_AUDIT 的缺省值为 0;在安全版本中,ENABLE_AUDIT 的缺省值为 2。审计开关必须由具有数据库审计员权限的管理员进行设置。
查看当前值:
SQL> select sf_get_para_value(1,'ENABLE_AUDIT');
行号 SF_GET_PARA_VALUE(1,'ENABLE_AUDIT')
---------- -----------------------------------
1 0
已用时间: 37.975(毫秒). 执行号:835.
SQL>
#修改内存和dm.ini文件中的参数值:
SQL> sp_set_para_value(1,'ENABLE_AUDIT',1);
DMSQL 过程已成功完成
已用时间: 48.014(毫秒). 执行号:836.
SQL> sp_set_para_value(2,'ENABLE_AUDIT',1);
DMSQL 过程已成功完成
已用时间: 31.458(毫秒). 执行号:837.
SQL> select sf_get_para_value(1,'ENABLE_AUDIT');
行号 SF_GET_PARA_VALUE(1,'ENABLE_AUDIT')
---------- -----------------------------------
1 1
已用时间: 23.825(毫秒). 执行号:838.
SQL> select sf_get_para_value(2,'ENABLE_AUDIT');
行号 SF_GET_PARA_VALUE(2,'ENABLE_AUDIT')
---------- -----------------------------------
1 1
已用时间: 2.230(毫秒). 执行号:839.
SQL>
关于参数修改参考:
DM7 达梦数据库 参数 修改方法
https://www.cndba.cn/dave/article/3578
2 审计的设置与取消
数据库审计员指定被审计对象的活动称为审计设置,只有具有 AUDIT DATABASE 权限的审计员才能进行审计设置。DM 提供审计设置系统过程来实现这种设置,被审计的对象可以是某类操作,也可以是某些用户在数据库中的全部行踪。只有预先设置的操作和用户才能被 DM 系统自动进行审计。
1.系统级
系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录。
2.语句级
导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句。
3.对象级
审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句。
审计设置存放于 DM 字典表 SYSAUDIT 中,进行一次审计设置就在 SYSAUDIT 中增加一条对应的记录,取消审计则删除 SYSAUDIT 中相应的记录。
审计设置的注意事项:
1.只要审计功能被启用,系统级的审计记录就会产生;
2.在进行数据库审计时,审计员之间没有区别,可以审计所有数据库对象,也可取消其他审计员的审计设置;
3.语句级审计不针对特定的对象,只针对用户;
4.对象级审计针对指定的用户与指定的对象进行审计;
5.在设置审计时,审计选项不区分包含关系,都可以设置;
6.在设置审计时,审计时机不区分包含关系,都可以进行设置;
7.如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。
3 审计文件管理
DM 审计信息存储在审计文件中。审计文件存放在数据库的 SYSTEM_PATH 指定的路径,即数据库所在路径。
SQL> select para_name,para_value from v$dm_ini where para_name='SYSTEM_PATH';
行号 PARA_NAME PARA_VALUE
---------- ----------- ---------------------
1 SYSTEM_PATH /dm/dmdbms/data/cndba
已用时间: 106.748(毫秒). 执行号:843.
SQL>
审计文件命名格式为“AUDITGUID创建时间.log”,其中“GUID”为DM 给定的一个唯一值。审计文件的大小可以通过 DM 的 INI 参数 AUDIT_MAX_FILE_SIZE 指定。当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。AUDIT_MAX_FILE_SIZE 为动态系统级参数,缺省值为 100M,DBA用户可通过系统过程 SP_SET_PARA_VALUE 对其进行动态修改,有效值范围为 1~4096M。
SQL> select para_name,para_value from v$dm_ini where para_name='AUDIT_MAX_FILE_SIZE';
行号 PARA_NAME PARA_VALUE
---------- ------------------- ----------
1 AUDIT_MAX_FILE_SIZE 100
已用时间: 19.335(毫秒). 执行号:844.
SQL>
随着系统的运行,审计记录将会不断增加,审计文件需要更多的磁盘空间。在极限情况下,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。
对这种情况的处理有两种策略,通过设置 DM 的 INI 参数 AUDIT_FILE_FULL_MODE 进行配置。 AUDIT_FILE_FULL_MODE 为静态参数,可通过系统过程SP_SET_PARA_VALUE 进行修改,但是修改需要重新启动 DM 数据库服务器才能生效。
当将 AUDIT_FILE_FULL_MODE 置为 1 时,将删除最老的审计文件,直至有足够的空间创建新审计文件;
当将 AUDIT_FILE_FULL_MODE 置为 2 时,将不再写审计记录,默认值为 1。
SQL> select para_name,para_value from v$dm_ini where para_name='AUDIT_FILE_FULL_MODE';
行号 PARA_NAME PARA_VALUE
---------- -------------------- ----------
1 AUDIT_FILE_FULL_MODE 1
已用时间: 20.146(毫秒). 执行号:845.
SQL>
若系统审计人员已对历史审计信息进行了充分分析,不再需要某个时间点之前的历史审计信息,可使用下面的系统过程删除指定时间点之前的审计文件,但是不会删除 DM 当前正在使用的审计文件。
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 审计文件支持文件加密,审计管理员可使用下面的系统过程设置审计文件加密:
SP_AUDIT_SET_ENC(
NAME VARCHAR(128),
KEY VARCHAR(128)
)
参数说明:
NAME 加密算法名
KEY 加密密钥
4 审计信息查阅
当使用 DM 提供的审计机制进行了审计设置后,这些审计设置信息都记录在数据字典表SYSAUDITOR.SYSAUDIT 中。审计类型用户可以查看此数据字典表查询审计设置信息。
审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。审计用户可以通过动态视图 SYSAUDITOR.V$AUDITRECORDS 查询系统默认路径下的审计文件的审计记录。
4.1 创建审计配置
SQL> create table cndba as select * from sysobjects where 1=2;
操作已执行
已用时间: 126.948(毫秒). 执行号:846.
SQL> select user();
行号 USER()
---------- ------
1 SYSDBA
已用时间: 3.191(毫秒). 执行号:847.
对CNDBA表创建2条审计规则:
#语法格式:SP_AUDIT_OBJECT (TYPE ,USERNAME ,SCHNAME,TVNAME,WHENEVER )
SQL> SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'SYSDBA', 'CNDBA', 'SUCCESSFUL');
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', ' SYSDBA', 'CNDBA', 'SUCCESSFUL');
[-5578]:没有审计权限.
已用时间: 10.459(毫秒). 执行号:0.
SQL> SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'SYSDBA', 'CNDBA', 'SUCCESSFUL');
DMSQL 过程已成功完成
已用时间: 6.301(毫秒). 执行号:866.
SQL> SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'SYSDBA', 'CNDBA', 'SUCCESSFUL');
DMSQL 过程已成功完成
已用时间: 11.415(毫秒). 执行号:867.
查询SYSAUDITOR.SYSAUDIT 表确定审计配置记录:
SQL> select * from SYSAUDITOR.SYSAUDIT;
行号 LEVEL UID TVPID COLID TYPE WHENEVER
---------- ----------- ----------- ----------- ----------- ----------- -----------
1 2 50331649 1262 -1 50 1
2 2 50331649 1262 -1 53 1
已用时间: 2.494(毫秒). 执行号:868.
SQL>
4.2 查看审计内容
CNDBA表上有上insert 和 update 审计。 我们插入数据:
SQL> insert into cndba select * from sysobjects;
影响行数 1274
已用时间: 78.790(毫秒). 执行号:869.
SQL> commit;
操作已执行
已用时间: 16.639(毫秒). 执行号:870.
SQL> select * from cndba where rownum<2;
行号 NAME ID SCHID TYPE$ SUBTYPE$ PID VERSION
---------- --------------------------- ----------- ----------- ------ -------- ----------- -----------
CRTDATE INFO1 INFO2 INFO3 INFO4 INFO5
--------------------------- ----------- ----------- -------------------- -------------------- ----------
INFO6 INFO7 INFO8
---------------------------------------------------------------------- -------------------- ----------
VALID
-----
1 ##TMP_TBL_FOR_DBMS_LOB_BLOB 268436868 0 DSYNOM NULL NULL 0
2019-09-19 22:24:52.548674 1 NULL NULL NULL NULL
0x03005359531B002323544D505F54424C5F464F525F44424D535F4C4F425F424C4F42 NULL NULL
Y
已用时间: 9.099(毫秒). 执行号:871.
SQL> update cndba set id=88 where id=268436868;
影响行数 1
已用时间: 11.833(毫秒). 执行号:872.
SQL> commit;
操作已执行
已用时间: 5.156(毫秒). 执行号:873.
SQL> delete from cndba;
影响行数 1274
已用时间: 27.954(毫秒). 执行号:874.
SQL> commit;
操作已执行
已用时间: 12.459(毫秒). 执行号:875.
SQL>
查看审计内容:
SQL> 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
---
1 50331649 SYSDBA 67108864 DBA ::ffff:127.0.0.1 150994945 SYSDBA 1262 CNDBA
INSERT Y insert into cndba select * from sysobjects; 2019-09-19 23:19:10.000000
行号 USERID USERNAME ROLEID ROLENAME IP SCHID SCHNAME OBJID OBJNAME
---------- ----------- -------- ----------- -------- ---------------- ----------- ------- ----------- -------
OPERATION SUCC_FLAG SQL_TEXT DESCRIBTION OPTIME
--------- --------- ------------------------------------------- ----------- ---------------------------
MAC
---
2 50331649 SYSDBA 67108864 DBA ::ffff:127.0.0.1 150994945 SYSDBA 1262 CNDBA
UPDATE Y update cndba set id=88 where id=268436868; 2019-09-19 23:19:49.000000
已用时间: 13.682(毫秒). 执行号:876.
SQL>
由于并没有设置DELETE的审计设置,所以该操作没有被记录。
4.3 取消审计
SQL> SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'SYSDBA', 'CNDBA', 'SUCCESSFUL');
DMSQL 过程已成功完成
已用时间: 12.732(毫秒). 执行号:877.
#少了一条审计配置规则
SQL> select * from SYSAUDITOR.SYSAUDIT;
行号 LEVEL UID TVPID COLID TYPE WHENEVER
---------- ----------- ----------- ----------- ----------- ----------- -----------
1 2 50331649 1262 -1 53 1
已用时间: 0.613(毫秒). 执行号:878.
SQL>
5 审计实时侵害检测
当将 INI 参数 ENABLE_AUDIT 置为 2 时,开启审计实时侵害检测功能。实时侵害检测系统用于实时分析当前用户的操作,并查找与该操作相匹配的实时审计分析规则,如果规则存在,则判断该用户的行为是否是侵害行为,确定侵害等级,并根据侵害等级采取相应的响应措施。
5.1 创建与删除实时侵害检测规则
当 INI 参数 ENABLE_AUDIT=2 时,具有 AUDIT DATABASE 权限的用户可以使用下面的系统过程创建实时侵害检测规则。
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 审计操作名,即DDL和DML的类型
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 的登录动作。
#SYSAUDITOR用户
SQL> 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);
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);
[-5301]:审计开关关闭或当前环境不支持.
已用时间: 3.671(毫秒). 执行号:0.
#SYSDBA用户:
SQL> sp_set_para_value(1,'ENABLE_AUDIT',2);
DMSQL 过程已成功完成
已用时间: 28.462(毫秒). 执行号:881.
SQL> sp_set_para_value(2,'ENABLE_AUDIT',2);
DMSQL 过程已成功完成
已用时间: 30.658(毫秒). 执行号:882.
#SYSAUDITOR用户
SQL> 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);
DMSQL 过程已成功完成
已用时间: 17.206(毫秒). 执行号:883.
SQL>
例 2,创建一个审计实时侵害检测规则 PWD_CRACK,该规则检测可能的口令暴力破解行为。
SQL> SP_CREATE_AUDIT_RULE ('PWD_CRACK','CONNECT', 'NULL', 'NULL', 'NULL', 'FAIL', 'NULL','NULL',1, 50);
DMSQL 过程已成功完成
已用时间: 7.249(毫秒). 执行号:885.
SQL>
当不再需要某个实时侵害检测规则时,可使用下面的系统过程进行删除。
SP_DROP_AUDIT_RULE(
RULENAME VARCHAR(128)
);
参数说明:
RULENAME 待删除的审计实时侵害检测规则名
例如,删除已创建的实时侵害检测规则 DANGEROUS_SESSION。
SQL> SP_DROP_AUDIT_RULE ('DANGEROUS_SESSION');
DMSQL 过程已成功完成
已用时间: 8.736(毫秒). 执行号:887.
5.2 实时侵害检测
当 INI 参数 ENABLE_AUDIT 置为 2 时,实时侵害检测系统会实时分析用户的操作,将其与系统中创建的实时侵害检测规则进行匹配,判断该用户操作是否是侵害行为。
为了界定不同侵害行为对系统的危害情况,实时侵害检测系统定义了四种级别的侵害等级,从四级到一级侵害行为严重程度递增。这样根据用户操作匹配的实时侵害检测规则来可以判断其属于哪一级的侵害行为。、
四种侵害等级如下:
1.四级:操作只违反了 IP 或者时间段设置之一,且对应累计次数在规定时间间隔内没有达到门限值,或者没有门限值设置;
2.三级:操作同时违反了 IP 和时间段设置,且累计次数在规定时间间隔内没有达到门限值,或者没有门限值设置;
3.二级:操作的 IP 和时间段都正常,且累计次数在规定时间间隔内达到了门限值;
4.一级:操作只违反了 IP 或时间段设置之一,且对应累计次数在规定时间间隔内达到了门限值,或者操作同时违反了 IP 和时间段设置,且累计次数在规定时间间隔内达到了门限值。
实时侵害检测规则的设置,使得某些操作可能会触发多条审计分析规则,也就是说可能存在多条审计分析规则同时匹配的情况。在这种情况下,需要把操作记录保存到所有匹配的、同时规定了操作频率门限值的审计分析规则下,并且使用这些审计分析规则对该操作进行分析,从所有满足的侵害等级中选择一个最高的侵害等级进行响应。
DM 实时侵害检测系统根据侵害检测结果做出相应的安全审计响应,由低到高四个等级分别为:
1.四级响应:实时报警生成,对四级侵害行为进行响应。当系统检测到四级侵害行为时,生成报警信息;
2.三级响应:违例进程终止,对三级侵害行为进行响应。当系统检测到三级侵害行为时,终止当前操作(用户当前连接仍然保持)。同时生成报警信息;
3.二级响应:服务取消,对二级侵害行为进行响应。当系统检测到二级侵害行为时,强制断开用户当前连接,退出登录。同时生成报警信息;
4.一级响应:账号锁定或失效,对一级侵害行为进行响应。当系统检测到一级侵害行为时,强制断开用户当前连接,退出登录,并且锁定账号或使账号失效。同时生成报警信息。
这些安全审计相应动作中除了生成报警信息,其余的都由 DM 数据库服务器即可完成。生成报警信息的实现包括 DM 数据库服务器将报警信息写入一个专门的日志文件,由 DM 的审计告警工具 dmamon 实时分析这个日志文件,发现报警信息并将报警信息以邮件的形式发送给指定的邮箱。
5.3 审计告警工具 dmamon
审计告警工具 dmamon 用来在 DM 实时侵害检测系统检测到侵害事件且需要进行报警时可将报警信息以邮件的形式发送给指定邮箱。
dmamon 的运行需要指定对应的配置文件 dmamon.ini,此配置文件只能通过工具dmamon_ctl 进行创建或修改。
5.3.1创建或修改 dmamon.ini
使用 dmamon_ctl 工具创建或修改 dmamon.ini。dmamon_ctl 工具只有一个参数“FILE”,用来指定需要编辑的 dmamon.ini 的路径。
启动 dmamon_ctl 工具的命令格式为:
dmamon_ctl [FILE=value]
例如:
dmamon_ctl FILE=c:/dmamon.ini
当需要创建 dmamon.ini 时,可以不指定 FILE 参数,则 dmamon_ctl 工具会一步步引导用户配置 dm.ini 所在目录、发送和接收邮件的电子邮箱等信息,创建一个新的dmamon.ini 文件。配置项如下表所示。
dmamon_ctl 工具支持的命令如下表。
5.3.2 使用 dmamon
配置好 dmamon.ini 后,就可以使用 dmamon 工具进行实时审计告警了。
启动dmamon 工具的命令格式为:
dmamon USERID=value1 FILE=value2
参数说明:
USERID 指定登录数据库的信息,包含用户名(必须是审计用户)、密码、服务器地址、端口号。参数值格式为:用户名/密码[@主库地址[:端口号]
[#SSL_PATH@SSL_PWD]
FILE 指定 dmamon.ini 文件的路径,字符串类型
例如:
dmamon USERID=SYSAUDITOR/SYSAUDITOR FILE=c:/dmamon.ini
6审计分析
DM 提供了图形界面的审计分析工具 Analyzer,实现对审计记录的分析功能,能够根据所制定的分析规则,对审计记录进行分析,判断系统中是否存在对系统安全构成危险的活动。
只有审计用户才能使用审计分析工具 Analyzer。审计用户登录审计分析工具后,通过 Analyzer 可以创建和删除审计规则,并可以指定对某些审计文件应用某些规则。并将审计结果以表格的方式展现出来。
[dmdba@dmmonitor ~]$ cd /dm/dmdbms/tool/
[dmdba@dmmonitor tool]$ ./analyzer
6.1 创建审计规则
6.2 查看审计日志
添加需要查看的审计记录文件,还可在窗口左侧的“选择项”中设置各种过滤条件,之后点击“确定”,将满足规则的审计记录以表格的形式显示出来。
版权声明:本文为博主原创文章,未经博主允许不得转载。