1审计的概念
审计机制是 DM 数据库管理系统安全管理的重要组成部分之一。DM 数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。
2审计的开关
在 DM 系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由过程 VOID SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param 有三种取值:
0:关闭审计
1:打开普通审计
2:打开普通审计和实时审计
缺省值为 0。
例:打开普通审计开关。
SP_SET_ENABLE_AUDIT (1);
注:审计开关必须由具有数据库审计员权限的管理员进行设置。
数据库审计员可通过查询 V$DM_INI 动态视图查询 ENABLE_AUDIT 的当前值。
SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
SQL> select user;
行号 USER()
1 SYSAUDITOR
已用时间: 3.636(毫秒). 执行号:800.
SQL> SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE
1 ENABLE_AUDIT 1 0 2 0 N 1 0 Flag For Allowing Audit, 0: no audit 1: normal audit 2:normal audit and realtime audit READ ONLY
已用时间: 12.451(毫秒). 执行号:801.
3审计级别
3.1系统级
系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录。
3.2语句级
导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT
TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句。
3.3对象级
审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句。审计设置存放于 DM 字典表 SYSAUDIT 中,进行一次审计设置就在 SYSAUDIT 中增加一条对应的记录,取消审计则删除 SYSAUDIT 中相应的记录。
4审计举例
4.1语句级
语法:
开启语句审计
SP_AUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
取消语句审计
SP_NOAUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
参数说明:
TYPE:语句级审计选项,即上表中的第一列
USERNAME:用户名,NULL表示不限制
WHENEVER:审计时机,可选的取值为:
ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时
注:取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
SQL> SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
DMSQL 过程已成功完成
已用时间: 15.583(毫秒). 执行号:802.
SQL> create table test01 as select * from dba_objects;
create table test01 as select * from dba_objects;
第1 行附近出现错误[-5515]:没有创建表权限.
已用时间: 1.896(毫秒). 执行号:0.
SQL> create table test01 as select * from dba_objects;
操作已执行
已用时间: 77.645(毫秒). 执行号:900.
查看审计记录:
SQL> select * from v$auditrecords;
行号 USERID USERNAME ROLEID ROLENAME IP SCHID SCHNAME OBJID OBJNAME OPERATION SUCC_FLAG SQL_TEXT
DESCRIBTION OPTIME MAC SEQNO BIND_INFO
1 -1 -1 -1 -1 STARTUP Y STARTUP
Instance startup with nomral exit 2023-09-28 09:04:40.000000 0 NULL
2 -1 -1 -1 -1 STARTUP Y STARTUP
Instance startup with abnormal exit 2023-09-28 11:01:28.000000 0 NULL
3 50331650 SYSAUDITOR 67108867 DB_AUDIT_ADMIN ::1 -1 -1 EXECUTE Y SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
2023-09-28 15:06:58.000000 00:0C:29:09:2A:81 0 NULL
行号 USERID USERNAME ROLEID ROLENAME IP SCHID SCHNAME OBJID OBJNAME OPERATION SUCC_FLAG SQL_TEXT
DESCRIBTION OPTIME MAC SEQNO BIND_INFO
4 50331650 SYSAUDITOR -1 ::1 -1 -1 CREATE TABLE N create table test01 as select * from dba_objects;
没有创建表权限 2023-09-28 15:07:17.000000 00:0C:29:09:2A:81 0 NULL
5 50331649 SYSDBA 67108864 DBA ::1 -1 -1 CREATE TABLE Y create table test01 as select * from dba_objects;
2023-09-28 15:07:43.000000 00:0C:29:09:2A:81 0 NULL
4.2对象级
语法:
开启对象审计
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)
)
取消对象审计
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)
)
参数说明:
TYPE 对象级审计选项,如:
NSERT UPDATE DELETE SELECT
EXECUTE
MERGE INTO
EXECUTE TRIGGER
LOCK TABLE
BACKUP TABLE
RESTORE TABLE
ALL(所有对象级审计选项)
USERNAME:用户名
SCHNAME:模式名,为空时置'null'
TVNAME:表、视图、存储过程名不能为空
COLNAME:列名
WHENEVER:审计时机,可选的取值为:
ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时
查看审计策略:
审计设置信息都记录在数据字典表SYSAUDITOR.SYSAUDIT中
SQL> SELECT * FROM SYSAUDITOR.SYSAUDIT;
LEVEL UID TVPID COLID TYPE WHENEVER
2 -1 1097 -1 50 3
2 -1 1097 -1 53 3
2 -1 1097 -1 52 3
列字段说明:
LEVEL:审计级别
UID:用户ID
TVPID:表/视图/触发器/存储过程函数ID
COLID:列ID
TYPE:审计类型
WHENEVER:审计情况
DM 还提供了以下系统函数供查看审计设置中涉及的审计类型 TYPE、审计级别 LEVEL、以及生成时机 WHENEVER 常量对应的具体信息,作为上述动态视图的补充。
TYPE
SQL> SELECT SF_GET_AUDIT_TYPENAME(50);
行号 SF_GET_AUDIT_TYPENAME(50)
1 INSERT
SQL> SELECT SF_GET_AUDIT_TYPENAME(53);
行号 SF_GET_AUDIT_TYPENAME(53)
1 UPDATE
SQL> SELECT SF_GET_AUDIT_TYPENAME(52);
行号 SF_GET_AUDIT_TYPENAME(52)
1 DELETE
LEVEL
SQL> SELECT SF_GET_AUDIT_LEVELNAME(1);
行号 SF_GET_AUDIT_LEVELNAME(1)
1 STMT
SQL> SELECT SF_GET_AUDIT_LEVELNAME(2);
行号 SF_GET_AUDIT_LEVELNAME(2)
1 OBJECT
WHENEVER
SQL> SELECT SF_GET_AUDIT_WHENEVERNAME(1);
行号 SF_GET_AUDIT_WHENEVERNAME(1)
1 SUCCESSFUL
SQL> SELECT SF_GET_AUDIT_WHENEVERNAME(2);
行号 SF_GET_AUDIT_WHENEVERNAME(2)
1 FAIL
SQL> SELECT SF_GET_AUDIT_WHENEVERNAME(3);
行号 SF_GET_AUDIT_WHENEVERNAME(3)
1 ALL
例:
SP_AUDIT_OBJECT('UPDATE','SYSDBA','SYSDBA','TEST01','OWNER','SUCCESSFUL');
SQL> update test01 set owner='SYSDBA' where owner='SYS';
影响行数 871
已用时间: 15.553(毫秒). 执行号:916.
SQL> commit;
操作已执行
已用时间: 1.937(毫秒). 执行号:917.
行号 USERID USERNAME ROLEID ROLENAME IP SCHID SCHNAME OBJID OBJNAME OPERATION SUCC_FLAG SQL_TEXT
DESCRIBTION OPTIME MAC SEQNO BIND_INFO
----------- -------------------------- ----------------- ----------- ---------
18 50331649 SYSDBA 67108864 DBA ::1 150994945 SYSDBA 1016 TEST01 UPDATE Y update test01 set owner='SYSDBA' where owner='SYS';
2023-08-28 16:07:32.000000 00:0C:29:09:2A:81 0 NULL
SQL> select * from sysaudit;
行号 LEVEL UID TVPID COLID TYPE WHENEVER
1 1 -1 -1 -1 15 3
2 2 50331649 1016 14 53 1
SQL> select sf_get_audit_levelname(2);
行号 SF_GET_AUDIT_LEVELNAME(2)
1 OBJECT
已用时间: 2.211(毫秒). 执行号:815.
SQL> select sf_get_audit_typename(53);
行号 SF_GET_AUDIT_TYPENAME(53)
1 UPDATE
SQL> select sf_get_audit_whenevername(1);
行号 SF_GET_AUDIT_WHENEVERNAME(1)
1 SUCCESSFUL
已用时间: 1.736(毫秒). 执行号:817.
SQL> select user_id,username from dba_users;
行号 USER_ID USERNAME
1 50331648 SYS
2 50331649 SYSDBA
3 50331650 SYSAUDITOR
4 50331651 SYSSSO
SQL> select object_id,owner,object_name from dba_objects where object_name='TEST01';
行号 OBJECT_ID OWNER OBJECT_NAME
1 1016 SYSDBA TEST01
已用时间: 12.523(毫秒). 执行号:921.
SQL> SELECT COLID,NAME,ID FROM syscolumns where colid=14 and id=1016;
行号 COLID NAME ID
1 14 OWNER 1016
查看审计信息
动态视图SYSAUDITOR.V$AUDITRECORDS查询系统默认路径下的审计文件的审计记录。
select * from SYSAUDITOR.V$AUDITRECORDS;
5审计文件管理
5.1审计文件命名
格式为“AUDIT_GUID_创建时间.log”,其中“GUID”为DM给定的一个唯一值。
5.2审计文件存放路径
审计文件默认存放在数据库的SYSTEM_PATH指定的路径,即数据库所在路径。
也可在dm.ini文件中添加参数AUD_PATH来指定审计文件的存放路径。
5.3审计文件的大小
dm.ini文件参数AUDIT_MAX_FILE_SIZE指定。
AUDIT_MAX_FILE_SIZE为动态系统级参数,缺省值为100M。可通过系统过程SP_SET_PARA_VALUE对其进行动态修改,有效值范围为1~4096M。
当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。
5.4审计文件空间上限
dm.ini文件参数AUDIT_SPACE_LIMIT指定。
AUDIT_SPACE_LIMIT为静态参数,可通过系统过程SP_SET_PARA_VALUE进行修改,但是修改需要重新启动DM数据库服务器才能生效。默认值为8192M。
超过空间上限,根据下面AUDIT_FILE_FULL_MODE 参数设置,进行自动清理或停止写审计。
5.5审计文件清理策略
dm.ini文件参数 AUDIT_FILE_FULL_MODE 指定。
AUDIT_FILE_FULL_MODE为静态参数,可通过系统过SP_SET_PARA_VALUE进行修改,但是修改需要重新启动DM数据库服务器才能生效。
AUDIT_FILE_FULL_MODE置为1时,将删除最老的审计文件,直至有足够的空间创建新审计文件。若将所有可以删除的审计文件都删除后空间仍旧不够,则数据库会挂起不再处理任何请求,直至磁盘空间被清理出足够创建新审计文件的空间,默认值为1。
AUDIT_FILE_FULL_MODE置为2时,将不再写审计记录。
两种策略都会导致审计记录的缺失,因此,管理员应该及时对审计文件进行备份。
删除指定时间点之前的审计记录:
SP_DROP_AUDIT_FILE(
TIME_STR VARCHAR(128),
TYPE INT
);
参数说明:
TIME_STR:指定的时间字符串
TYPE:审计文件类型,0表示删除普通审计文件,1表示删除实时审计文件
例如,指定删除2024-03-25 17:30:00以前的普通审计文件。
SP_DROP_AUDIT_FILE('2024-03-25 17:30:00',0);
文章
阅读量
获赞