快捷搜索:

SQL Server 2008中的代码安全(二):DDL触发器与登

本文主要 涉及DDL触发器和登录触发器的利用实例。

MicrosoftSQL Server 供给两种主要机制来强制应用营业规则和数据完备性:约束和触发器。触发器为特殊类型的存储历程,可在履行说话事故时自动生效。SQL Server 包括三种老例类型的触发器:DML 触发器、DDL 触发器和登录触发器。

1、当数据库中发生数据操作说话 (DML) 事故时将调用 DML 触发器。DML 事故包括在指定表或视图中改动数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包孕繁杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。假如检测履新错(例如,磁盘空间不够),则全部事务即自动回滚。

关于DML触发器利用最为广泛。这里不再赘述。MSDN官方阐明:http://msdn.microsoft.com/zh-cn/library/ms189799.aspx

2、当办事器或数据库中发生数据定义说话 (DDL) 事故时将调用 DDL 触发器。DDL 触发器是一种特殊的触发器,它在相应数据定义说话 (DDL) 语句时触发。它们可以用于在数据库中履行治理义务,例如,审核以及规范数据库操作。

下面我们用举例阐明DDL触发器(http://technet.microsoft.com/zh-cn/library/ms189799%28SQL.90%29.aspx)的利用:

示例一:创建一个DDL触发器审核数据库级事故

/奸淫奸淫奸淫奸淫奸淫

创建一个审核表,此中EventData是一个XML数据列

3w@live.cn

奸淫奸淫奸淫奸淫奸淫奸淫*/

USE master

GO

CREATE TABLE dbo.ChangeAttempt

(EventData xml NOT NULL,

AttemptDate datetime NOT NULL DEFAULT GETDATE(),

DBUser char(50) NOT NULL)

GO

/奸淫奸淫奸淫奸淫奸淫

在目标数据库上创建一个触发器,以记录该数据库的索引变更动作,

包括Create|alter|Drop

3w@live.cn

奸淫奸淫奸淫奸淫奸淫奸淫*/

CREATE TRIGGER db_trg_RestrictINDEXChanges

ON DATABASE

FOR CREATE_INDEX, ALTER_INDEX, DROP_INDEX

AS

SET NOCOUNT ON

INSERT dbo.ChangeAttempt

(EventData, DBUser)

VALUES (EVENTDATA(), USER)

GO

/奸淫奸淫奸淫奸淫奸淫

创建一个索引,以测试触发器

3w@live.cn

奸淫奸淫奸淫奸淫奸淫奸淫*/

CREATE NONCLUSTERED INDEX ni_ChangeAttempt_DBUser ON

dbo.ChangeAttempt(DBUser)

GO

/奸淫奸淫奸淫奸淫奸淫

查看审核记录

3w@live.cn

奸淫奸淫奸淫奸淫奸淫奸淫*/

SELECT EventData

FROM dbo.ChangeAttempt

--------/奸淫奸淫奸淫奸淫奸淫

--------删除测试触发器和记录表

--------3w@live.cn

--------奸淫奸淫奸淫奸淫奸淫奸淫*/

----drop TRIGGER [db_trg_RestrictINDEXChanges]

----ON DATABASE

----go

----drop table dbo.ChangeAttempt

----go

您可能还会对下面的文章感兴趣: