【发布时间】:2015-09-25 03:55:37
【问题描述】:
我在这里发生了一个非常奇怪的行为。
我们设置了一个表“Person”,其中包含一个将不同操作插入“Person_History”的触发器。据我所知,当我以自己的身份执行时,一切都很顺利。但是当我运行这个时:
EXECUTE AS USER = 'DOMAIN\User';
INSERT INTO "Person_History" VALUES (...);
REVERT;
第一次出现权限错误:
消息 297,第 16 级,状态 1,第 1 行
用户无权执行此操作。
我第二次运行它(在跟踪所有权限并发现应该允许这样做之后),我得到了这个:
消息 15406,第 16 级,状态 1,第 1 行
无法作为服务器主体执行,因为主体“DOMAIN\User”不存在,无法模拟此类主体,或者您没有权限。
应该注意的是,第一个错误是用户看到并报告的,我希望在第一次运行语句后行为不会改变。
那么我可能在这里遗漏了什么?我以前从未见过这种行为。
更新: 原来插入不是问题,问题是从 sys.dm_tran_current_transaction 获取事务 ID。当语句失败时(由于缺少 VIEW SERVER STATE 权限),revert 从未运行,并且用户没有被授予模拟权限,因此消息发生了变化 - 我们仍然以其他用户的身份执行。
【问题讨论】:
标签: sql-server permissions sql-server-2012 impersonation