审计
数据库审计可以记录系统级事件、用户的行为以及对数据库对象的访问,以便对日常事件的事后审计监督。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。
配置
审计开关
在 DM 系统中,审计开关由 INI 参数 ENABLE_AUDIT 控制:
- ENABLE_AUDIT = 0:关闭审计
- ENABLE_AUDIT = 1:打开普通审计
- ENABLE_AUDIT = 2:打开普通审计和实时审计
在普通版本中,ENABLE_AUDIT 的缺省值为 0;在安全版本中,ENABLE_AUDIT 的缺省值为 2。审计开关必须由具有数据库审计员权限的管理员(SYSAUDITOR)进行设置
查看当前配置值
select sf_get_para_value(1,'ENABLE_AUDIT');
select sf_get_para_value(2,'ENABLE_AUDIT');
select * from v$dm_ini where para_name = 'ENABLE_AUDIT';
select * from V$PARAMETER
调整配置值
-- 修改dm.ini文件中的参数值:
sp_set_para_value(1,'ENABLE_AUDIT',1);
-- 修改内存中的参数值
sp_set_para_value(2,'ENABLE_AUDIT',1);
-- 开启审计
SP_SET_ENABLE_AUDIT (1);
-- 检查确认配置
select sf_get_para_value(1,'ENABLE_AUDIT');
select sf_get_para_value(2,'ENABLE_AUDIT');
审计规则配置
只有具有 AUDIT DATABASE 权限的审计员才能进行审计规则策略设置。
审计策略分类
系统级审计策略
记录DM数据库系统的启动与关闭行为,只要审计开关打开就会自动生成对应审计记录,无需额外配置
语句级审计策略
记录特定类型数据库对象的特殊 SQL 或语句组的审计,如:
- AUDIT TABLE:将审计记录 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等操作语句
对象级审计策略
针对指定对象的语句进行审计,如:T 表上的 INSERT 语句
创建审计策略
语句级
SP_AUDIT_STMT(
TYPE VARCHAR(30), --
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
WHENEVER 取值:
- ALL:所有的
- SUCCESSFUL:操作成功时
- FAIL:操作失败时
对象级
SP_AUDIT_OBJECT (
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
SP_AUDIT_OBJECT (
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
COLNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
TVNAME : 表、视图、存储过程名不能为空
COLNAME : 列名
取消审计策略规则
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
语句级
SP_NOAUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
对象级
SP_NOAUDIT_OBJECT (
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
SP_NOAUDIT_OBJECT (
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
COLNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
审计记录数据存储
数据字典表
审计数据存储在字典表 SYSAUDIT 中,每个审计记录就在SYSAUDIT 中增加一条记录。
审计文件
审计文件存放在数据库的 SYSTEM_PATH 指定的路径,即数据库目录所在路径。也可以使用 AUD_PATH 参数指定审计文件路径。文件命名格式:'AUDIT_DBNAME_GUID_创建时间.log'。其中,GUID是 DM 给定的一个唯一值。
select para_name,para_value from v$dm_ini where para_name='SYSTEM_PATH' or para_name='AUD_PATH' ;
单个审计文件大小
通过 AUDIT_MAX_FILE_SIZE 动态参数指定单个审计文件的大小。当超过指定的大小时,自动切换创建一个新的审计文件。
select para_name, para_value from v$dm_ini where para_name='AUDIT_MAX_FILE_SIZE';
select sf_get_para_value(1,'AUDIT_MAX_FILE_SIZE');
select SP_SET_PARA_VALUE(1,'AUDIT_MAX_FILE_SIZE',1024); -- 设置成1024MB
审计文件清理策略
随着审计记录不断增加,就需要更多的磁盘空间存储,在极端情形,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。因此,需要注意审计文件占用磁盘空间情况。
DM提供 AUDIT_FILE_FULL_MODE 静态参数设置审计文件的清理策略:
- AUDIT_FILE_FULL_MODE = 1:默认值,将删除最老的审计文件,直至有足够的空间创建新审计文件
- AUDIT_FILE_FULL_MODE = 2:当空间不足时,将不再写审计记录
select para_name,para_value from v$dm_ini where para_name='AUDIT_FILE_FULL_MODE';
手工删除审计文件
若系统审计人员已对历史审计信息进行了充分分析,不再需要某个时间点之前的历史审计信息,可使用下面的系统过程删除指定时间点之前的审计文件,但是不会删除 DM 当前正在使用的审计文件。
语法
SP_DROP_AUDIT_FILE(
TIME_STR VARCHAR(128), -- TIME_STR:指定的时间字符串
TYPE INT -- TYPE:审计文件类型,0 表示删除普通审计文件,1 表示删除实时审计文件
);
示例
-- 删除 2021-10-1 00:00:00 以前的普通审计文件
SP_DROP_AUDIT_FILE('2021-10-1 00:00:00’, 0);
加密审计文件
DM 审计文件支持文件加密,审计管理员可使用下面的系统过程设置审计文件加密
SP_AUDIT_SET_ENC(
NAME VARCHAR(128), -- NAME 加密算法名
KEY VARCHAR(128) -- KEY 加密密钥
)
加密算法
DM支持的加密算法可通过查询动态视图V$CIPHERS 得到
select * from V$CIPHERS;
算法名称 | 算法类型 | 分组长度 | 密钥长度 |
---|---|---|---|
DES_ECB | 分组加密算法 | 8 | 8 |
DES_CBC | 分组加密算法 | 8 | 8 |
DES_CFB | 分组加密算法 | 8 | 8 |
DES_OFB | 分组加密算法 | 8 | 8 |
DESEDE_ECB | 分组加密算法 | 8 | 16 |
DESEDE_CBC | 分组加密算法 | 8 | 16 |
DESEDE_CFB | 分组加密算法 | 8 | 16 |
DESEDE_OFB | 分组加密算法 | 8 | 16 |
AES128_ECB | 分组加密算法 | 16 | 16 |
AES128_CBC | 分组加密算法 | 16 | 16 |
AES128_CFB | 分组加密算法 | 16 | 16 |
AES128_OFB | 分组加密算法 | 16 | 16 |
AES192_ECB | 分组加密算法 | 16 | 24 |
AES192_CBC | 分组加密算法 | 16 | 24 |
AES192_CFB | 分组加密算法 | 16 | 24 |
AES192_OFB | 分组加密算法 | 16 | 24 |
AES256_ECB | 分组加密算法 | 16 | 32 |
AES256_CBC | 分组加密算法 | 16 | 32 |
AES256_CFB | 分组加密算法 | 16 | 32 |
AES256_OFB | 分组加密算法 | 16 | 32 |
DES_ECB_NOPAD | 分组加密算法 | 8 | 8 |
DES_CBC_NOPAD | 分组加密算法 | 8 | 8 |
DESEDE_ECB_NOPAD | 分组加密算法 | 8 | 16 |
DESEDE_CBC_NOPAD | 分组加密算法 | 8 | 16 |
AES128_ECB_NOPAD | 分组加密算法 | 16 | 16 |
AES128_CBC_NOPAD | 分组加密算法 | 16 | 16 |
AES192_ECB_NOPAD | 分组加密算法 | 16 | 24 |
AES192_CBC_NOPAD | 分组加密算法 | 16 | 24 |
AES256_ECB_NOPAD | 分组加密算法 | 16 | 32 |
AES256_CBC_NOPAD | 分组加密算法 | 16 | 32 |
RC4 | 流加密算法 | - | 16 |
MD5 | 散列算法 | - | - |
SHA1 | 散列算法 | - | - |
查看审计记录
通过数据字典表查看审计相关信息
查看审计设置策略
可以通过数据字典表 SYSAUDITOR.SYSAUDIT 查看审计设置信息
select * from SYSAUDITOR.SYSAUDIT
查看审计记录内容
通过动态视图 SYSAUDITOR.V$AUDITRECORDS 查询系统默认路径下的审计文件的审计记录。审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等
select * from SYSAUDITOR.V$AUDITRECORDS;
审计分析工具dmaudtool
审计分析工具dmaudtool可以筛选解析审计文件中的审计记录并且导出至指定输出文件当中方便查看
使用
$DM_HOME/bin/dmaudtool
语法
dmaudtool PARAMETER=<value> { PARAMETER=<value> }
图形界面审计分析工具(Analyzer)
DM 提供了图形界面的审计分析工具 Analyzer,实现对审计记录的分析功能,能够根据所制定的分析规则,对审计记录进行分析,判断系统中是否存在对系统安全构成危险的活动。
$DM_HOME/tool/analyzer
系统函数
DM还提供了以下系统函数供查看审计设置中涉及的审计类型TYPE、审计级别LEVEL、以及生成时机WHENEVER常量对应的具体信息
查看审计类型TYPE代号
语法
SF_GET_AUDIT_TYPENAME( TYPE INT ); -- TYPE 审计类型,对应 SYSAUDITOR.SYSAUDIT 中TYPE字段值
示例
-- 查看SYSAUDIT中TYPE值50的意义描述
SELECT SF_GET_AUDIT_TYPENAME(50);
返回值为:INSERT
审计级别LEVEL
语法
SF_GET_AUDIT_LEVELNAME(
LEVEL INT -- LEVEL 审计级别,对应SYSAUDITOR.SYSAUDIT中LEVEL字段值
);
示例
-- 查看SYSAUDIT中LEVEL值为2的意义描述
SELECT SF_GET_AUDIT_LEVELNAME(2);
查看生成时机WHENEVER常量代号
语法
SF_GET_AUDIT_WHENEVERNAME(
WHENEVER INT -- WHENEVER 审计记录生成时机,对应 SYSAUDITOR.SYSAUDIT 中WHENEVER字段值
);
示例
-- 查看SYSAUDIT中WHENEVER值为1的意义描述
SELECT SF_GET_AUDIT_WHENEVERNAME(1);