Informix数据库的安全审计

Informix动态服务器提供两个级别的访问特权,来保证数据库的安全性。数据库特权控制对数据库的访问和在数据库上创建表和索索引的权力。表的特权指定用户在特定的表上所能进行的操作。

Informix动态服务器支持表级的修改,插入和删除的安全性,同时增强了列级的更新和查询的安全性。分离特权语句用于向用户授予适当的访问基级别的特权,或回收特权。由于Informx安全性是在用户级别上的,因此,不需要进行分离的数据库登录。

存储过程通过建立他们自己的,有别于数据库的许可权限而提供了附加的安全机制。存储过程的所有者向用户授予执行该存储过程的权限,允许用户执行该存储过程中所有的SQL操作,但对其他的数据库访问加以限制。通过使用存储过程来限制用户执行某些用户执行某些数据库的操作,数据库管理员可以提高系统的安全性
1、安全审计

INFORMIX动态服务器提供的安全审计功能对用来操作的每一个数据库对象提供跟踪和操作记录。这一功能符合“美国国家计算机安全中心”提出的C2级安全要求模型。
借助于INFORMIX动态服务器,你可以对系统中用户的活动进行选择性监控。安全审计的界面是由命令行驱动的,或是有参数调节控制的,它允许你指定对某一特定用户的特定活动进行监控。

安全审计可以创建用户在数据库中活动的事件记录,通过这些记录可检查不平常或可疑的数据库活动。
可以记录的事件有:
成功或者失败的操作。你可以只记录成功的操作,或者只记录失败的操作,或者两种都记录。
online系统的连接。你可以记录与online系统建立连接的情况,包括是谁建立了这个连接,在什么时刻
系统和数据库管理事件。任何管理事件例如增加dbspaces和chunks,归档,赋权,回收权限,或者当前的事务日志都可以被审计。
数据库和表的操作。select,insert,update,或者delete语句都可以被审计,但是不允许只对某一个表的操作进行审计。

2、审计是如何工作的

管理员首先要创建audit masks(审计掩码),一个audit masks就像一个过滤器,检查用户的活动是否应该被审计。audit masks存储在sysmaster数据库的sysaudit表中。
如果执行数据库操作,而这个操作在被审计的范围内,online会自动在审计日志中插入一条记录。审计日志是一个UNIX文件,其中保存有审计的记录。这个文件有可能会变得很大,主要看audit masks中包括的操作的数量和操作的类型。
对每一个数据库用户可以有单独的user mask(用户掩码)。另外,管理员可以设置一个默认掩码,这样没有设置user mask的用户就可以使用这个默认的掩码。

3、审计掩码

审计掩码告诉online什么事件需要被审计。审计掩码的种类如下:
单独的审计掩码(indiviual masks)。单独审计掩码是为每一个用户创建的掩码,其作用是对每一个用户的活动进行审计的。

默认的用户掩码(_default masks)。默认的用户掩码会被用在任何没有单独设置掩码的用户上。
必须的用户掩码(_require masks)。必须的用户掩码会忽略单独用户掩码和默认用户掩码中的内容。任何在_require用户掩码中设置的事件都会被审计,而不管用户的单独掩码中是否设置了这些事件。
排它用户掩码(_exclusive masks)。排它用户掩码同样会覆盖单独的用户掩码和默认用户掩码。其中包含的事件不会被审计,即使这些事件存在于单独的用户掩码和默认用户掩码中。这些事件不会覆盖_require掩码中的事件。

你也许想要对有经验的用户很少事件进行审计,对没有经验的用户更多的事件进行审计。为了达到这种目的,为有经验的用户创建一个单独审计掩码其中包括较少的事件。为所有的其它用户创建一个默认审计掩码,其中列出更全面的审计事件。 管理员必须创建所有的掩码;_default,_require,_exclude和单独用户掩码。

4、审计角色

在7.10.UD1之后,审计角色可以在用户之间实现独立的审计功能。
数据库系统安全官员(DBSSO)的责任是维护审计掩码。
审计分析官员(AAO)分析审计记录,发现安全问题。
为了更高的安全性,DBSSO,AAO,和ONLINE管理员应该由不同的人员来担当。
要设置基于角色的存取控制,ONLINE系统管理员应该设置两个环境变量。$DBSSOOWNER环境变量应该在DBSSO的登录脚本之中。$AAOWNER环境变量应该设置在AAO的登录脚本中。如果设置了这两个变量:
只有AAO可以打开或者关闭审计功能。
只有DBSSO可以使用onaudit工具来维护审计掩码。

