2011-08-30 41 views
2

有一個安全觸發器,阻止所有SQL DDL事件(ALTER/DROP/CREATE等)在生產數據庫實例。消防觸發

對於部署你會做DISABLE TRIGGER,然後完成時ENABLE TRIGGER

我想操作員通知(EXEC sp_notify_operator ...)當安全觸發有效/無效。它們看起來不是DDL events,我也不能在sys.triggers上添加UPDATE/DELETE觸發器。有任何想法嗎?

回答

1

既然你已經「受保護」,因此從DDL語句被執行說話,你可以添加另一個數據庫觸發器尋找調用的程序,通知操作員DDL事件。不過,您可能需要另一層管理 - 可能需要對通知進行排隊 - 以免它變得太垃圾。我可以設想變化正在推出,並收到100多封電子郵件通知......糟糕。

CREATE TRIGGER DatabaseDDLNotices 
ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS 
AS BEGIN 
    -- place something into a queue to be batched later 
END; 

在我看來,這也有保持通知邏輯和DDL預防邏輯分開的好的副作用。

+0

是啊,這是一個有趣的想法。我猜你不能在'{EN,DIS} ABLE TRIGGER'上放置觸發器的事實必須是設計 - 否則你可能會讓SQL服務器進入一個你不能離開的非常骯髒的狀態,因爲觸發器會炸燬所有的東西你確實包括嘗試修復觸發器。 – Serguei

+0

沒有與此解決方案在2008年http://connect.microsoft.com/SQLServer/feedback/details/509242/fire-a-ddl-trigger-when-the-new-syntax-disable-trigger-is-問題執行 – 2012-07-10 16:34:44