参考手册:《DM8 - Security Management.pdf》第5章 审计。
DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。
启用审计
在 DM 系统中, 启用审计功能需要两步:
1、打开审计开关(默认关闭)。
2、对语句级或对象级审计设置条件,否则不记录审计。
找开/关闭审计:
$ disql SYSAUDITOR/SYSAUDITOR
SQL> select PARA_NAME,PARA_VALUE,DEFAULT_VALUE,SESS_VALUE,FILE_VALUE,DESCRIPTION
from V$DM_INI
where PARA_NAME='ENABLE_AUDIT';
LINEID PARA_NAME PARA_VALUE DEFAULT_VALUE SESS_VALUE FILE_VALUE DESCRIPTION
---------- ------------ ---------- ------------- ---------- ---------- ---------------------------------------------------------------------------------------
1 ENABLE_AUDIT 0 0 0 0 Flag For Allowing Audit, 0: no audit 1: normal audit 2:normal audit and realtime audit
SQL> SP_SET_ENABLE_AUDIT(1); --- 立即生效--- 只需要修改主库,备库尝试修改会报错。
--- 0:关闭审计(缺省);1:打开普通审计;2:打开普通审计和实时审计。
--- 普通审计只是记录,实时审计可以根据时间、来源、动作、对象等来匹配规则并触发相应的动作,比如生成记录、产生告警信息、终止操作、断开用户连接、锁定账号。
配置审计
DM 允许在三个级别上进行审计设置:
- 系统级:系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录。
- 语句级:导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句。
- 对象级:审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句。
取消审计只需要将配置审计语句中的 audit 修改为 noaudit 即可。
语句级审计:(粗粒度)
语句级审计的动作是全局的,不对应具体的数据库对象。
语法:SP_AUDIT_STMT(TYPE,USERNAME,WHENEVER)
TYPE:审计选项,可选值比如 ALL,USER,ROLE,TABLESPACE,TABLE 等,详情手册里的表
USERNAME:用户,null 表示不限制
WHENEVER:审计的时机。All:所有的时候;Successful:操作成功的时候;Fail:操作失败的时候。
例如,sp_audit_stmt('TABLE','TEST','ALL');
对象级审计:(细粒度)
对象级审计发生在具体的对象上,需要指定模式名以及对象名。
对于 UPDATE 和 DELETE 操作,因为也需要做 SELECT 操作,所以只要设置审计SELECT 操作时,UPDATE 和 DELETE 也会作为 SELECT 操作被审计。
语法:
SP_AUDIT_OBJECT(TYPE,USERNAME,SCHNAME,TVNAME,WHENEVER)
SP_AUDIT_OBJECT(TYPE,USERNAME,SCHNAME,TVNAME,COLNAME,WHENEVER)
TYPE:审计选项,可选值比如 ALL,INSERT,UPDATE,DELETE,SELECT,EXECUTE,MERGE INTO,LOCK TABLE
USERNAME :用户名
SCHNAME:模式名,为空时置‘null’
TVNAME:表、视图、存储过程名不能为空
COLNAME:列名
WHENEVER:审计时机。All:所有的时候;Successful:操作成功的时候;Fail:操作失败的时候。
例 1:对 SYSDBA 对表 PERSON.ADDRESS 进行的添加成功操作进行审计。
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
例 2:对 SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功的操作进行审计。
SP_AUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');
语句序列审计
DM 还提供了语句序列审计功能,作为语句级审计和对象级审计的补充。语句序列审计需要审计员预先建立一个审计规则,包含 N 条 SQL 语句(SQL1,SQL2……),如果某个会话依次执行了这些 SQL 语句,就会触发审计。
审计文件管理
DM 审计信息存储在审计文件中。审计文件命名格式为:AUDIT_GUID_创建时间.log。
AUD_PATH =D:dmdbmsdataDAMENGaud <--- 这是一个目录,如果不配置该参数则默认存放在数据库的 SYSTEM_PATH 指定的路径,即数据库所在路径。
AUDIT_FLUSH_LEVEL (审计记录的刷盘方式,动态参数。缺省为0,表示语句级刷盘,一条语句执行结束进行一次审计记录刷盘操作;1 表示事务级刷盘,一个事务执行结束执行一次审计日志刷盘操作;2 表示延迟刷盘,当审计记录缓存满时(缓存大小固定为 8MB)自动刷盘。)
AUDIT_SPACE_LIMIT(总存储空间限制,静态参数。默认8192M,0表示不限制)
AUDIT_MAX_FILE_SIZE(单个审计文件大小限制,动态参数。默认100M。)
AUDIT_FILE_FULL_MODE(因为磁盘空间不足无法写入审计文件时采取的策略,静态参数。默认值为3。)
1:删除最老的审计文件,直至有足够的空间创建新审计文件,若可删尽删后空间仍旧不够,则数据库会挂起直至磁盘空间被清理出足够创建新审计文件的空间
2:将不再写审计记录(不尝试删老审计文件)
3:结合 1 和 2,先尝试删老审计文件,再创建审计文件,若空间仍不足则不再审计,系统会定时检测是否有空余空间,如果有则恢复审计
AUDIT_IP_STYLE (审计记录中IP的显示格式,静态参数。缺省值为0,表示仅显示IP,为1时显示IP和主机名。)
SP_DROP_AUDIT_FILE('2015-12-6 16:30:00',0); --- 删除 2015-12-6 16:30:00 以前的普通审计文件,0表示普通审计文件,1表示实时审计文件
SP_SWITCH_AUDIT_FILE(1); --- 手动切换审计文件。1 表示切换普通审计文件,2 表示同时切换普通和实时审计文件。对于 DMDSC 环境仅切换当前节点审计文件。
SP_AUDIT_SET_ENC(NAME,KEY) --- 审计文件加密,NAME 为加密算法名,可使用 DM 支持的加密算法,见手册表 7.1;也支持用户自定义加密算法,见手册第 8 章加密引擎介绍;KEY 为加密密钥
查看审计记录
审计结果可以通过 SYSAUDITOR.V$AUDITRECORDS 来查看:
SELECT t.* FROM SYSAUDITOR.V$AUDITRECORDS t;
审计设置存放于 DM 字典表 SYSAUDIT 中。
进行一次审计设置就在 SYSAUDIT 中增加一条对应的记录,取消审计则删除 SYSAUDIT 中相应的记录。
语句序列审计"设置信息"记录在数据字典表 SYSAUDITOR.SYSAUDITSQLSEQ 中。
select t.* from SYSAUDITOR.SYSAUDITSQLSEQ t;
除语句序列审计设置外的审计"设置信息"都记录在数据字典表 SYSAUDITOR.SYSAUDIT 中。
select t.* from SYSAUDITOR.SYSAUDIT t;
SYSAUDITOR.SYSAUDIT 查询出来的结果是数字,要想知道数据的含义,可以用如下函数查询,示例:
SELECT SF_GET_AUDIT_TYPENAME(50); ---返回值为:INSERT
SELECT SF_GET_AUDIT_LEVELNAME(2); ---返回值为:OBJECT
SELECT SF_GET_AUDIT_WHENEVERNAME(1); ---返回值为:SUCCESSFUL