5、设置安全审计

设置安全审计的步骤:
1.打开安全审计。
2.设置审计参数。
3.创建审计掩码和审计事件。

5.1 打开审计功能

有两种方法可以打开安全审计:使用onaudit工具,或者通过配置参数。在7.10UD1之前,这些参数是在$ONCONFIG文件中设置,在7.10UD1之后,这些参数在$INFORMIXDIR/aaodir/adtcfg文件中设置。
安全审计在你第一次初始化或者关闭和重新启动online的时候生效。你必须明确地打开审计功能:
作为informix用户,运行以下的命令: onaudit -1 1
审计功能会立即对任何的新的连接生效。这个命令同时会修改ADTMODE配置参数,这样在下一次online启动的时候会自动生效。
也可以通过修改ADTMODE参数为1来打开安全审计。在修改了这个配置参数之后,你必须重新启动online,让改动生效。在ONLINE7.10.UD1版本之前,这个参数在$ONCONFIG文件中配置,在这个版本之后,这个参数在$INFORMIXDIR/aaodir/adtcfg文件中设置,并增加了更多的功能:
ADTMODE=1 写到informix审计记录中。不自动审计DBSSO和DBSA活动。
ADTMODE=2 写到操作系统的审计记录中。这个选项只在操作系统支持审计的时候才会生效。不自动审计DBSSO和DBSA的活动。
ADTMODE=3 写到INFORMIX审计记录中。自动审计所有的DBSSO活动。
ADTMODE=4 写到操作系统审计记录中。自动审计所有的DBSSO活动。
ADTMODE=5 写到INFORMIX审计记录中。自动审计DBSA活动。
ADTMODE=6 写到操作系统审计记录中。自动审计DBSA活动。
ADTMODE=7 写到INFORMIX审计记录中。自动审计所有DBSSO和DBSA活动

5.2 设置审计文件参数

1.指定审计文件的目录:
onaudit -p /work/audit
或者
ADTPATH /work/audit
2.指定审计文件的大小: 
onaudit onaudit -s 50000
或者
ADTSIZE 50000
在创建审计掩码之前需要设置其它的两个审计参数,它们是:
审计文件所在的目录。审计文件中存储所有用户的审计记录。首先创建一个目录。确保这个目录的权限为只能被INFORMIX帐号存取。
在online处于启动状态的时候,你可以通过执行如下的命令来修改审计目录: onaudit -p 路径
其中路径名为将要放置审计文件的路径名。onaudit命令同时会修改ADTPATH配置参数的值。
你可以手工修改ADTPATH参数的值。然尔通过这种方式,你必须关闭和重新启动ONLINE,让改动生效。
默认文件大小。 ONLINE在ADTSIZE配置参数中限制了审计文件的大小。当审计文件的大小到达ADTSIZE的时候,一个新的审计文件会在ADTPATH路径下创建。
你可以通过onaudit工具来修改审计文件的大小,同时会修改ADTSIZE配置参数,这个大小的单位是字节:
onaudit -s 50000
你可以手工修改ADTSIZE参数的值。然尔通过这种方式,你必须关闭和重新启动ONLINE,让改动生效。
通过限制审计文件的大小,你可以周期性地将旧的审计文件归档或者删除。你也可以在当前的审计文件没有满的时候自动启动一个新的审计文件,方法是执行如下命令:onaudit -n

3.设置错误参数

最后,你可以指定由于某种原因导致不能写审计文件的情况下,系统执行什么操作:
停止(0)模式-在一个用户会话试图写一个审计文件,但是写文件失败,它会等待,然后每秒重试一次。在审计文件可以写之前,这个会话不能做任何操作。
继续(1)模式-这种模式意味着会话会继续下去,即使不能够写审计日志,online的信息日志中会接到一条错误信息,说日志文件不能存取和更新。
HALT(0)是默认的错误模式。
你可以通过两种办法来修改错误模式。

6、使用onaudit工具:

onaudit -e error-mode
这个命令执行的同时会修改ADTERR配置参数。
修改在$ONCONFIG文件中的ADTERR参数的值,为了让这个改变生效,你必须重新启动online。

6.1 显示审计配置

你可以运行onaudit -c 命令来显示审计的配置:如
onaudit -c
Current audit system configuration:
ADTMODE =1
ADTERR = 0
ADTPATH = /work/tmpaudit
ADTSIZE = 5000
Audit file =1
如果online DBSERVERNAME为online1shm,当前的审计文件名为: online1shm.1

