文章目录
- 前言
- 一、DM系统管理员
- 二、审计开关
- 2.1 审计的相关参数
- 2.2 打开审计功能
- 三、审计级别
- 3.1语句级审计
- 3.1.1 设置语句级审计
- 3.1.2 取消语句级审计
- 3.2 对象级审计
- 3.2.1 设置对象级审计
- 3.2.2 取消对象级审计
- 3.3 语句序列审计
- 3.3.1 建立语句序列审计
- 3.3.2 删除语句序列审计
- 四 审计文件管理
- 五 审计信息查阅
- 六 其他
前言
数据库审计主要用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是数据安全体系的重要组成部分。
本文使用的数据库版本为DM7。
一、DM系统管理员
为了保证数据库系统的安全性,DM 数据库采用“三权分立”或“四权分立”的安全机制,“三权分立”时系统内置三种系统管理员,包括数据库管理员、数据库安全员和数据库审计员,四权分立”时新增了一类用户,称为数据库对象操作员。它们各司其职,互相制约,有效地避免了将所有权限集中于一人的风险,保证了系统的安全性。
数据库管理员(DBA)、数据库安全员(SSO)、数据库审计员(AUDITOR)、数据库对象操作员(DBO)。
数据库审计中使用的是数据库审计员(AUDITOR)。
数据库审计员可以设置要审计的对象和操作、定义新的数据库审计员、查看和分析审计记录。通过设置审计,几乎可以跟踪任何人在系统内执行的任何操作,为事后追查提供便利。
二、审计开关
2.1 审计的相关参数
参数名 | 缺省值 | 属性 | 说明 |
ENABLE_AUDIT | 0 | 动态,系统级 | 审计开关,0:关闭;1:打开普通审计;2 打开普通审计和实时审计 |
AUDIT_FILE_FULL_MODE | 1 | 静态 | 审计文件满后的处理方式,1:删除文件;2:不删除文件,也不添加审计记录 |
AUDIT_MAX_FILE_SIZE | 100 | 动态,系统级 | 审计文件的最大大小,以兆为单位。有效值范围(1~4096) |
2.2 打开审计功能
使用SYSDBA账号
代码如下(示例):
----打开审计功能
SQL> sp_set_para_value(1,'ENABLE_AUDIT',1);
----查看审计状态
SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
三、审计级别
数据库审计员指定被审计对象的活动称为审计设置,只有具有 AUDIT DATABASE 权限的审计员才能进行审计设置。DM 提供审计设置系统过程来实现这种设置,被审计的对象可以是某类操作,也可以是某些用户在数据库中的全部行踪。只有预先设置的操作和用户才能被 DM 系统自动进行审计。
DM 允许在三个级别上进行审计设置:
审计级别 | 说明 |
系统级 | 系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录 |
语句级 | 导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句 |
对象级 | 审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句 |
审计设置存放于 DM 字典表 SYSAUDIT 中,进行一次审计设置就在 SYSAUDIT 中增加一条对应的记录,取消审计则删除 SYSAUDIT 中相应的记录。
3.1语句级审计
语句级审计的动作是全局的,不对应具体的数据库对象。
审计选项 | 审计的数据库操作 | 说明 |
ALL | 所有的语句级审计选项 | 所有可审计操作 |
TABLE | CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE | 创建/修改/删除/清空基表操作 |
INSERT TABLE | INSERT INTO TABLE | 表上的插入操作 |
UPDATE TABLE | UPDATE TABLE | 表上的修改操作 |
DELETE TABLE | DELETE FROM TABLE | 表上的删除操作 |
SELECT TABLE | SELECT FROM TABLE | 表上的查询操作 |
…… | …… | …… |
3.1.1 设置语句级审计
----例 1,审计表的创建、修改和删除。
SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
----例 2,对 SYSDBA 创建用户成功进行审计。
SP_AUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
----例 3,对用户 USER2 进行的表的修改和删除进行审计,不管失败和成功。
SP_AUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');
3.1.2 取消语句级审计
使用说明:
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
----例 1,取消对表的创建、修改和删除的审计。
SP_NOAUDIT_STMT('TABLE', 'NULL', 'ALL');
----例 2,取消对 SYSDBA 创建用户成功进行审计。
SP_NOAUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
----例 3,取消对用户 USER2 进行的表的修改和删除的审计。
SP_NOAUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_NOAUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');
3.2 对象级审计
对象级审计发生在具体的对象上,需要指定模式名以及对象名。
3.2.1 设置对象级审计
----例 1,对 SYSDBA 对表 PERSON.ADDRESS 进行的添加和修改的成功操作进行审计。
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
----例 2,对 SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功的操作进行审计。
SP_AUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');
3.2.2 取消对象级审计
使用说明:
取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
----例 1,取消对 SYSDBA 对表 PERSON.ADDRESS 进行的添加和修改的成功操作的审计。
SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_NOAUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
----例 2,取消对 SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功操作
的审计。
SP_NOAUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL
');
3.3 语句序列审计
DM 还提供了语句序列审计功能,作为语句级审计和对象级审计的补充。语句序列审计需要审计员预先建立一个审计规则,包含 N 条 SQL 语句(SQL1,SQL2……),如果某个会话依次执行了这些 SQL 语句,就会触发审计。
3.3.1 建立语句序列审计
使用说明:
建立语句序列审计规则需要先调用 SP_AUDIT_SQLSEQ_START,之后调用若干次SP_AUDIT_SQLSEQ_ADD,每次加入一条 SQL 语句,审计规则中的 SQL 语句顺序根据加入 SQL 语句的顺序确定,最后调用 SP_AUDIT_SQLSEQ_END 完成规则的建立。
----例如,建立一个语句序列审计规则 AUDIT_SQL1。
SP_AUDIT_SQLSEQ_START('AUDIT_SQL1');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT NAME FROM TEST1;');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT ID ROM TEST2;');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT * FROM TEST3;');
SP_AUDIT_SQLSEQ_END(' AUDIT_SQL1');
3.3.2 删除语句序列审计
----例如,删除语句序列审计规则 AUDIT_SQL1。
SP_AUDIT_SQLSEQ_DEL(' AUDIT_SQL1');
四 审计文件管理
审计文件的大小可以通过 DM 的 INI 参数 AUDIT_MAX_FILE_SIZE 指定。当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。AUDIT_MAX_FILE_SIZE 为动态系统级参数,缺省值为 100M,DBA用户可通过系统过程 SP_SET_PARA_VALUE 对其进行动态修改,有效值范围为 1~4096M。
随着系统的运行,审计记录将会不断增加,审计文件需要更多的磁盘空间。在极限情况下,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。
对这种情况的处理有两种策略,通过设置 DM 的 INI 参数 AUDIT_FILE_FULL_MODE 进行配置。当将 AUDIT_FILE_FULL_MODE 置为 1 时,将删除最老的审计文件,直至有足够的空间创建新审计文件;当将 AUDIT_FILE_FULL_MODE 置为 2 时,将不再写审计记录,默
认值为 1。AUDIT_FILE_FULL_MODE 为静态参数,可通过系统过程
SP_SET_PARA_VALUE 进行修改,但是修改需要重新启动 DM 数据库服务器才能生效。
若系统审计人员已对历史审计信息进行了充分分析,不再需要某个时间点之前的历史审计信息,可使用下面的系统过程删除指定时间点之前的审计文件,但是不会删除 DM 当前正在使用的审计文件。
----例如,指定删除 2015-12-6 16:30:00 以前的普通审计文件。
SP_DROP_AUDIT_FILE('2015-12-6 16:30:00',0);
五 审计信息查阅
当审计设置后,日志记录在 SYSAUDITOR.V$AUDITRECORDS
序号 | 列 | 数据类型 | 说明 |
1 | USERID | INTEGER | 用户 ID |
2 | USERNAME | VARCHAR(128) | 用户名 |
3 | ROLEID | INTEGER | 角色 ID |
4 | ROLENAME | VARCHAR(128) | 角色名 |
5 | IP | VARCHAR(25) | IP 地址 |
6 | SCHID | INTEGER | 模式 ID |
7 | SCHNAME | VARCHAR(128) | 模式名 |
8 | OBJID | INTEGER | 对象 ID |
9 | OBJNAME | VARCHAR(128) | 对象名 |
10 | OPERATION | VARCHAR(128) | 操作类型名 |
11 | SUCC_FLAG | CHAR(1) | 成功标记 |
12 | SQL_TEXT | VARCHAR(8188) | SQL 文本 |
13 | DESCRIPTION | VARCHAR(8188) | 描述信息 |
14 | OPTIME | DATETIME | 操作时间 |
----使用SYSAUDITOR审计账号登录
select * from SYSAUDITOR.V$AUDITRECORDS ;
六 其他
参考文档《DM7安全管理.pdf》