无法从链接服务器调用存储过程

Unable to call stored procedure from linked server

我遇到了一个奇怪的问题。我在 ServerB 上有一个用于 ServerA

的链接服务器

现在,当我从 ServerB 调用存储过程时,例如

EXEC [ServerA].[Db].[dbo].[SpName] @Param1 @param2 

我收到错误

The EXECUTE permission was denied on the object 'SpName', database 'Db', schema 'dbo'.

但是现在当我执行下面的查询时,它返回了我结果:

SELECT * 
FROM [ServerA].[Db].[dbo].[tblName]

我不知道为什么我无法从 ServerB 执行存储过程。我在两个服务器上都是Db_Owner

链接服务器安全截图

链接服务器目录

如果 linked 服务器查询失败,要检查的内容是(按概率的粗略顺序):

  • 尝试在 linked 服务器上本地登录以直接测试访问。如果您没有本地访问权限,显然您也无法通过 link 访问它。
  • 验证访问 linked 服务器时使用的正确凭据,而不是您不期望的其他用户。您可以使用 EXEC ('SELECT USER_NAME(), SUSER_NAME()') AT [Server] 进行检查;如果用户名不是您所期望的,请检查您的 linked 服务器定义以获取正确的登录映射。如果您 根本 无法访问服务器(任何查询失败),则说明您遇到了其他问题(例如,如果您使用集成身份验证,则存在 Kerberos 身份验证问题)。
  • 执行完整性检查以确保您正在使用 EXEC ('SELECT @@SERVERNAME') AT [Server] 访问正确的服务器。 linked 服务器的网络名称可以使用 sp_setnetname 更改,因此您用来访问服务器的名称不一定是机器名称。
  • 如果所有其他方法都失败了,删除并重新创建 linked 服务器定义始终是一个选项,但显然这可能会中断生产工作。