误区 #4: DDL触发器(SQL Server 2005之后被引入)就是INSTEAD OF触发器

这是错误的

DDL触发器的实现原理其实就是一个AFTER触发器。这个意思是先发生DDL操作,然后触发器再捕捉操作(当然如果你在触发器内写了Rollback,则也可能回滚)。

存在Rollback也意味着这个触发器并不像你想象的那么轻量,来看下面的例子:

ALTER TABLE MyBigTable ADD MyNewNonNullColumn VARCHAR (20) DEFAULT 'Paul'

如果存在一个defined for ALTER_TABLE事件的DDL触发器,或是一个更宽泛的事件比如DDL_TABLE_EVENTS。上面那个DDL代码将会对表中每一行数据加进新列,之后触发触发器操作。如果你的触发器中存在回滚来阻止DDL操作发生,那么这个代价可不小(不信的话你自己看看这么做后产生的日志)。

当然更好的办法是对ALTER设置GRANT或是DENY权限,或是仅仅允许通过你创建的存储过程进行DDL操作。

但不管怎么样,虽然DDL触发器可以达到禁止DDL的操作的目的,但代价昂贵。而DDL触发器的好处是允许记录某些人做了某些修改表之类的操作,所以我并不是说不允许DDL触发器,而是要小心使用。

Kimberly有一篇非常好的关于DDL触发器的博文:"EXECUTE AS" and an important update your DDL Triggers (for auditing or prevention)”。

更多相关文章

  1. Android初始化语言 (init.*.rc、init.conf文件格式)
  2. Android初始化语言 (init.*.rc、init.conf文件格式)
  3. 如何写Android(安卓)init.rc
  4. Android(安卓)监听短信2种方式:Broadcast和ContentObserver
  5. Android(安卓)初始化语言(Android(安卓)init Language)
  6. Android(安卓)监听短信2种方式:Broadcast和ContentObserver
  7. android init language
  8. Android(安卓)init language (安卓初始化语言)
  9. Android(安卓)init language (安卓初始化语言)

随机推荐

  1. Python分析5000+抖音大V,发现大家都喜欢这
  2. 原来炫酷的可视化地图,用Python就能搞定!
  3. 太骚了!Python模型完美切换SAS,还能这么玩
  4. pandas100个骚操作:变量类型自动转换
  5. Android(安卓)View中的onMeasure()方法详
  6. 原创丨带你体验一下云上编码的感觉
  7. Cetos 7 配置LAMP的解决办法
  8. 超赞,20个炫酷的数据可视化大屏(含源码)
  9. 安利 5 个拍案叫绝的 Matplotlib 骚操作!
  10. C语言学习心得(七)