这更像是一个哲学问题,而不是一个程序问题。我的任务是为MS SQL 2014服务器实现各种各样的安全增强功能。我有一个简单的触发器如下....
CREATE TRIGGER send_db_email_notification
ON ALL SERVER
AFTER CREATE_DATABASE,
ALTER_DATABASE,
DROP_DATABASE,
CREATE_FUNCTION,
ALTER_FUNCTION,
CREATE_TRIGGER,
ALTER_TRIGGER,
DROP_TRIGGER
AS
-- do stuff to send mail
ENABLE TRIGGER send_db_email_notification ON ALL SERVER
触发器按预期工作。当其中一个事件被触发时,我会收到一封电子邮件。好吧,无论何时创建,更改或删除数据库,或创建或更改功能,它都会执行。问题是drop_trigger
事件。
如果有人进入并删除了相同的触发器,则它无法执行自身以通知它已被删除,因为它已不存在。换句话说,触发器不能发出自己的删除信号。至少这是我认为正在发生的事情。
测试触发器删除测试的触发器本身是否已被删除的最佳方法是什么?我真的应该创建第二个触发器来测试触发删除,这样如果任何一个被删除,另一个仍然可以触发吗?这似乎相当尴尬和笨重,更不用说如果删除其他一些触发器,我会得到两个通知,除非我编写第二个触发器专门只查找第一个删除。
有没有更优雅的方式来处理这种情况?