我正在使用 SQL Server 2016
我有一个使用执行的基本存储过程,因为我想运行它,但是当我尝试时它会出现这个错误(名称已被匿名):
消息 15404,级别 16,状态 19,过程 usp_executeastest,第 0 行 [批处理开始第 2 行]
无法获取有关 Windows NT 组/用户“MyCompany\A.Smith”的信息,错误代码 0x54b。
这是我的存储过程:
CREATE PROCEDURE [dbo].[usp_executeastest]
WITH EXECUTE AS 'dbo'
AS
BEGIN
SELECT * FROM [dbo].[TestTable1]
END
现在数据库用户 'dbo' 被映射到登录名 'MyCompany\A.Smith',所以这就解释了为什么错误消息提到了 MyCompany\A.Smith。
我尝试通过以各种用户身份登录来运行此过程,包括以映射到 dbo 用户的“MyCompany\A.Smith”身份登录,并且每次都会出现相同的错误消息。
那么为什么任何用户都不能运行这个存储过程呢?
如果你放dbo,它将查看数据库的 dbowner ,在你的情况下(我猜)'MyCompany\A.Smith'
确保要在execute as子句中使用的用户是sys.database_principals或sys.server_principals的一部分。
如果没有,您可以通过更改您使用的数据库的所有者来解决此问题。
首先,检查当前所有者:
如果是“MyCompany\A.Smith”,您的程序将不会运行。
因此,更改所有者,例如:
它会起作用。