金跃权
(浙江外国语学院信息学院,浙江杭州 310012)
基于触发器的敏感数据表监护
金跃权
(浙江外国语学院信息学院,浙江杭州 310012)
探讨了在信息系统后台数据库中利用 Insert、Update和 Delete三种触发器来监测跟踪敏感数据表,以便数据库管理者及时发现非法修改或删除数据,确保信息系统中数据的安全.
表;数据库;触发器;数据监测
随着计算机技术的发展和其应用的深入,各行各业普遍建立了适合本单位的管理信息系统,大量与单位相关的基本信息数据和日常事务处理数据存放于信息系统后台数据库,这些数据一方面给合法授权用户带来了共享和使用的方便,但另一方面这些数据也面临安全的风险.信息系统一般建立在局域网或广域网环境,众多系统用户通过网络操作信息系统后台数据库数据,虽然信息系统设计时给各用户授予了不同权限和密码访问数据,但用户名和密码仍有可能发生被盗泄密现象,从而让非法人员通过网络登录信息系统,对数据库数据进行非法操作.若将那些对本单位运营来说显得非常重要的数据称之为敏感数据,那么在这些非法操作中,对敏感数据的修改和删除,轻者会给单位日常事务带来混乱,重者会影响企事业单位的决策.虽然对敏感数据可以采取加密等办法进行保护,然而加密数据不便于使用者查询和检索,况且加密数据也会被盗和解密,所以对敏感数据的数据库表不但要加强授权用户的管理,而且要对数据库表进行实时的监测跟踪,从而实现保护敏感数据.为此,本文将对数据库表实时监测跟踪进行探讨,为数据库管理者 (DBA)提供一些相关的触发器,实现对数据的监测与保护[1].
虽然数据库系统中的日志文件记录了所有对数据库的操作,但直接通过日志文件去查看和分析某个数据表中的记录变化情况便不那么简单,因为日志文件设计的初衷主要是用来修复与重建毁坏的数据库.所以在数据库中要对存有敏感数据的表实现实时监测,理想的办法之一就是建立一个与之对应的监测跟踪表,将监测到的变化情况存入监测跟踪表,进行检查分析,判断对敏感数据表操作的合非性.本文以高校教务信息系统后台 SQL Server数据库中学生成绩表数据监测保护为例,论述数据监测保护过程,其示意图如图 1所示.
图1 学生成绩表监测和保护过程示意图
数据监测系统包含 Jiaowu教务数据库和 Jiance监测数据库,Jiaowu教务数据库用于存放教务应用数据表,如 Teacher教师表、Course课程表等,而 Jiance监测数据库只由数据库管理者(DBA)掌管.Score学生成绩表建立在 Jiaowu数据库中,其监测跟踪表 Score_monitor创建在Jiance数据库中.Score学生成绩表包含所有学生多门课程的学习成绩,表中记录由各课程任课教师通过网络分别录入,各学生也可以通过网络查询自己各课程的成绩,可以访问 Score学生成绩表的用户很多,每个用户都有自己访问操作学生成绩表的权限和密码.如果让不怀好意者盗取他人密码而修改或删除 Score学生成绩表中的某些记录,就会引起教学管理的混乱.为此,在 Score表上建立 Insert、Update和 Delete三个触发器,对 Score学生成绩表记录变更进行监测跟踪.
Score学生成绩表和其监测跟踪表 Score_monitor的表结构如表 1、表 2所示.对于存放敏感数据的表一般包含录入者和录入时间等字段表明数据录入的合法性,Score表也不例外.Score_monitor表包含 Score表所有字段外,还包含改删者、改删时间和改删类别等字段,该表记载 Score表中被修改了的和被删除了的记录,以供事后分析这些记录被修改或删除的合法性.Score_monitor表建立在 Jiance监测数据库中,只供数据库管理者 (DBA)使用,与 Jiaowu教务数据库隔开.
表1 Score表结构
表2 Score_mon itor表结构
Score学生成绩表数据监测保护工作过程如下:当 Score表中插入记录时,触发 Insert插入触发器,触发器将插入记录的数据库用户名和插入时间强制性保存到该记录的录入者和录入时间字段,以表明该记录数据的责任者;当 Score表中有记录被修改时,触发 Update修改触发器,触发器将被修改掉的原记录数据、修改者数据库用户名和修改时间存入 Score_monitor监测跟踪表;当 Score表中有记录被删除时,触发 Delete删除触发器,触发器将被删除掉的原记录数据、删除者数据库用户名和删除时间存入 Score_monitor监测跟踪表.经过事后查询分析Score_monitor监测跟踪表中的记录,若发现有非法修改或删除 Score表记录情况,可以根据Score_monitor表中记录的数据,恢复 Score表中记录,从而达到保护 Score表记录数据.
为了实现数据监测,首先要做的是根据被监测表结构,在 Jiance数据库中建立监测跟踪表结构,如 Score_monitor表.如果有许多表需要监测,那么建立相应监测跟踪表的结构也是很繁琐的.为了简化建立监测跟踪表结构的工作,可以在 Jiance数据库中先建立一个无记录的名为“辅助表”的空表,该表仅包含改删者、改删时间和改删类别等三个字段,这三个字段的数据类型和长度如表 2所示.然后以 sa用户登录 Jiance数据库,执行下列语句就可以生成 Score_monitor表结构,其他监测跟踪表结构可以类似生成[2]:
SELECT a.*,b.* into score_monitor FROM jiaowu..score a,辅助表 b WHERE 1=0
触发器是 SQL Server数据库中特殊的存储过程,它与数据库中的表对象紧密相连,若发生对表进行插入、修改或删除记录事件时,就会自动触发执行这些特殊的存储过程.当触发事件发生时,触发器会产生两个临时逻辑表:inserted和 deleted,它们的结构与原表相同.插入记录时,触发器会将数据插入原表和 inserted表;修改记录时,触发器会在原表中将被修改掉的记录删除并放入 deleted表,将新数据插入原表和 inserted表;删除记录时,触发器会在原表中删除被删的记录,并将它放入 deleted表[3].触发器一般在表建立时由 dbo用户创建.
当插入记录时,为了在 Score表中强制性保留记录的录入者和录入时间,可以用下列语句在 Score表上建立 Insert插入触发器:
USE jiaowu
IF EXISTS(select name from sysobjectswhere name=‘tr_i’and type=‘TR’)
DROP TR IGGER tr_i
go
CREATE TR IGGER tr_iON score
FOR I NSERT
AS
update score
set录入者 =suser_sname(),
录入时间 =getdate()
where学号 =(select学号 from inserted)and
课程名称 =(select课程名称 from inserted)
go
当修改记录时,为了将 Score表中被修改掉的记录数据保存到 Jiance数据库中的 Score_monitor表中,可以用下列语句在 Score表上建立 Update修改触发器:
USE jiaowu
IF EXISTS(select name from sysobjectswhere name=‘tr_u’and type=‘TR’)
DROP TR IGGER tr_u
go
CREATE TR IGGER tr_u ON score
FOR update
AS
insert jiance..score_monitor select* ,suser_sname(),getdate(),‘更改 ’from deleted
where录入者 is not null
go
当删除记录时,为了将 Score表中被删除掉的记录数据保存到 Jiance数据库中的 Score_monitor表中,可以用下列语句在 Score表上建立 Delete删除触发器:
USE jiaowu
IF EXISTS(select name from sysobjectswhere name=‘tr_d’and type=‘TR’)
DROP TR IGGER tr_d
go
CREATE TR IGGER tr_d ON score
FOR delete
AS
insert jiance..score_monitor select* ,suser_sname(),getdate(),‘删除 ’from deleted
go
对 Score表修改或删除记录的监测跟踪情况可以使用下列语句查询 Score_monitor表获得:
SELECT* FROM score_monitor order by改删时间 DESC
该查询结果按“改删时间”字段中时间的降序列出,如表 3所示.从表 3可知,有一个名为“zhang”的用户登录 jiaowu教务数据库,在 Score表中先将王海晨同学的高等数学 56分成绩更改为 85分,然后又将王海晨同学的高等数学成绩这条记录删除;“wang”用户登录后,则删除了石瑞平同学的操作系统成绩记录;而“liang”用户登录后,对吴佳翔同学的编译原理成绩进行了两次更改.结合实际,了解 zhang、wang和 liang用户是否拥有合法的修改或删除权限,并确定他们是否在所列时间对 Score表进行了修改或删除,从而确定这些数据被修改或删除的合法性.若是非法修改或删除,则根据所列出的跟踪情况,恢复 Score表原来正确的数据.
表3 Score_mon itor表所保存的监测跟踪情况
利用触发器对数据库中的数据表进行实时监测与跟踪,可以及时发现数据的非法修改或删除,恢复被毁坏的数据,并对具有不良操作的数据库用户进行分析查找,消除潜在隐患,确保数据的安全.另外,由于触发器是与应用系统后台数据库表相关联的特殊存储过程,触发器事件发生时都会自动调用执行这些存储过程,如果过多使用触发器,会影响后台数据库系统性能,所以一般仅对敏感数据表进行监测与跟踪.
[1]程志梅,邱霞明,王晓燕.SQL Server2000数据库中触发器的妙用 [J].计算机应用与软件,2009(3):188-189.
[2]郑阿奇,刘启芬,顾韵华.SQL SERVER教程 [M].北京:清华大学出版社,2005:104-106.
[3]周绪,管丽娜,白海波.SQL Server 2000中文版入门与提高[M].北京:清华大学出版社,2001:330-336.
Monitori ng and Protection of Sensitive Data Table Based on Trigger
J IN Yuequan
(Information School,Zhejiang International StudiesUniversity,Hangzhou 310012,China)
Using Insert,Update and Delete triggers to monitor sensitive data tables of the background database of the information system,the database administrators can promptly detect data which are modified or deleted illegally.In thisway the security of data of the information system can be ensured.
table;database;trigger;data monitoring
TP311
A
1671-6574(2010)04-0092-05
2010-06-05
金跃权 (1965-),男,浙江东阳人,浙江外国语学院信息学院副教授,工学硕士.