6.2 使用onaudit设置掩码

onaudit工具同时用来维护审计掩码。可以用它来增加,删除,修改或者输出一个掩码。 _default,_require和_exclude掩码
在增加单独的用户掩码之前,你应该首先设置_default,_require和_exclude掩码,因为这些掩码会决定什么审计事件会被放置在单独用户掩码之中,它们应该被先创建。_require和_exclude掩码中的审计事件会覆盖任何单独的用户掩码。
使用-a选项增加一个掩码。使用-e选项可以增加事件。
增加一个_default掩码:
onaudit -a -u _default -e +ACTB
增加一个_require掩码:
onauit -a -u _require -e +GRTB,GRDB
增加一个_exclude掩码:
onaudit -a -u _exclude -e +RDRW

6.3 单独的用户掩码

要为单独用户创建掩码,在-u 选项之后指定一个登录名。如果你有一组用户有相似的审计事件,你可以创建一个掩码模板,要创建一个模本掩码,使用-u选项指定模本名。模本名必须以下划线(_)开头,并且不能超过8个字符。
要利用这个模本创建一个用户掩码,使用-r选项来执行这个模本名。你还可以使用-e选项来增加或者删除模本中的事件。在下例中,用户eric会接收_advance模本中指定的所有的事件(DRTB,DRDB)。用户lucy会接收_advance模本中的所有事件,然后再加上ALTB事件。
增加一个单独的用户掩码:
onaudit -a -u liz -e +DRTB,DRDB
增加一个掩码模本:
onaudit -a -u _advance -e +DRTB,DRDB
应用一个模本给一个用户:
onaudit -a -u eric -r _advance
onaudit -a -u lucy -r _advance -e +ALTB

6.4 显示掩码

你可以使用-o选项来列出一个掩码中的所有事件,如:
onaudit -o -u liz
Onaudit — Audit Subsystem Configuration Utility
copyrigt (c) Informix Software,Inc.,1993
liz-DRDB,DRTB
如果不使用-u指定某个用户,可以列出所有的掩码。
你可以让online只列出成功或者只列出失败的事件方法是在onaudit命令的事件参数之前加上S和F。如果在事件之前没有S或者F,成功和失败的事件都会被审计。
例子:
仅仅审计成功的事件,在事件的前面加上S。
+SDLRW(只记录成功的记录删除)
+FDLRW(只记录失败的记录删除)

6.5 修改和删除掩码

1. 修改一个掩码
onaudit -m -u artdy -e -ADCK
2.删除一个掩码
onaudit -d -u artdy
可以使用-m选项来增加或者删除一个已经存在的掩码中的事件,使用(+)加号可以增加事件,使用(-)号,可以删除事件。

7、分析审计文件

分析审计文件可以使用两种方式:

7.1 通过onshowaudit工具。

onshowaudit工具可以重指定的审计文件中提取审计记录

7.2 通过数据库表的方式,使用SQL来进行查询。

onshowaudit工具可以产生一个文件,然后利用dbload和sql中的load语句将这个文件装载到一个数据库的表中,然后你就可以使用SQL语句来对这个表进行查询.

只有informix用户才能使用onshowaudit工具。
1.使用onshowaudit分析审计记录
你可以使用onshowaudit来提取和列出审计记录。
通过指定审计文件(-f audit_file)。如果使用-f选项,只有指定的审计文件被提取 。如果没有使用-f选项,会自动顺序从最早的文件进行提取。
通过指定用户名(-u login)。只提取指定用户产生的审计记录。一次只能指定一个用户名。
通过数据库服务器名(-s server_name)。只提取指定的主机产生的审计记录。

2.装载审计记录进一个表
你可以使用如下步骤,将审计记录装载如一个表中,然后就可以使用sql语句对其进行分析。
2.1 创建一个审计数据库,和一个审计表。
2.2 创建一个可以装载的审计文件:
onshowaudit -1>log_records
2.3 如果使用dbload,创建一个load命令文件:
FILE log_records delimiter “|” 17;
INSERT INTO audit_table;
2.4 如果使用dbload,运行dbload命令:
dbload -d audit -c cmd_file
2.5 如果使用load,运行以下的SQL语句
load from ‘log_records’ insert into audit_table

8、关闭审计功能

要关闭审计,你可以执行onaudit命令,指定-1 0 选项,这会立即关闭审计功能。你同样也可以修改$ONCONFIG文件中的ADTMODE配置参数,但是审计只会在系统下一次启动的时候才会关闭。

发表评论