SQL2005以上版本数据库级触发器的应用

本文介绍SQL Server中数据库级触发器的应用实例,包括记录数据库结构变化、禁止增删改表结构与存储过程等操作,以及如何管理和维护这些触发器。

原帖:http://blog.youkuaiyun.com/htl258/archive/2010/03/29/5430315.aspx

 

--SQL2005 以上版本数据库级触发器的应用

 

 

--1. 记录数据库结构的所有变化

CREATE TABLE [dbo] . [tblAuditLog] (

  [ID] [int] IDENTITY ( 1, 1) NOT NULL,

  [Command] [nvarchar] ( 1000)   NULL,

  [PostTime] [nvarchar] ( 24)   NULL,

  [HostName] [nvarchar] ( 100)   NULL,

  [LoginName] [nvarchar] ( 50)   NULL,

  [CreateTime] [datetime] NOT NULL CONSTRAINT [DF_AuditLog_CreateTime]   DEFAULT ( getdate ())

) ON [PRIMARY]

GO

CREATE TRIGGER Audit ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

    DECLARE   @data xml

    DECLARE   @cmd NVARCHAR ( 1000)

    DECLARE   @posttime NVARCHAR ( 24)

    DECLARE   @spid NVARCHAR ( 6)

    DECLARE   @loginname NVARCHAR ( 100)

    DECLARE   @hostname NVARCHAR ( 100)

    SET @data = EVENTDATA ()

    SET @cmd = @data . value ( '(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]' , 'NVARCHAR(1000)' )

    SET @cmd = LTRIM ( RTRIM ( REPLACE ( @cmd , '' , '' )))

    SET @posttime = @data . value ( '(/EVENT_INSTANCE/PostTime)[1]' , 'NVARCHAR(24)' )

    SET @spid = @data . value ( '(/EVENT_INSTANCE/SPID)[1]' , 'nvarchar(6)' )

    SET @loginname = @data . value ( '(/EVENT_INSTANCE/LoginName)[1]' , 'NVARCHAR(100)' )

    SET @hostname = HOST_NAME ()

    INSERT INTO dbo . tblAuditLog ( Command , PostTime , HostName , LoginName )

    VALUES ( @cmd , @posttime , @hostname , @loginname )

GO

 

--2. 禁止在数据库上增删改表结构、存储过程、触发器与函数

CREATE DROP TRIGGER STOP_DDL_on_Table_and_PROC    

ON DATABASE   

FOR CREATE_TABLE , DROP_TABLE , ALTER_TABLE ,

    CREATE_PROCEDURE , ALTER_PROCEDURE , DROP_PROCEDURE ,

    CREATE_TRIGGER , ALTER_TRIGGER , DROP_TRIGGER ,

    CREATE_FUNCTION , ALTER_FUNCTION , DROP_FUNCTION    

AS  

     SELECT EVENTDATA (). value ( '(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]' , 'nvarchar(max)' )  

     PRINT ' 不允许创建、修改、删除表、存储过程、触发器和函数! '   

     ROLLBACK ;

GO

--3. 禁止在服务器上增删改数据库

CREATE TRIGGER STOP_DDL_on_Table_and_PROC ON ALL SERVER

FOR CREATE_DATABASE , ALTER_DATABASE , DROP_DATABASE    

AS    

    PRINT ' 不允许创建、修改、删除数据库 '   

    ROLLBACK ;

GO

--4. 禁用、启用、删除库级触发器

-- 禁用触发器

DISABLE TRIGGER  库级触发器名 ON DATABASE

-- 启用触发器

ENABLE TRIGGER 库级触发器名 ON DATABASE

-- 删除触发器

DROP TRIGGER 库级触发器名 ON DATABASE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值