查询链接服务器时登录失败

Login failed when querying linked server

我正在尝试在 SQL 服务器中创建链接服务器:

--Create the link to server "uranium"
EXEC master.dbo.sp_addlinkedserver 
      @server = N'uranium', 
      @srvproduct=N'', 
      @provider=N'SQLNCLI'

--Add the catch-all login with SQL Server authentication
EXEC master.dbo.sp_addlinkedsrvlogin 
      @rmtsrvname=N'uranium',
      @useself=N'False',
      @locallogin=NULL,
      @rmtuser=N'BatteryStaple',
      @rmtpassword='Horsecorrect'

而且效果很好。但是任何查询链接服务器的尝试,例如:

SELECT * FROM uranium.Periodic.dbo.Users

结果

Msg 18456, Level 14, State 1, Line 1
Login failed for user 'BatteryStaple'.

除非我知道凭据是正确的:

因为我可以在使用 SQL Server Management Studio 或任何其他能够连接到数据库的技术直接连接时登录。

红利阅读

注意:新 SQL Server 2014 安装。每个现有 SQL 2000、2005、2008、2008 R2 都可以与其 uranium 链接服务器通信。我确定这与微软令人沮丧的 broken by default policy.

有关

问题是 SQL Server Management Studio 界面使用 OLEDB Provider 创建了链接服务器:

这个相当于原来的T-SQL:

--Create the link to server "uranium"
EXEC master.dbo.sp_addlinkedserver 
      @server = N'uranium', 
      @srvproduct=N'', @provider=N'SQLNCLI'

修复方法是将链接服务器创建为 SQL Server:

--Create the link to SQL Server "uranium"
EXEC master.dbo.sp_addlinkedserver 
      @server = N'uranium', 
      @srvproduct=N'SQL Server'

应该没关系。可能是 Microsoft SQL Server 2014 12.0.4213.0 中的回归。可能会在服务包中修复 - 如果有的话。

但是它就在那里;解决了。​​

旧 post,但可能仍然有用。在我的例子中,只设置了 Windows 身份验证。为链接服务器上的 Windows 和 SQL 服务器设置身份验证修复了它。

我的问题是:由于我试图通过 servername\instancename 连接到实例 - 我的所有实例都在端口 1433 上 运行 所以“添加链接服务器”实际上连接到默认实例 - 登录失败。

  1. 转到 SQL 配置管理器
  2. 单击 [instancename] 的协议
  3. 打开 TCP/IP 属性并确保它已启用并转到“IP 地址”选项卡并更改您用于链接服务器的所有 IP 上的端口 IP 是 (a) 活动的并且 (b ) 使用一个唯一的端口——比如 14333(这很重要,因为我的 VPN IP 不是“活动的”)。
  4. 如果您的机器 运行 两者都是
  5. ,则您可能必须对 32 位和 64 位都执行此操作
  6. 不要忘记停止和启动实例

这是解决方法