国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

用觸發器生成數據庫表的數據操作日志
2008-07-16   天極網

作為一名數據庫管理員,你盡力以各部門熟知的不同格式,向各部門提供它們所需要的數據。你通常將MS Excel格式的數據遞交到會計部門,或將數據以HTML報表的形式呈現給普通用戶。你們的系統安全管理員們則習慣于用文本閱讀器或者事件查看器來查看日志。本文將介紹如何使用觸發器,把DML(數據操作語言)對數據庫中的特定數據表的改動記錄下來。注:下列例子為Insert型觸發器,不過改成Delete/Update型的觸發器也很容易。

操作步驟首先讓我們在Northwind數據庫內創建一個簡單表。

create table tablefortrigger
(
 track int identity(1,1) primary key,
 Lastname varchar(25),
 Firstname varchar(25)
)

創建好這個數據表后,添加一個標準message到master數據庫的sysmessages數據表中。注意,我所添加的是一個參變量,用以接受一個字符值,它將被輸出顯示給管理員們。通過設置@_with_log參數為true,我們包管相關結果被發送到事件日志。

sp_addmessage 50005, 10, '%s', @with_log = true

現在我們創建這條用有意義的信息填充的消息。下面的信息將填充這條消息,并且記錄到文件中:

·操作的類型(插入)。

·受到影響的數據表。

·改動的日期與時間。

被該語句插入的全部字段。 下面的這個觸發器用預定義值(1~3個字符)創建一個字符串,該預定義值位于inserted數據表中。(這個inserted數據表駐留在內存中,它容納被插入到觸發器所在數據表的記錄行)。觸發器連接這些值并放到一個@msg變量。然后這個變量被傳送到raiserror函數,該函數將它寫到事件日志中。

Create trigger TestTrigger on 
tablefortrigger
for insert
as
--聲明儲存消息的變量
Declare @Msg varchar(8000)
--將"操作/表名/日期時間/插入字段"賦與消息
set @Msg = 'Inserted | tablefortrigger | ' + convert(varchar(20), getdate()) + ' | '
+(select convert(varchar(5), track)
+ ', ' + lastname + ', ' + firstname
from inserted)
--產生錯誤發送給事件查看器。
raiserror( 50005, 10, 1, @Msg)

運行以下語句對觸發器進行測試,然后查看事件日志:
Insert into tablefortrigger(lastname, firstname) 
Values('Doe', 'John')

如果你打開事件日志,你應該看到以下消息:

(圖1)

既然我們已經有辦法寫入事件日志了,那么讓我們修改一下觸發器,將數據寫到一個文本文件中。這次改動還須添加另一個變量@CmdString,以及使用擴展儲存過程xp_cmdshell。

因為我們要寫入文件系統,安全權限開始有影響了。所以,執行插入操作的用戶必須具備該文本文件的讀寫權限。因此,設計一個C/S結構的應用程序供多用戶運行,或許不是一個可行的解決方案。更合理的方案是,設計一個三層應用程序,由你的中間層組件對單用戶數據庫進行調用。在后一個方案中,對那個文本文件的權限管理其實比管理一個用戶還容易。

Alter trigger TestTrigger on 
tablefortrigger
for insert
as
Declare @Msg varchar(1000)
--儲存將由xp_cmdshell執行的命令
Declare @CmdString varchar (2000)
set @_msg = ' insert | tablefortrigger | ' + convert ( varchar ( 20 ) , getdate ( ) ) + ' | ' + ( select convert ( varchar ( 5 ) , track ) + ' , ' + lastname + ' , ' + firstname from insert ) -
[99%]set @Msg = 'Inserted | tablefortrigger | ' + convert(varchar(20), getdate()) + ' | ' +(select convert(varchar(5), track) + ', ' + lastname + ', ' + firstname from inserted)
--產生錯誤發送給事件查看器。
raiserror( 50005, 10, 1, @Msg)
set @CmdString = 'echo ' + @Msg + ' >> C:logtest.log'
--寫到文本文件
exec master.dbo.xp_cmdshell @CmdString

讓我們對它進行測試,先運行前面的插入語句,然后打開C:logtest.log文件查看結果:

Insert into tablefortrigger(lastname, firstname) Values('Doe', 'John')

問題解決了,對不對?哦,還沒完全解決。發生多次重復插入的事件是什么原因?在這個例子中,你必須分別地處理每條記錄。為了達到這個目的,我們必須用一個會帶來麻煩的游標來訪問"隱蔽面"。在執行以前,我必須預先給予警告。你應當了解的是,當這個應用程序進行大規模地記錄插入、更新或刪除時要當心,因為它可能會耗費大量的內存。

