SinoDB数据库安全审计可以记录用户在数据库中的活动,通过这些记录可以检查可疑的数据库活动。SinoDB数据库安全审计的主要功能如下:
- 在文本文件中为您指定的事件创建记录
- 可以记录数据更改、表结构更改和权限更改
- 可以记录数据库访问
- 可以记录管理员操作(例如 onparams、onstat 等)
- 可以跟踪对所有表或所选择的表的数据更改或访问操作
- 无需额外安装且设置简单
- 不提供自动警报
- 需要对生成的日志文件进行手动存档
- 在实例级别工作,而不是在数据库级别工作
- 不告诉您更改内容的详细信息
- 只跟踪您告诉它需要跟踪的内容
- 可以配置一个 DBSO与AAO 角色,以进行角色分离以提高安全性
1. 安全审计是如何工作的
管理员首先要创建audit masks(审计掩码),一个audit masks就像一个过滤器,检查用户的活动是否应该被审计。audit masks存储在sysmaster数据库的sysaudit表中。
如果执行数据库操作,而这个操作在被审计的范围内,online会自动在审计日志中插入一条记录。审计日志是一个UNIX文件,其中保存有审计的记录。这个文件有可能会变得很大,主要看audit masks中包括的操作的数量和操作的类型。
对每一个数据库用户可以有单独的user mask(用户掩码)。另外,管理员可以设置一个默认掩码,这样没有设置user mask的用户就可以使用这个默认的掩码。
2. 启用安全审计
设置安全审计的步骤:
- ① 打开安全审计。
- ② 设置审计参数。
- ③ 创建审计掩码和审计事件。
2.1 审计配置文件
审计配置文件默认路径: $INFORMIXDIR/aaodir/adtcfg
#**************************************************************************
#
# Licensed Material - Property Of Sinoregal Corporation
#
# "Restricted Materials of Sinoregal Corporation"
#
# Sinoregal SinoDB Dynamic Server
# (c) Copyright Sinoregal Corporation 2017 All rights reserved.
#
# Title: adtcfg.std
# Description: Sinoregal SinoDB Dynamic Server Audit Configuration file template.
# This is a READ-ONLY template. Audit Analysis Officer has
# responsibility of updating the adtcfg file with values
# suitable for the specific instance.
#**************************************************************************
ADTMODE 0 # Auditing mode
ADTPATH /usr/informix/aaodir # Directory where audit trails will be written by OnLine
ADTSIZE 50000 # Maximum size of any single audit trail file
ADTERR 0 # Error handling modes.
ADTROWS 0 # 0 - For legacy auditing
# 1 - log audit tables
# 2 - 1+log primary key
-
ADTMODE :设置审计级别,将审计级别设置为>0的值即开启审计了。
0 = 禁用审计
1 = 开启审计;不自动审计DBSSO和DBSA活动,审计所有配置了mask的事件
3 = 开启审计;自动审计所有的DBSSO活动。
5 = 开启审计;自动审计DBSA活动(即数据库服务器管理员活动)
7 = 开启审计;自动审计所有DBSSO和DBSA活动 -
ADTPATH :设置审计日志文件存放路径。
-
ADTSIZE:指定审计文件的大小。通过限制审计文件的大小,您可以周期性地将旧的审计文件归档或者删除。
-
ADTERR:设置由于某种原因导致不能写审计文件的情况下,系统执行什么操作
0 = 继续。 当数据库服务器在写入审计记录时遇到错误时,会将失败的消息写入消息日志中。它继续处理线程。
1 = 停止:暂停线程处理。当数据库服务器在写入审计记录时遇到错误时,数据库服务器将暂停线程的处理,直到它成功写入记录。
3 = 停止:关闭系统。当数据库服务器在写入审计记录时遇到错误时,数据库服务器将关闭。 -
ADTROWS:行级审计
0 表示审核所有表上的行级事件
1 允许控制要审计的表。行级事件(Delete-Row、Insert-Row、Read-Row、Update-Row)仅在设置了 AUDIT 标志的表上进行审核。
• 2 启用选择性行级审核,并将主键包含在审核记录中(仅当主键为整数时才记录主键)
2.2 onaudit命令
可以手工修改审计配置文件中配置参数的值,但通过这种方式,必须重启数据库来使其生效。也可以通过onaudit命令对配置进行更改,改动会立即生效:
-
指定审计级别:onaudit -l 1
-
指定审计文件目录:onaudit -p /home/aao_user/aaodir
确保审计文件目录存在,且其使用的文件系统有足够的空间并且是安全的 -
指定审计文件大小:onaudit -s 50000
-
设置错误模式:onaudit -e 0
-
指定行级审计:onaudit -R 0
-
在当前的审计文件没有满的时候自动启动一个新的审计文件:onaudit -n
-
显示审计配置文件信息:onaudit -c
$ onaudit -c
Onaudit -- Audit Subsystem Configuration Utility
Current audit system configuration:
ADTMODE = 0
ADTERR = 0
ADTPATH = /home/aao_user/aaodir
ADTSIZE = 50000
Audit file = 5
ADTROWS = 0
启动安全审计后,将看到ADT VP正在运行:
Virtual processor summary:
class vps usercpu syscpu total
cpu 2 38.75 6.09 44.84
aio 5 1.63 5.15 6.78
lio 1 0.40 1.11 1.51
pio 1 0.38 1.09 1.47
adm 1 3.67 5.16 8.83
soc 2 12.86 12.69 25.55
msc 1 0.00 0.00 0.00
adt 1 0.35 1.11 1.46
fifo 1 0.34 1.06 1.40
total 15 58.38 33.46 91.84
online.log里查看到如下日志:
14:05:15 Dynamically added 1 adt VP
14:05:15 Audit Mode changed to 7
审计配置文件增加SERVERNUM后缀,如adtcfg.0:
-rw-rw-r-- 1 informix sino_aao 1171 Nov 6 14:09 adtcfg
-rw-rw-r-- 1 informix informix 1298 Nov 10 14:05 adtcfg.0
-rw-r--r-- 1 informix sino_aao 952 Aug 16 2017 adtcfg.std
3. 审计掩码Audit Mask
3.1 审计事件:
- 默认情况下未审核任何内容
- 需要指定要跟踪的事件以及针对哪些用户(可以是所有用户)
- 审计事件是代表数据库活动的4个字符代码,例如:
OPDB Open Database
CRTB Create Table
GRDB Grant Database Access
3.2 审计掩码:
- 审核掩码指定要为用户跟踪的审计事件
- 内置掩码用于避免为每个用户创建掩码
_default
_require
_exclude
- 内置掩码是空的——它们一开始不包括任何审计事件
3.3 如何使用审计掩码
-
首先设置用户审计掩码
-
如果没有用户审计掩码,则从_default掩码获取审核事件
-
_require中配置的审计事件也会被跟综
-
_exclude掩码指示不跟踪的事件,即使它们在其他掩码中(包括_default和_require)
-
确保_default或_require掩码配置了一组基本事件,以便它们将自动应用于新用户
-
_require和_exclude掩码中的审计事件会覆盖任何单独的用户掩码。
3.4 创建审计掩码
- 添加新的审计掩码:onaudit -a
例1:为所有用户创建用于打开数据库(OPDB)和授予数据库权限(GRDB)的基本审核掩码:
onaudit -a -u _require -e +OPDB,GRDB
例2:为用户“jill”创建一个审核掩码,以跟踪表的创建(CRTB)和删除(DRTB)操作:
onaudit -a -u jill -e +CRTB,DRTB
3.5 查看审计掩码
通过onaudit -o -y命令查看设置的审计掩码:
$ onaudit -o -y
Onaudit -- Audit Subsystem Configuration Utility
_require - GRDB,OPDB
exp - ACTB,DRDB,DRTB
informix - DRDB,DRTB
sinodbuser1 - ACTB,DRDB,DRTB
sinouser1 - ACTB,DRDB,DRTB,INRW,UPRW
suser1 - ACTB,DRDB,DRTB
3.6 修改审计掩码
通过onaudit -m命令修改审计掩码:
[dbsso_user@vm84145 ~]$ onaudit -m -u suser1 -e +INRW -e -DRTB
Onaudit -- Audit Subsystem Configuration Utility
[dbsso_user@vm84145 ~]$ onaudit -o -y
Onaudit -- Audit Subsystem Configuration Utility
_require - GRDB,OPDB
exp - ACTB,DRDB,DRTB
informix - DRDB,DRTB
sinodbuser1 - ACTB,DRDB,DRTB
sinouser1 - ACTB,DRDB,DRTB,INRW,UPRW
suser1 - ACTB,DRDB,INRW
3.7 使用模板创建为用户掩码
使用-r选项指定模本名
[dbsso_user@vm84145 ~]$ onaudit -a -u suser2 -r sinouser1
Onaudit -- Audit Subsystem Configuration Utility
[dbsso_user@vm84145 ~]$ onaudit -o -y
Onaudit -- Audit Subsystem Configuration Utility
_require - GRDB,OPDB
exp - ACTB,DRDB,DRTB
informix - DRDB,DRTB
sinodbuser1 - ACTB,DRDB,DRTB
sinouser1 - ACTB,DRDB,DRTB,INRW,UPRW
suser1 - ACTB,DRDB,INRW
suser2 - ACTB,DRDB,DRTB,INRW,UPRW
3.8 删除审计掩码
删除审计掩码:onaudit -d
[dbsso_user@vm84145 ~]$ onaudit -o -y
Onaudit -- Audit Subsystem Configuration Utility
_require - GRDB,OPDB
exp - ACTB,DRDB,DRTB
informix - DRDB,DRTB
sinodbuser1 - ACTB,DRDB,DRTB
sinouser1 - ACTB,DRDB,DRTB,INRW,UPRW
suser1 - ACTB,DRDB,INRW
[dbsso_user@vm84145 ~]$
3.9 从文件导入审计掩码
可以将审计掩码放在文件中并加载,使更改事件变得更简单。
按以下格式创建要载入的掩码文件:
mask_name base_mask event_list
如下所示:
[dbsso_user@vm84145 ~]$ cat event_list_all
_require - ADCK,ADLG,ALFR,ALIX,ALLT,ALME,ALSQ,ALTB,ALTX,ALUR,CLDB,CRAG,CRAM,CRBS,CRBT,CRCT,CRDB,CRDS,CRDT,CRIX,CRLB,CRLC,CRME,CROC,CRPL,CRPT,CRRL,CRRT,CRSN,CRSP,CRSQ,CRTB,CRTR,CRTX,CRUR,CRVW,CRXD,CRXT,DLRW,DNCK,DNDM,DRAG,DRAM,DRBS,DRCK,DRCT,DRDB,DRDS,DRIX,DRLB,DRLC,DRLG,DRME,DROC,DRPL,DRRL,DRRT,DRSN,DRSP,DRSQ,DRTB,DRTR,DRUR,DRTX,DRTY,DRVW,DRXD,DRXT,GRDB,GRDR,GRFR,GRLB,GRRL,GRSA,GRSS,GRTB,GRXM,INRW,LGDB,LSAM,MDLG,ONAU,ONBR,ONCH,ONIN,ONLG,ONLO,ONMN,ONMO,ONPA,ONPL,ONSP,ONTP,ONUL,OPDB,OPST,PWUR,RBSV,RLSV,RMCK,RNUR,RNDB,RNDS,RNIX,RNLB,RNLC,RNPL,RNSQ,RNTC,RNTX,RVDB,RVDR,RVFR,RVLB,RVRL,RVSA,RVSS,RVTB,RVXM,STCO,STCN,STDF,STDP,STDS,STEP,STEV,STNC,STOM,STOP,STRL,STRS,STRT,STSA,STSC,STSN,STSV,STTX,SVXD,TCTB,UPAM,UPCK,UPDM,UPRW,USSP,USTB
[dbsso_user@vm84145 ~]$ onaudit -d -u _require # 如果掩码存在先删除
[dbsso_user@vm84145 ~]$ onaudit -f event_list_all # 加载掩码文件
Onaudit -- Audit Subsystem Configuration Utility
[dbsso_user@vm84145 ~]$ onaudit -o -y
Onaudit -- Audit Subsystem Configuration Utility
_require - ADCK,ADLG,ALIX,ALLT,ALTB,STSV,CLDB,CRAM,CRBS,CRDB,CRDS,CRIX,CRSN,CRSP,CRTB,CRTR,CRVW,DLRW,DNCK,DNDM,DRAM,DRBS,DRCK,DRDB,DRDS,DRIX,RLSV,DRLG,DRSN,DRSP,DRTB,DRTR,DRVW,GRDB,GRTB,INRW,LGDB,LSAM,MDLG,RVLB,ONAU,ONCH,ONIN,ONLG,ONLO,ONMO,ONPA,GRSS,ONSP,ONTP,ONUL,OPDB,GRSA,RVSA,RMCK,RNTC,RVDB,RVTB,RVSS,STCN,STDF,STSN,UPAM,UPCK,UPDM,UPRW,USSP,USTB,ALFR,STDS,STTX,STOM,STRT,STOP,GRFR,RVFR,CRRL,DRRL,GRRL,RVRL,STDP,STRL,STSA,ONMN,RNDB,ONBR,ONPL,OPST,CRRT,DRRT,CRDT,CRCT,DRCT,CRBT,DRTY,CRME,DRME,ALME,CROC,DROC,RBSV,STRS,CRAG,DRAG,STSC,RVXM,RNIX,CRSQ,RNSQ,DRSQ,ALSQ,STEV,RNDS,GRDR,RVDR,STCO,STNC,STEP,CRPT,CRXT,CRXD,DRXT,DRXD,TCTB,SVXD,CRLC,CRPL,CRLB,DRLC,DRPL,DRLB,RNLC,RNPL,RNLB,GRXM,GRLB,CRTX,ALTX,RNTX,DRTX,CRUR,ALUR,DRUR,RNUR,PWUR
exp - ACTB,DRDB,DRTB
informix - DRDB,DRTB
sinodbuser1 - ACTB,DRDB,DRTB
sinouser1 - ACTB,DRDB,DRTB,INRW,UPRW
suser1 - ACTB,DRDB,INRW
4. 行级审核 ADTROWS
-
跟踪所有表的所有插入、更新、删除甚至选择是不现实的
-
设置行级审核级别,将以下事件的审核限制为仅限于那些已设置为“audit”的表
–DLRW–删除行
–INRW–插入行
–RDRW–读取行
–UPRW–更新行 -
所有其他事件仍然适用于所有表
示例:
$onaudit -R 2
Onaudit -- Audit Subsystem Configuration Utility
database testdb3;
create table tab1(a int); --不会审核tab1的行级事件
create table tab2(a int) with audit; --会审核tab2的行级事件
create table tab3(a int);
alter table tab3 add audit; --为现有表添加“audit”标记
alter table tab3 drop audit; --为表移除“audit”标记
需要注意:
- 启用行级审核可能会在审核中造成空白。
- 需要审查新表以满足审计需求,而不断变化的业务需求可能会改变审计需求。
- 请注意,更改已设置为审核行级事件的表将删除审核!需要使用"add audit"来保留审核
insert into tab2(a) values (10);
alter table tab2 add b char(1); --不记录ALTER之后的行级事件
insert into tab2(a) values (11);
delete from tab2 where 1=1;
使用"add audit"来保留审核
insert into tab2(a) values (10);
alter table tab2 add b char(1), add audit; --使用"add audit"来保留审核
insert into tab2(a) values (11);
delete from tab2 where 1=1;
5. 审计文件
- 审核文件位于审核配置中ADTPATH指定的目录中,需要定期删除或归档
- 文件名为$INFORMIXSERVER.n
- 当文件大小(以KB为单位)达到ADTSIZE设置的值时,审计记录将写入到具有下一个编号的新文件中
- 当实例重新启动时,会创建一个新文件
- 可以使用onaudit-n 强制创建新文件
[informix@vm84145 aaodir]$ ll
total 24
-rw-rw---- 1 informix sino_aao 7048 Nov 6 14:47 sinodb.0
-rw-rw---- 1 informix sino_aao 7143 Nov 6 16:05 sinodb.1
-rw-rw---- 1 informix sino_aao 1572 Nov 8 13:58 sinodb.2
-rw-rw---- 1 informix sino_aao 2770 Nov 8 14:02 sinodb.3
- 当前的审计文件位于$INFORMIXDIR/aaodir/adtlog.< SERVERNUM>
-rw-rw---- 1 informix sino_aao 2 Nov 10 14:05 adtlog.0
[informix@vm84145 aaodir]$ cat adtlog.0
6
使用onaduit -c查看Audit file显示如下:
[aao_user@vm84145 aaodir]$ onaudit -c
Onaudit -- Audit Subsystem Configuration Utility
Current audit system configuration:
ADTMODE = 1
ADTERR = 0
ADTPATH = /home/aao_user/aaodir
ADTSIZE = 50000
Audit file = 6
ADTROWS = 0
5.1 onshowaudit命令
可以使用onshowaudit命令查看审计文件具体内容:
-
使用-f<filename>参数可以显示单个审计文件的内容
-
使用-n<SERVERNUM>参数显示服务器所有审核文件的内容
-
使用-u<user>和-s<servername>将结果限制为用户或服务器提供的结果
-
使用-l [<filename]为审计事件的特定字段设置带有“管道”分隔符的输出格式
此处的是具体的审计文件名称,这样就可以更容易将其加载到表中或进行解析
示例:
[aao_user@vm84145 aaodir]$ onshowaudit -n 0 -f sinodb.5
Program Over.
ONSHOWAUDIT Secure Audit Utility
SINODBMS-SQL Version 12.10.FC8
ONLN|2023-11-10 14:05:19.000|vm84145|26240|sinodb|aao_user|0:ONST:-m
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0:STSN
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0:OPDB:sysmaster:0:-
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0:ACTB:sysmaster:informix:sysadtinfo:226
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0:RDRW:sysmaster:226:1025:0::
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0:ACTB:sysmaster:informix:sysaudit:280
-
该文件包含一组以管道分隔的字段:
– ONLN
– DateTime
– Hostname
– PID
– DB Server Name
– User Name -
最后一个字段显示有关事件的信息,用冒号分隔:
– Error Code (0=Success)
– Event Code (4 个字符的审计事件)
– 变量字段,取决于事件代码
[aao_user@vm84145 aaodir]$ onshowaudit -n 0 -f sinodb.5 -l
Program Over.
ONSHOWAUDIT Secure Audit Utility
SINODBMS-SQL Version 12.10.FC8
ONLN|2023-11-10 14:05:19.000|vm84145|26240|sinodb|aao_user|0|ONST|||||||||-m |
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|STSN||||||||||
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|OPDB|sysmaster|||||||0|-|
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|ACTB|sysmaster|226|||||informix||sysadtinfo|
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|RDRW|sysmaster|226|||1025|0||||
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|ACTB|sysmaster|280|||||informix||sysaudit|
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|RDRW|sysmaster|280|||1049124|513||||
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|RDRW|sysmaster|280|||1049124|514||||
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|RDRW|sysmaster|280|||1049124|515||||
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|RDRW|sysmaster|280|||1049124|516||||
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|RDRW|sysmaster|280|||1049124|517||||
ONLN|2023-11-10 15:14:04.000|vm84145|30940|sinodb|dbsso_user|0|ACTB|sysmaster|227|||||informix||syscrtadt|