9

我正在尝试从远程 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

这是我得到的:

链接服务器“远程”的 OLE DB 提供程序“SQLNCLI”返回消息
“登录超时已过期”。

链接服务器“远程”的 OLE DB 提供程序“SQLNCLI”返回消息
“建立与服务器的连接时发生错误。
连接到 SQL Server 2005 时,此故障可能是由
事实上,在默认设置下 SQL Server 不允许远程
连接。”。

消息 53,第 16 级,状态 1,第 0 行
命名管道提供程序:无法打开与 SQL Server [53] 的连接。

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

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

4

6 回答 6

11

为了解决上述问题,我修改了链接服务器定义以专门指定 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'

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

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

我希望这有帮助

于 2010-03-18T11:53:15.930 回答
7

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

您的错误消息令人困惑,您的地址是 IP 地址:123.45.678.90

您的错误消息是关于命名管道的。这可能是一个线索吗?

您不必通过 IP 地址在 TSQL 中引用服务器。如果你在本地服务器上加一个别名,指向远程服务器,你可以给一个更合理的名字。通过IP地址引用它显然不能令人满意。

于 2009-05-08T19:38:12.583 回答
2

想通了,这要归功于 SMS GUI 向导中用于添加链接服务器的一行指令:"If SQL Server is selected, then the Linked Server name is also the network name of the server."

我认为链接服务器的名称只是一个任意别名。

这就像一个魅力 - 很遗憾,每次我想使用这个链接服务器时,我都必须输入 IP(在括号中),但是你有它。

Exec sp_dropserver '0.0.0.0', 'droplogins'
go

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

EXEC sp_addlinkedsrvlogin
    @useself='FALSE',
    @rmtsrvname='0.0.0.0',
    @rmtuser='user',
    @rmtpassword='secret'
go

Select Top 10 * from [0.0.0.0].DatabaseName.dbo.TableName
于 2009-05-09T02:18:55.507 回答
1

如果在指定 IP 地址时在命名管道上失败,请尝试在 IP 地址前加上“tcp:”,看看是否有助于将其设置在正确的路径上。

于 2009-05-08T19:50:24.863 回答
1

sp_configure '即席分布式查询',1

下一个

重新配置覆盖

已经检查了 SQL Surface area configuraton-->Databaseengine-->Remoteconnections-->Local and remoteconnections-->应该同时使用 TCP/IP 和命名管道选项(如果没有选择该选项并重新启动)

这必须解决链接服务器“远程”的 OLE DB 提供程序“SQLNCLI”返回消息“建立与服务器的连接时发生错误。连接到 SQL Server 2005 时,此故障可能是由于在默认设置 SQL Server 不允许远程连接。”。

于 2009-05-11T04:41:08.807 回答
1

有时协议已启用,并且外围配置允许远程连接,但 SQL Server Browser 服务在设置配置后尚未重新启动。这意味着配置未激活。

如果您的配置设置似乎都正确,请尝试重新启动 SQL Server Browser 作为故障排除步骤。

麦克风

于 2010-08-11T15:16:39.320 回答