SinoDB数据库安全审计

  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|