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

Ian*_*oyd 5 sql-server linked-server

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

--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'
Run Code Online (Sandbox Code Playgroud)

它创造良好。但是任何查询链接服务器的尝试,例如:

SELECT * FROM uranium.Periodic.dbo.Users
Run Code Online (Sandbox Code Playgroud)

结果是

Msg 18456, Level 14, State 1, Line 1
Login failed for user 'BatteryStaple'.
Run Code Online (Sandbox Code Playgroud)

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

  • 登录: BatteryStaple
  • 密码: Horsecorrect

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

在此处输入图片说明

奖励阅读

注意:新的 SQL Server 2014 安装。每个现有的 SQL 2000、2005、2008、2008 R2 都可以与它们的uranium链接服务器通信。我确定这与 Microsoft 令人沮丧的默认策略中断有关。

Ian*_*oyd 5

问题是 SQL Server Management Studio 界面使用 OLEDB 提供程序创建链接服务器:

在此处输入图片说明

这相当于原始的 T-SQL:

--Create the link to server "uranium"
EXEC master.dbo.sp_addlinkedserver 
      @server = N'uranium', 
      @srvproduct=N'', @provider=N'SQLNCLI'
Run Code Online (Sandbox Code Playgroud)

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

--Create the link to SQL Server "uranium"
EXEC master.dbo.sp_addlinkedserver 
      @server = N'uranium', 
      @srvproduct=N'SQL Server'
Run Code Online (Sandbox Code Playgroud)

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

但它就在那里;解决了。