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

时间:2015-02-16 14:31:37

标签: sql-server sql-server-2012 linked-server

我面临一个奇怪的问题。我在ServerB上有一个用于ServerA的链接服务器

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

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

我收到错误

  

对象'SpName',数据库'Db',架构'dbo'上的EXECUTE权限被拒绝。

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

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

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

链接服务器安全性的屏幕截图

enter image description here

链接服务器目录

enter image description here

1 个答案:

答案 0 :(得分:3)

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

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