我面临一个奇怪的问题。我在ServerB上有一个用于ServerA的链接服务器
现在,当我从ServerB调用存储过程时,如
EXEC [ServerA].[Db].[dbo].[SpName] @Param1 @param2
我收到错误
对象'SpName',数据库'Db',架构'dbo'上的EXECUTE权限被拒绝。
但是现在当我执行下面的查询时,它返回结果:
SELECT *
FROM [ServerA].[Db].[dbo].[tblName]
我不知道为什么我无法从ServerB执行存储过程。我在服务器上都是Db_Owner
。
链接服务器安全性的屏幕截图
链接服务器目录
答案 0 :(得分:3)
如果链接服务器查询失败,则要检查的内容(按概率的粗略顺序):
EXEC ('SELECT USER_NAME(), SUSER_NAME()') AT [Server]
进行检查;如果用户名不是您所期望的,请检查链接服务器定义以获取正确的登录映射。如果您无法访问服务器 (任何查询失败),您还有其他问题(例如,如果您使用集成身份验证,则会出现Kerberos身份验证问题)。EXEC ('SELECT @@SERVERNAME') AT [Server]
访问了正确的服务器。可以使用sp_setnetname
更改链接服务器的网络名称,因此用于访问服务器的名称不一定是计算机名称。