我需要一种方法来审核有人在我们的数据库中尝试启用或禁用触发器的时间。 DDL触发器替代方案很有效,但仅限于用户使用
的条件ALTER TABLE <tableName> ENABLE TRIGGER <triggerName>
OR
ALTER TABLE <tableName> DISABLE TRIGGER <triggerName>
语句。根据我的确定,如果用户执行以下绕过ALTER命令的语句,则DDL方法无效:
DISABLE TRIGGER <triggerName> ON <tableName>
ENABLE TRIGGER <triggerName> ON <tableName>
我有几个关于捕获这些事件的想法,但没有一个能够奏效。其中一个是如果我可以访问sys.triggers视图下的表,我可以在该表上放置一个insert / update触发器并过滤触发器名称以获取审计;但我怀疑,即使有可能,它也可能导致无限递归。
这里有没有人对此问题的替代解决方案有任何可能的建议?我不明白为什么MS会允许增强版本的语句来逃避审计范围。也就是说,从最简单的方法审计;使用SQL profiler似乎是不必要的开销。
答案 0 :(得分:5)
我首先会通过权限来解决这个问题。除了少数dbas之外,没有人应该对prod具有alter table权限,因此不能使用enable或disable trigger。如果应用程序正在使用它,那应该停止它。没有任何借口可以让任何用户改变表格。如果你想这样做,你可能会有一个设计缺陷。如果你有人实际禁用触发器,你肯定有一个设计缺陷。在代码审查期间,任何带有禁用触发器的代码都应该是一个巨大的红旗。在应用程序代码中禁用触发器应该是不可接受的。这是应该由具有相关知识的dbas完成的事情。如果您正在编写应用程序代码并且似乎需要禁用触发器以使代码工作,那么您的代码不正确或触发器需要重写,禁用触发器应该只在极少数情况下发生。