2014-05-05 67 views
0

我是觸發器的新手。我想知道如何編寫觸發器用於插入日誌記錄到一個名爲LogReportTable的表中,當任何更新時,插入或刪除數據庫裏的任何表。 (此要求的目的是爲了防止未經授權的修改數據庫) 請幫忙。謝謝。 :)SQL觸發器上的任何表修改

+1

你的SQL Server可能的企業版? – dean

+1

它會審計不安全。只需在每張桌子上放一個觸發器。無論如何,我認爲你需要硬編碼表名。這將得到用戶轉換(nvarchar(100),SYSTEM_USER)。 – Paparazzi

+0

@dean:我正在使用SQL Server 2008 R2 – tishantha

回答

2

您將需要爲此目的創建一個After插入觸發器,但您無法在數據庫級別創建此觸發器。

由於此觸發器將響應DML操作(插入),它將是DML插入觸發器後,您需要爲每個要爲其記錄信息的表創建觸發器。 它是具有DATABASE作用域而不是DML觸發器的DDL觸發器。

您應該避免使用觸發器只要有可能,因爲它們是一種無聲的殺手:S

如果數據庫審計是我覺得你最好還是考慮到Change Data Capture的唯一目的。

OR Change Tracking(由Dean先生決定),如果出現任何錯誤,你可以告他:)

+0

「沉默殺手」是什麼意思,Tiggers有什麼不利之處?我有外部數據修改問題。有人修改了數據,但我無法捕捉到未經授權的入侵者。但是如果我可以做一些我在上述問題中提出的問題,那麼我可以跟蹤用戶。請幫助.. :( – tishantha

+0

作者:沉默殺手我的意思是,觸發器響應行動而不是我們直接控制的行爲,一旦你創建了觸發器的東西,你可能會忘記你在該表上有一個觸發器,但後來你做了一些與觸發器定義衝突的事情,如果在你做正確的事情時可能會感到困惑,但是某些事情會爲你做些事情(觸發器觸發),所以有時候可能會有點痛, –

+0

@ M.Ali但是CDC不會幫助OP「發現未經授權的入侵者」 – dean