与列出特定事件类型相比,将触发器用于DDL_DATABASE_LEVEL_EVENTS是否存在任何风险?

时间:2019-07-01 18:27:12

标签: sql sql-server tsql triggers ddl

我有一个DDL触发器,用于将数据库模式更改记录到表中以进行审核。我注意到我遗漏了一些更改(例如创建类型-CREATE_TYPE),需要对其进行更新。

我的理解是DDL事件总是由人触发。真的吗?这样的触发器是否有可能导致查询失败?

此触发器的定义如下:

ALTER TRIGGER [name_of_trigger]
ON DATABASE
FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE, CREATE_INDEX, ALTER_INDEX, DROP_INDEX, ...

像这样使用全部使用DDL_DATABASE_LEVEL_EVENTS是否有任何风险?

ALTER TRIGGER [name_of_trigger]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS

或者指定我知道需要的所有类型是更安全还是更好的做法?

1 个答案:

答案 0 :(得分:0)

我正在使用这样的触发器(用于DDL_DATABASE_LEVEL_EVENTS),并且我专门排除了事件类型UPDATE_STATISTICS。您可能还希望避免使用ALTER INDEX ... REBUILDALTER INDEX ... REORGANIZE