SQL触发器在系统开发中的应用_第1页
SQL触发器在系统开发中的应用_第2页
SQL触发器在系统开发中的应用_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQL触发器在系统开发中的应用摘要:数据的完整性和安全性是衡量数据库性能的重要标准。系统开发过程中实现数据安全性和完整性的方法有很多,文章从触发器角度来分析如何实现数据的安全性和完整性。关键词:触发器,完整性,安全性1.触发器的概述触发器是数据库软件中一个重要工具,通过触发器可以完成数据表复杂的数据完整性约束,以防止不正确的操作。 触发器是存储过程的一种特殊类型。触发器可视作表的一部分,与数据库中的表紧密关联,当数据表有相关的事件发生时,触发器会自动触发执行相关操作,从而保证数据的一致性和完整性。SQL Server触发器可分为DML 触发器和 DDL 触发器。DDL 触发器会在发生数据定义语

2、言(DDL)事件时触发;DML 触发器是指当数据库中发生数据操作语言(DML)事件时触发。DML触发器有三种类型:后(AFTER )触发器、替代(INSTEAD OF )触发器和CLR 触发器。通常执行了 Insert、Update 或 Delete 语句操作之后将会执行后(AFTER )触发器。当触发器被激活时,系统自动创建两个临时表:delete临时表和inserted临时表。delete临时表存放执行delete或update语句后,要从源表中删除的行。inserted临时表存放执行insert或update语句后,要在源表中插入的新行。文章以AFTER触发器为例来讲述触发器在保持数据完

3、整性中的应用。2.用触发器提高数据库的安全性触发器可以基于时间这个条件限制用户的某些操作,比如不允许在工作时间之外或节假日修改数据库中的数据。触发器可以基于数据库中的数据限制用户的重要操作,如股票每天的升幅不允许超过10%等。还可以将信息检索系统数据库中的记录设为“只读”,在一定程度上对相关的数据库起到保护作用。如在很多情况下,数据库仅仅是为了提供信息检索等应用而创建的,几乎不作修改,例如一些查询系统。可以通过为用户设定指定的Select 权限,来保证数据库中的数据不被修改,从而在一定程度上对数据库起到一定的保护作用,而这种方法不能阻止通过缓存区溢出等一些攻击手段提升权限后进行非法的修改或删除

4、操作。于是将信息检索系统数据库中的记录设为“只读”就非常有必要了。应用触发器把对表记录的更改操作全部的屏蔽掉,从而可以准确地记录企图篡改数据库记录的相关非法操作。此类触发器设计方法如下:createtrigger 触发器名 on 表名instead of update,insert,deleteasprint 禁止修改表!此处为日志记录需做相关的工作 Go应用该触发器的数据库,无论是谁在对表执行插入、删除、更新操作时,就会激活该触发器,即使是非法的用户提升权限,也不能去修改表中的相关记录。这种将表设为“只读”的方法,管理员和用户的所有修改更新操作被屏蔽了,从而有效地保护了数据记录。但是如果数据

5、库中的数据需要进行更新时,就必须先删除该类触发器,从而给管理员的维护带来许多不便。所以在使用该方法时,数据库管理员针对于不同的应用场合,设计一种不同的安全管理机制。3.用触发器实现复杂完整性规则SQL Server用约束和触发器两种方式来强制使用业务规则和数据完整性。触发器作为特殊类型的存储过程,可在执行相关的语言事件时自动触发执行。DML触发器可以查询其他表,还可以包含复杂的T-SQL语句,可将触发器作为事务来对待。触发器在系统设计过程中具有以下几方面的作用。(1).通过DML触发器实现数据库中的相关表之间的级联更新、删除触发器可以对数据库中相关表之间的数据进行级联的更新、删除或者计算。如在

6、更新或删除表中记录时级联更新或删除与之关联表中的相匹配的行。在更新或删除时把之关联表中的相关行设成NULL值或设成缺省值。例如有如下两个关系:菜单(菜品编号,菜品名称,规格,类别,单价,成本价),点菜(订单编号,菜品编号,数量)。以级联更新为例,分析当菜单表中的菜品编号修改时,点菜表中的菜品编号同时更新这样的操作用触发器如何实现:create trigger 触发器名 on 菜单 after updateasdeclarejbhchar(5), xbhchar(5)select jbh=deleted.菜品编号, xbh= inserted. 菜品编号fromdeleted, inserted

7、 where deleted. 菜品编号= inserted. 菜品编号print 准备级联更新点菜表中的菜品编号信息.Update 点菜 set 菜品编号=xbh where 菜品编号=jbh print 已经级联更新了点菜表原菜品编号为+ jbh +的信息(2).用触发器设计比 CHECK 约束更为复杂的限制约束和 DML 触发器在不同的情况下有其各自的优点。DML 触发器的优点是它可以用T-SQL 代码处理复杂处理逻辑,它可以支持CHECK约束的所有功能;但对于有些复杂的规则CHECK约束是不能实现的。比如当用户对表进行了相应的操作后,希望系统能自动撤消该操作,并给出用户提示信息,这样的

8、操作对于CHECK 约束是不能实现的。对于这种实现自动撤销的操作可用触发器来实现。例如在3.1中所述的菜单表上创建的触发器,当对该表的“菜单名称”列修改时激发该触发器,使用户不能修改“菜单名称”列,并进行回滚。其方法如下:create trigger触发器名 on 菜单 after updateasif update(菜单名称)beginrollback transaction raiserror(不能修改菜单名称!, 16 ,1)end另外触发器还可以自动计算数据值,比如当数据库中某一数据的值达到了报警的要求时,触发器会立即给相关人员发送警告。(3).用触发器实现外键约束外键约束用来实现数据

9、的参照完整性,它可以在表创建或修改时定义,也可以通过触发器来实现。如上述的菜单表和和点菜表就存在着参照的关系,点菜表的菜单编号必须在菜单表中存在才行,即点菜表中的菜单编号为外键,他必须参照菜单表建立。这种参照关系用触发器实现方法如下:Createtrigger触发器名 on 点菜 afterinsertasifexists(select * from inserted where 菜品编号 in (select 菜品编号 from菜单)print添加成功!elsebeginprint 菜品编号与现有的菜单不符!rollback trabscationend4.使用触发器的注意事项 一个表的每个

10、触发操作可以有多个触发器,可以使用系统存储过程来指定哪个触发器最先或最后被激活,其他触发器顺序则不能被指定。在系统设计过程中要慎用触发器,因为触发器在大量并发的情况下,会影响系统性能。从维护方面考虑,当修改触发器所对应的表时,该表上相应触发器就会失效,维护代价相应提高。一般来说,只要数据变动就必须去检查其安全性时才需要去创建触发器,但是要定义好其变动的类型。对于不是非常重要的数据没必要创建触发器。如我们对触发器过分的依赖,就会影响数据库的结构,同时增加了维护的代价。5.总结有效利用SQL SERVER触发器可以使系统具有更好的性能,并可简化序代码。触发器设计的好,会对数据库系统的数据安全、完整性提供更好的保护,有助于系统的有效运行。参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论