利用Sql server 2005的資料庫觸發器開發的資料庫稽核追蹤系統
建立跟蹤的相關表
--觸發事件記錄表
CREATE TABLE [VER_EVENT](
[SN] bigint identity(1,1),
[LoginName] SYSNAME NULL,
[PostTime] [datetime] NULL,
[DatabaseName] SYSNAME NULL,
[EventType] SYSNAME NULL,
[ObjectType] SYSNAME NULL,
[ObjectName] SYSNAME NULL,
[CommandText] [nvarchar](max) NULL
) ON [PRIMARY]
GO
--版本控制表
CREATE TABLE [VER_CONTROL](
[SN] [bigint] IDENTITY(1,1) NOT NULL,
[DatabaseName] [sysname] NULL,
[ObjectType] [sysname] NULL,
[ObjectName] [sysname] NULL,
[Version] [int] NULL,
[SN_EVENT] [bigint] NULL
) ON [PRIMARY]
建立觸發器
/************************************************************************
-- 功 能:資料庫的物件版本跟蹤系統
-- 日 期:2008-10-09
-- 作 者:
-- 參 數:
-- 返 回 值:
-- 說 明:有兩個相關的表
************************************************************************/
--CREATE TRIGGER VERSION_CONTROL
ALTER TRIGGER [VERSION_CONTROL]
ON DATABASE
FOR
CREATE_TABLE,ALTER_TABLE,DROP_TABLE,
CREATE_PROCEDURE,ALTER_PROCEDURE,DROP_PROCEDURE,
CREATE_FUNCTION,ALTER_FUNCTION,DROP_FUNCTION
AS
BEGIN
SET NOCOUNT ON
DECLARE @ObjectName SYSNAME
DECLARE @EventType SYSNAME
DECLARE @DatabaseName SYSNAME
DECLARE @ObjectType SYSNAME
DECLARE @CommandText NVARCHAR(MAX)
DECLARE @Ver INT
DECLARE @SN INT
SET @Ver = NULL
SET @DatabaseName = EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','sysname')
SET @ObjectType = EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','sysname')
SET @ObjectName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','sysname')
SET @EventType = EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','sysname')
SET @CommandText = EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
INSERT INTO VER_EVENT([LoginName],[PostTime],[DatabaseName],[EventType],[ObjectType],[ObjectName],[CommandText])
SELECT
EVENTDATA().value('(/EVENT_INSTANCE/LoginName)[1]','sysname') as LoginName,
EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]','datetime') as PostTime,
@DatabaseName,@EventType,@ObjectType,@ObjectName,@CommandText
SET @SN = @@IDENTITY
SELECT @Ver = [Version]
FROM VER_CONTROL
WHERE [DatabaseName] = @DatabaseName AND [ObjectType] = @ObjectType AND [ObjectName] = @ObjectName
IF @EventType LIKE 'CREATE%' AND @ObjectName NOT LIKE 'T%'
BEGIN
IF @Ver IS NULL
INSERT INTO [VER_CONTROL]([DatabaseName],[ObjectType],[ObjectName],[Version],[SN_EVENT])
SELECT @DatabaseName,@ObjectType,@ObjectName,10001,0
ELSE
UPDATE VER_CONTROL
SET [Version] = @Ver + 10000,[SN_EVENT] = @SN
WHERE [DatabaseName] = @DatabaseName AND [ObjectType] = @ObjectType AND [ObjectName] = @ObjectName
END
IF @EventType LIKE 'ALTER%' AND @ObjectName NOT LIKE 'T%'
BEGIN
IF @Ver IS NULL
INSERT INTO [VER_CONTROL]([DatabaseName],[ObjectType],[ObjectName],[Version],[SN_EVENT])
SELECT @DatabaseName,@ObjectType,@ObjectName,10001,0
ELSE
UPDATE VER_CONTROL
SET [Version] = @Ver + 1,[SN_EVENT] = @SN
WHERE [DatabaseName] = @DatabaseName AND [ObjectType] = @ObjectType AND [ObjectName] = @ObjectName
END
IF @EventType LIKE 'DROP%' AND @ObjectName NOT LIKE 'T%'
BEGIN
IF @Ver IS NULL
INSERT INTO [VER_CONTROL]([DatabaseName],[ObjectType],[ObjectName],[Version],[SN_EVENT])
SELECT @DatabaseName,@ObjectType,@ObjectName,-10001,0
ELSE
UPDATE VER_CONTROL
SET [Version] = @Ver * (-1),[SN_EVENT] = @SN
WHERE [DatabaseName] = @DatabaseName AND [ObjectType] = @ObjectType AND [ObjectName] = @ObjectName
RETURN
END
原文:http://www.cnblogs.com/jinzhenshui/articles/1360236.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-598140/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql server 2005資料庫快照SQLServer資料庫
- 資料庫的觸發器的使用資料庫觸發器
- 利用Zipkin追蹤Mysql資料庫呼叫鏈MySql資料庫
- 如何建立和還原SQL Server 2005資料庫?SQLServer資料庫
- 如何將SQL Server 2000備份的資料庫檔案還原(升級)為SQL Server 2005或更高版本的資料庫?SQLServer資料庫
- 資料庫檢視,索引,觸發器資料庫索引觸發器
- SQL Server 資料庫開發中的十大問題VYSQLServer資料庫
- 資料庫映象 (SQL Server)資料庫SQLServer
- SQL Server資料庫安全SQLServer資料庫
- 搭建資料追蹤系統
- 利用SQL Server Management Studio(SSMS)複製資料庫SQLServerSSM資料庫
- 資料庫監視器(SQL Server Profilter)資料庫SQLServerFilter
- sql server 2005 資料修改的內部原理SQLServer
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- SQL Server統計資料庫中表大小SQLServer資料庫
- 還原sql server 2000資料庫的坑,不同版本資料庫SQLServer資料庫
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- SQL Server 2000/2005/2008刪除或壓縮資料庫日誌的方法SQLServer資料庫
- SQL SERVER資料庫datediff函式引發的效能問題SQLServer資料庫函式
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】sql server資料庫連線失效的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫學習】資料庫平臺:mysql,sql server資料庫MySqlServer
- Blazor使用sql server 資料庫BlazorSQLServer資料庫
- SQL Server資料庫巡檢SQLServer資料庫
- SQL Server收縮資料庫SQLServer資料庫
- sql server 資料庫收縮SQLServer資料庫
- SQL Server資料庫遷移SQLServer資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- 【資料庫系統】資料庫系統概論====第十三章 資料庫技術發展資料庫
- 資料庫資料恢復—附加資料庫錯誤823的SQL Server資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】SQL Server資料庫磁碟空間不足的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】透過資料頁恢復Sql Server資料庫資料的過程資料庫資料恢復SQLServer
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- SQL稽核 | 如何快速使用 SQLE 稽核各種型別的資料庫SQL型別資料庫
- SQL Server 跨資料庫查詢SQLServer資料庫
- 資料庫映象 (SQL Server)操作模式資料庫SQLServer模式
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復