【问题标题】:Having trouble adding a linked SQL server添加链接的 SQL 服务器时遇到问题
【发布时间】:2009-05-08 19:08:31
【问题描述】:

我正在尝试从远程 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 身份验证吗?

【问题讨论】:

    标签: sql-server linked-server


    【解决方案1】:

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

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

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

      您不必在 TSQL 中通过其 IP 地址来引用服务器。如果你添加一个alias on the local server,指向远程服务器,你可以给一个更合理的名字。用IP地址来引用它显然是不能令人满意的。

      【讨论】:

      • 这是一个有趣的想法。如果我在 @datasrc 参数中输入虚假 IP 地址或“foofoofoo”,我会得到相同的结果。
      【解决方案3】:

      感谢 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
      

      【讨论】:

      • 哇,太糟糕了。您确定没有名称解析问题?
      • 不确定您的意思 - 没有与数据库服务器关联的域名,只是一个 IP 地址。
      • 是的,我现在也有同样的问题。我尝试通过将 SQLOLE(或其他)指定为提供程序并给它一个连接字符串来解决它,在这种情况下 @server 实际上是一个任意逻辑名称......但这不会完全连接到生产机器上(我忘了为什么)。所以我回到了这个方法,并使用感兴趣的表上的视图来抽象出物理位置,到目前为止它已经奏效了。
      • server 和 rmtserver 实际上只是别名。它们不必匹配 IP 地址或 DNS 服务器名称。只有 datasrc 很重要。
      【解决方案4】:

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

      【讨论】:

      • 对于那些希望通过域名交换 @datasrc='tcp:0.0.0.0' 与 @datasrc='mydomain.com' 进行连接的人,没有 SERVER= 就像周围的许多其他帖子一样。
      【解决方案5】:

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

      下一个

      使用覆盖重新配置

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

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

      【讨论】:

        【解决方案6】:

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

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

        迈克

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-04
          • 2011-05-30
          • 2011-06-13
          • 2019-10-12
          • 1970-01-01
          • 2019-11-19
          • 2012-05-01
          • 1970-01-01
          相关资源
          最近更新 更多