像你從下面看到的一樣,這次我們在前面那個例子的基礎上稍加調整,引入了一個游標,對該插入表的全部記錄進行循環讀取。每條記錄分別插入一條線條,將各個事件區分開來。

ALTER trigger TestTrigger on tablefortrigger 
for insert
as
Declare @Msg varchar(1000)
Declare @CmdString varchar (1000)
Declare GetinsertedCursor cursor for
Select 'Inserted | tablefortrigger | ' + convert(varchar(20), getdate()) + ' | '
+ convert(varchar(5), track)
+ ', ' + lastname + ', ' + firstname
from inserted

open GetinsertedCursor
Fetch Next from GetinsertedCursor
into @Msg

while @@fetch_status = 0
Begin
 raiserror( 50005, 10, 1, @Msg)
 Fetch Next from GetinsertedCursor
 into @Msg
 set @CmdString = 'echo ' + @Msg + ' >> C:logtest.log'
 exec master.dbo.xp_cmdshell @CmdString
End
close Getinsertedcursor
deallocate GetInsertedCursor


現在讓我們執行重復多次插入測試:
Insert into tablefortrigger(lastname, firstname) 
Select lastname, firstname from employees

結論

在繼續完成之前,有些人認為必須考慮性能與安全問題。你將看到寫入文本文件的開銷,而對于一個每分鐘處理5000項事務的數據庫來說,這樣大的開銷也許不可接受。由于xp_cmdshell是在SQL外操作的,寫入到文件的錯誤不會回滾事務。倘若入侵者使用一個隱蔽的途徑來改變你的數據,這個事件不會被登記到那個文本文件中。不過事件日志將記錄該次DML改動。作為一次最好的實踐,各事件的編號應該被用于對照日志文件的各行記錄,以便發現所有的差異。

有很多種方法可以達到本文目標,上述腳本也可以有許多的變化。我希望你能接受這個腳本,然后作出改進并提出建議,使它更有效率。

熱詞搜索:

