论文部分内容阅读
现代数据库管理系统广泛应用于办公自动化,其安全性越来越重要。虽然各种数据库系统提供了相当多的安全机制,比如访问控制、备份恢复、日志与审计等,但是黑客对数据库的攻击入侵事件还是很多,很常见的一种情况:通过缓冲区溢出等途径突破数据库自身提供的访问控制功能,提升用户权限,然后入侵数据库。SQL Server 2000数据库触发器在数据库系统中得到应用,提高了数据库系统的安全性。
触发器一种特殊类型的存储过程,当使用Insert、Delete、Update语句对数据库表中的数据进行操作时,触发器将自动执行。触发器的工作原理,它是触发器与表紧密联系在一起,该表也称为触发器表。在对表进行插入、删除和更新操作时,若该表有相应操作类型的触发器,则触发器会自动触发执行。程序开发人员利用其工作原理来设计了一种新的机制,就是把数据库系统提供的访问控制功能作为第一层的安全保护,再构建一层访问控制机制作为第二层安全控制机制。我们的主要思想是当用户突破第一层安全保护进入数据库时,再启用第二层的安全保护机制,第二层的安全保护就是控制用户对数据库的操作权限。也就是说,你可以提升权限进入数据库,但是你要操作数据库还不行,你得突破第二层安全保护取得操作权限。因此,这种机制也就能够有效的防止用户的恶意篡改数据。
以实验室信息管理数据库系统为例,介绍触发器技术的应用。
1.仅供信息检索的数据库表(实验考试成绩查询)
数据库作为存放数据的仓库,在许多情況下,是为了提供信息检索服务的。通常的做法是通过为用户设定Select权限来保证数据库表中的数据不被修改,这对没有相应权限的用户可以起到保护作用。但是,如果用户通过攻击手段提升权限后就可以进行非法的修改操作。在实际的系统设计中,通过使用触发器,把对数据库表中的记录的修改操作屏蔽掉。在下面的触发器中,只给出了提示信息,省去了触发器中定义的具体操作的语句。
CREATE TRIGGER tr_ScoreQuery
ON ScoreQuery
INSTEAD OF INSERT,DELETE,UPDATE
AS
PRINT‘非法用户,禁止修改操作!’
Begin
Insert into log_table(log_user,db_name,event_name,log_time) values(sys.login_user,sys.database_name,sys_sysevent,sysdate);
--触发器定义的其他具体操作
End;
GO
GO
2.插入删除更新操作频繁的数据库表
如果要对数据库中插入、删除或更新记录,就必须先删除触发器,这给数据库管理员带来许多不便。因此,对于考试系统中用户管理子系统这一类型的修改操作比较频繁的数据库,我们不能像上面那样,不管什么用户的修改操作一律都屏蔽掉,而是应该根据用户权限有所不同。可以通过自定义用户权限表来判断用户操作的合法性,对于不合法的予以屏蔽。
自定义用户权限表包括四个字段:user_id、Insert_of、Delete_of、Update_of,它们的数据类型分别为:smallint、bit、bit、bit。其中bit类型中1表示用户有权限,0表示用户没有权限。
CREATE TABLE UserRight
( user_id smallint,
Insert_of bit,
Delete_of bit,
Update_of bit
)
在数据库系统运行过程中,可以使用全局函数CURRENT_USER()来获取当前的用户名,赋值给@currentuser,之后再使用全局函数USER_ID(@currentuser)获取当前用户的ID。
一个屏蔽非法操作的DELETE触发器设计如下:
CREATE TRIGGERtr_UserManage
ON UserManage
AFTER DELETE
AS
IF ((SELECT Delete_of from UserRight WHERE user_id=USER_ID(CURRENT_USER))
!=1)
ROLLBACK TRANSACTION
——其他的操作
GO
触发器在系统开发上有着很广泛的用途,本文介绍的只是它在加强数据库安全方面的一个小小应用。虽然触发器的用途很多,但是过多的使用触发器或者触发器写得不好,都将影响整个数据库的性能。因此,使用触发器的时候必须权衡各方面的因素,在适当的时候使用恰当的触发器。
参考文献:
[1]刘卫宏:SQL Server 2000实用教程[M].科学出版社,2003,9
[2]姚渝春等:数据库触发器及应用[J].重庆建筑大学学报,2003(5):128~131
[3]徐晓阳:触发器在SQL Server数据库开发中的应用[J].电脑开发与应用,2005(1):48~49
触发器一种特殊类型的存储过程,当使用Insert、Delete、Update语句对数据库表中的数据进行操作时,触发器将自动执行。触发器的工作原理,它是触发器与表紧密联系在一起,该表也称为触发器表。在对表进行插入、删除和更新操作时,若该表有相应操作类型的触发器,则触发器会自动触发执行。程序开发人员利用其工作原理来设计了一种新的机制,就是把数据库系统提供的访问控制功能作为第一层的安全保护,再构建一层访问控制机制作为第二层安全控制机制。我们的主要思想是当用户突破第一层安全保护进入数据库时,再启用第二层的安全保护机制,第二层的安全保护就是控制用户对数据库的操作权限。也就是说,你可以提升权限进入数据库,但是你要操作数据库还不行,你得突破第二层安全保护取得操作权限。因此,这种机制也就能够有效的防止用户的恶意篡改数据。
以实验室信息管理数据库系统为例,介绍触发器技术的应用。
1.仅供信息检索的数据库表(实验考试成绩查询)
数据库作为存放数据的仓库,在许多情況下,是为了提供信息检索服务的。通常的做法是通过为用户设定Select权限来保证数据库表中的数据不被修改,这对没有相应权限的用户可以起到保护作用。但是,如果用户通过攻击手段提升权限后就可以进行非法的修改操作。在实际的系统设计中,通过使用触发器,把对数据库表中的记录的修改操作屏蔽掉。在下面的触发器中,只给出了提示信息,省去了触发器中定义的具体操作的语句。
CREATE TRIGGER tr_ScoreQuery
ON ScoreQuery
INSTEAD OF INSERT,DELETE,UPDATE
AS
PRINT‘非法用户,禁止修改操作!’
Begin
Insert into log_table(log_user,db_name,event_name,log_time) values(sys.login_user,sys.database_name,sys_sysevent,sysdate);
--触发器定义的其他具体操作
End;
GO
GO
2.插入删除更新操作频繁的数据库表
如果要对数据库中插入、删除或更新记录,就必须先删除触发器,这给数据库管理员带来许多不便。因此,对于考试系统中用户管理子系统这一类型的修改操作比较频繁的数据库,我们不能像上面那样,不管什么用户的修改操作一律都屏蔽掉,而是应该根据用户权限有所不同。可以通过自定义用户权限表来判断用户操作的合法性,对于不合法的予以屏蔽。
自定义用户权限表包括四个字段:user_id、Insert_of、Delete_of、Update_of,它们的数据类型分别为:smallint、bit、bit、bit。其中bit类型中1表示用户有权限,0表示用户没有权限。
CREATE TABLE UserRight
( user_id smallint,
Insert_of bit,
Delete_of bit,
Update_of bit
)
在数据库系统运行过程中,可以使用全局函数CURRENT_USER()来获取当前的用户名,赋值给@currentuser,之后再使用全局函数USER_ID(@currentuser)获取当前用户的ID。
一个屏蔽非法操作的DELETE触发器设计如下:
CREATE TRIGGERtr_UserManage
ON UserManage
AFTER DELETE
AS
IF ((SELECT Delete_of from UserRight WHERE user_id=USER_ID(CURRENT_USER))
!=1)
ROLLBACK TRANSACTION
——其他的操作
GO
触发器在系统开发上有着很广泛的用途,本文介绍的只是它在加强数据库安全方面的一个小小应用。虽然触发器的用途很多,但是过多的使用触发器或者触发器写得不好,都将影响整个数据库的性能。因此,使用触发器的时候必须权衡各方面的因素,在适当的时候使用恰当的触发器。
参考文献:
[1]刘卫宏:SQL Server 2000实用教程[M].科学出版社,2003,9
[2]姚渝春等:数据库触发器及应用[J].重庆建筑大学学报,2003(5):128~131
[3]徐晓阳:触发器在SQL Server数据库开发中的应用[J].电脑开发与应用,2005(1):48~49