添加链接的SQL服务器时遇到问题

Her*_*ill 9 sql-server linked-server

我正在尝试从远程SQL Server中提取数据.我可以使用SQL身份验证访问远程服务器; 我没有运气使用与sp_addlinkedserver相同的凭据.

我正在尝试这样的事情:

Exec sp_dropserver 'Remote', 'droplogins'
go

EXEC sp_addlinkedserver   
   @server='Remote', 
   @srvproduct='',
   @provider='SQLNCLI', 
   @datasrc='0.0.0.0'

EXEC sp_addlinkedsrvlogin
    @useself='FALSE',
    @rmtsrvname='Remote',
    @rmtuser='User',
    @rmtpassword='Secret'

Select Top 10 * from Remote.DatabaseName.dbo.TableName
Run Code Online (Sandbox Code Playgroud)

这是我得到的:


OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"Login timeout expired".

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"An error has occurred while establishing a connection to the server. 
When connecting to SQL Server 2005, this failure may be caused by the 
fact that under the default settings SQL Server does not allow remote 
connections.".

Msg 53, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [53]. 

同样,我可以使用这些确切的凭据直接访问服务器(在SQL Management Studio中),因此我的网络或凭据不会出​​现问题.

我在网上看到的大多数示例似乎涉及Windows域帐户,而不是SQL安全登录.这不适用于SQL身份验证吗?

小智 10

为解决上述问题,我修改了Linked Server定义以明确指定TCP:

EXEC sp_addlinkedserver   
    @server='TEST_LINK', 
    @srvproduct='',
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0'

EXEC sp_addlinkedsrvlogin
    @useself='FALSE',
    @rmtsrvname='TEST_LINK',
    @rmtuser='user',
    @rmtpassword='secret'
Run Code Online (Sandbox Code Playgroud)

这对我有用.此方法还允许我为远程服务器指定非标准端口:

EXEC sp_addlinkedserver   
    @server='TEST_LINK', 
    @srvproduct='',
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0,1111'
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助


Noe*_*edy 7

它适用于sql身份验证.实际上它更容易,因为如果使用SQL身份验证,则不必设置Kerberos.

有一件事令人困惑,你的错误信息,你的地址是一个IP地址:123.45.678.90

您的错误消息是在谈论命名管道.这可能是一个线索吗?

您不必通过它的IP地址在TSQL中引用服务器.如果在本地服务器上添加别名,指向远程服务器,则可以提供更合理的名称.通过IP地址引用它显然不能令人满意.