日期:2014-05-18  浏览次数:20558 次

【DDL触发器】用DDL触发器记录权限变更 的两个问题
SQL code

CREATE TRIGGER dtr_dba_DB
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 




问题1: 对于创建表一级的DDL触发器 能否只在服务器上定义一次( ON ALL SERVER) 而不需要到每个库里增加这个触发器

问题2: 在每个库里定义的触发器 如何保证能对记录表数据有写入权限 ,WITH EXECUTE AS ‘sa' 需要将每个数据库里映射SA用户,太绕了

------解决方案--------------------
探讨

SQL code


CREATE TRIGGER tr_db
ON DATABASE
WITH EXECUTE AS 'sa'
FOR DDL_DATABASE_LEVEL_EVENTS
AS
....

--返回: 消息 15151,级别 16,状态 1,过程 tr_db,第 20 行
--无法对 用户 'sa' 执行 执行身份,因为它不存在,或者您没有所需的权限。



CRE……