【问题标题】:Fire trigger on DISABLE TRIGGERDISABLE TRIGGER 触发触发
【发布时间】:2011-08-30 18:34:47
【问题描述】:

有一个安全触发器可以阻止生产数据库实例上的所有 SQL DDL 事件(ALTER/DROP/CREATE 等)。

对于部署,您可以使用DISABLE TRIGGER,然后在完成后使用ENABLE TRIGGER

我希望在禁用/启用安全触发器时通知操作员 (EXEC sp_notify_operator ...)。它们似乎不是DDL events,我也无法在sys.triggers 上添加更新/删除触发器。有什么想法吗?

【问题讨论】:

    标签: sql-server triggers ddl-trigger


    【解决方案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 预防逻辑分开。

    【讨论】:

    • 是的,这是一个有趣的想法。我想您不能在{EN,DIS}ABLE TRIGGER 上设置触发器这一事实必须是设计使然 - 否则您可能会使 SQL 服务器进入您无法离开的非常讨厌的状态,因为触发器会破坏您所做的一切,包括尝试修复触发器。
    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多