上一篇:分離數據庫的日志和數據的步驟
下一篇:OSPF路由協議配置指南

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
精品卡一卡二卡三卡四在线| 精品一区二区av| 国产精品久久久久久久午夜片| 欧美电影免费观看高清完整版在线 | 日韩国产精品久久久久久亚洲| 亚洲色图欧美在线| ...xxx性欧美| 亚洲靠逼com| 一区二区三区中文字幕电影| 亚洲人快播电影网| 亚洲黄色av一区| 亚洲狠狠爱一区二区三区| 亚洲国产视频一区| 天天射综合影视| 美女尤物国产一区| 紧缚奴在线一区二区三区| 韩国在线一区二区| 国产乱码精品1区2区3区| 国产精品影视在线| 成人av资源在线| 在线亚洲高清视频| 欧美精品在线观看播放| 欧美成人综合网站| 国产农村妇女精品| 亚洲欧美福利一区二区| 亚洲一区二区欧美| 日韩成人精品视频| 国产很黄免费观看久久| 99久久综合国产精品| 色婷婷久久久综合中文字幕 | 欧美人狂配大交3d怪物一区| 7777精品伊人久久久大香线蕉最新版 | 欧美妇女性影城| 精品国产免费一区二区三区香蕉| 国产精品系列在线| 亚洲永久免费av| 毛片一区二区三区| 国产精品18久久久久久久久 | 91精品国产aⅴ一区二区| 精品福利视频一区二区三区| 国产精品你懂的在线欣赏| 亚洲欧美视频一区| 久久精品国产一区二区三区免费看| 国产精品小仙女| 91国偷自产一区二区三区观看| 91精品国产91久久久久久一区二区| 久久夜色精品国产欧美乱极品| ㊣最新国产の精品bt伙计久久| 午夜激情综合网| 91麻豆国产福利精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日韩视频免费观看高清完整版在线观看| 久久精品日韩一区二区三区| 一区二区三区丝袜| 国产成人综合亚洲91猫咪| 欧美自拍偷拍午夜视频| 久久这里只有精品首页| 亚洲一区二区在线免费看| 国产一区二区日韩精品| 欧美性videosxxxxx| 中文字幕免费观看一区| 三级久久三级久久久| 9l国产精品久久久久麻豆| 欧美va日韩va| 午夜精品一区二区三区电影天堂| 国产91色综合久久免费分享| 制服丝袜av成人在线看| 亚洲视频电影在线| 国产成人免费在线观看不卡| 91精品国产91久久久久久最新毛片| 亚洲色图另类专区| 成人中文字幕在线| 日韩欧美一级在线播放| 亚洲黄色在线视频| 成人性视频网站| 日韩欧美久久久| 午夜精品久久久久久久久久 | 91精品婷婷国产综合久久| 中文字幕中文字幕一区| 国产麻豆欧美日韩一区| 日韩三级电影网址| 五月天激情综合| 日本高清免费不卡视频| 国产精品色眯眯| 国产一区二区h| 2欧美一区二区三区在线观看视频| 亚洲成人激情社区| 欧美亚男人的天堂| 亚洲免费观看视频| 99在线视频精品| 国产精品亲子伦对白| 国产很黄免费观看久久| 国产亚洲短视频| 国产综合久久久久影院| 日韩写真欧美这视频| 日韩电影在线观看电影| 欧美年轻男男videosbes| 亚洲一区在线观看视频| 在线日韩av片| 亚洲制服丝袜一区| 欧美亚洲综合在线| 夜夜精品视频一区二区| 欧美综合在线视频| 亚洲最新视频在线观看| 欧美自拍偷拍一区| 亚洲午夜精品在线| 欧美久久婷婷综合色| 五月综合激情婷婷六月色窝| 欧美日韩精品一区二区三区四区| 亚洲欧美日韩综合aⅴ视频| 99精品黄色片免费大全| 中文字幕一区二区三区视频| 91亚洲精品乱码久久久久久蜜桃 | 欧美a一区二区| 日韩亚洲欧美综合| 国内久久精品视频| 久久久777精品电影网影网| 国产精品中文字幕一区二区三区| 久久一区二区视频| www.亚洲在线| 亚洲天堂久久久久久久| 欧美亚洲国产bt| 麻豆精品一区二区| 久久综合狠狠综合久久激情| 国产成人亚洲综合色影视| 国产精品视频看| 在线观看国产91| 免费一级欧美片在线观看| 久久久美女艺术照精彩视频福利播放| 国产一区欧美日韩| 国产日产欧产精品推荐色 | 在线观看欧美黄色| 日韩国产精品久久久| 久久―日本道色综合久久| jvid福利写真一区二区三区| 一区二区免费看| 日韩一区二区三区在线视频| 国产99精品国产| 亚洲国产日韩综合久久精品| 日韩一卡二卡三卡国产欧美| 国产成a人亚洲精| 亚洲午夜免费电影| 日韩视频免费观看高清完整版在线观看 | 三级欧美在线一区| 久久久精品国产99久久精品芒果| a美女胸又www黄视频久久| 亚洲高清一区二区三区| 久久久亚洲国产美女国产盗摄| 99这里只有精品| 男人的j进女人的j一区| 中文字幕乱码久久午夜不卡 | 色综合久久中文字幕综合网| 日韩和欧美一区二区| 国产精品久久久久久久久动漫| 欧美色综合网站| 国产成人午夜精品影院观看视频| 亚洲一区二区三区视频在线 | 亚州成人在线电影| 国产亚洲精品精华液| 精品视频999| 国产传媒久久文化传媒| 天堂一区二区在线| 国产精品久久久久久久久久免费看 | 亚洲免费三区一区二区| 日韩一区二区三免费高清| 9人人澡人人爽人人精品| 美国欧美日韩国产在线播放| 一区二区三区 在线观看视频 | 麻豆精品视频在线观看免费| 综合中文字幕亚洲| ww亚洲ww在线观看国产| 欧美三级中文字幕在线观看| 国产成人av电影在线| 美腿丝袜亚洲色图| 一区二区三区不卡视频| 亚洲国产激情av| www激情久久| 日韩欧美成人激情| 精品视频在线免费看| 91蜜桃在线免费视频| 国产激情一区二区三区| 日韩电影在线观看电影| 亚洲一区在线观看网站| 亚洲欧洲美洲综合色网| 国产午夜精品理论片a级大结局| 欧美精品久久99| 在线观看日韩电影| 91美女片黄在线| 成人免费福利片| 国产精品99久久久久久久vr| 日本不卡视频在线观看| 亚洲香肠在线观看| 一区二区免费看| 夜夜夜精品看看| 亚洲综合一区二区| 亚洲免费观看在线视频| 亚洲伦在线观看| 自拍偷在线精品自拍偷无码专区 | 国产精品日韩精品欧美在线| 精品国产99国产精品|