【发布时间】:2013-11-10 21:42:51
【问题描述】:
我需要审核对数据库所做的 DDL 更改。这些更改需要稍后在许多其他数据库中复制。我发现 here 可以启用 DDL 触发器来跟踪 DDL 活动,这对 create table 和 drop table 操作非常有用,因为触发器获取了执行的 T-SQL,我可以愉快地存储它某处并稍后在其他服务器上执行它。
我遇到的问题是 alter 操作:当从 Management Studio 更改列名时,生成的事件不包含有关列的任何信息!它只是说表被锁定了...更重要的是,如果同时更改了许多列(例如,列 foo => oof,还有列 bar => rab) 事件只触发一次!
我可怜的人的解决方案是有一个表来存储要在更改操作之前和之后更改的表的结构。这样,我可以比较这两种结构并找出哪一列发生了什么。
但在我这样做之前,我想知道是否可以使用 SQL Server 中我忽略的其他一些功能来实现它,或者也许有更好的方法。你会怎么做?
【问题讨论】:
-
"technet.microsoft.com/en-us/library/bb522542(v=sql.105).aspx" 在这里您将找到您可以跟踪的所有 ddl 事件。如果 SSMS 发生更改,则无法在 DDL 触发器中进行控制。而是编写服务器级触发器以仅允许使用 t-sql 命令进行更改。
-
链接好像坏了...而且我恐怕不能禁止用户从 SSMS 修改表...
标签: sql sql-server ddl audit ddl-trigger