【问题标题】:SQL Server 2012 denies a granted permission, then can't resolve usernameSQL Server 2012 拒绝授予的权限,然后无法解析用户名
【发布时间】: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


    【解决方案1】:

    您和该用户之间的授权显然存在差异。您需要仔细检查完整列表(包括角色)。

    冒充另一个用户也由授权处理。运行此程序以查看您的赠款是什么...

    select * from sys.server_principals
    

    【讨论】:

      【解决方案2】:

      事实证明插入不是问题,它是从 sys.dm_tran_current_transaction 获取事务 ID 是问题(未发布触发代码 - 道歉)。当语句失败时(由于缺少 VIEW SERVER STATE 权限),revert 从未运行,并且用户没有被授予模拟权限,因此消息发生了变化 - 我们仍然以其他用户的身份执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-29
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 2016-03-16
        • 2011-10-17
        相关资源
        最近更新 更多