如何在远程服务器上创建链接服务器到本地PC

时间:2017-09-21 06:58:26

标签: sql sql-server sql-server-2012 sql-server-2016 linked-server

如何从远程SQL Server链接到SQL Server Express的本地实例添加链接服务器建立连接?在本地我的意思是我使用的SQL与SQL Server Express实例,而远程我指的是我用SSMS连接的服务器。主要是在网络上描述了相反的情况 - 从远程到本地。我从那个文档开始: https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine

  1. 我是否必须将本地服务器视为远程?我的意思是我必须找到链接服务器的本地实例的IP地址吗?如果是,那么问题是如何找到本地服务器的必要参数以使其远程?这个查询对我来说是一个很有希望的开始https://stackoverflow.com/a/14695530/1903793但是我得到了local_net_address,local_tcp_port和client_net_address的空值。所以我被卡住了。
  2. 请参阅下面的图片。在链接服务器字段中输入什么内容? .\SQLExpress或其他一些短语。
  3. 选择SQL ServerOther data source的内容?
  4. 如果是其他数据源,那么提供商呢?
  5. enter image description here

4 个答案:

答案 0 :(得分:4)

  1. 是。您不是要在其他要创建链接服务器的SQL Server上本地的。对于其他服务器,您的本地服务器是远程的。确保本地服务器可以使用SQL Server配置管理器接受网络连接。

  2. 如果使用SQL Server,则必须提供本地服务器的网络名称 - 您在SSMS中使用的名称。除非您使用localhost或“。”然后你需要找到它,你可以使用ipconfig /all并查找主机名。假设本地服务器和其他服务器位于同一网络上,这将起作用。 使用其他服务器,您有更多选择。在链接服务器中,您提供您喜欢的任何内容,然后指定下面的连接信息。 Here you can find more information about values

  3. 您可以选择您的方案允许的内容。如果可以,请选择Sql Server

  4. 查看第2页中的链接

  5. 修改

    免责声明我不是网络工程师,所以我可能会错过一些实际工作的关键步骤,而这只是大方向。

    如果您在其他网络而不是其他服务器上,则必须在1433 TCP端口上打开防火墙,不仅在您的计算机上,而且在路由器上并将路由器的端口1433映射到您的计算机的端口1433.然后让您的路由器公共IP你应该能够链接两个服务器。有点像@MatSnow在评论中提到的SO范围。

答案 1 :(得分:4)

如果您发现“从远程到本地”这与您想要的相反,那么您可以想象您的PC就是服务器而服务器就是本地PC并且只需一台。 想象一下,你有2台机器:machine1和machine2。 将machine1上的链接服务器添加到machine2:只需在machine1上打开上面的新链接服务器页面即可。 链接服务器:(Machine2 IP地址) (已选择)SQL server

enter image description here 转到安全页面并选择:使用此安全上下文创建。 并在machine2上输入您从SQL Server实例获得的用户名和密码。 enter image description here

答案 2 :(得分:1)

我不会谈论您的IP,因为很明显您必须拥有公开/可访问的IP 这是先决条件

  1. 您必须在SQL Server中启用TCP / IP 协议,这样您的服务器才会接受不是来自您的localhost的请求。您可以在 Sql Server配置管理器中执行此操作,如下图所示
  2. enter image description here

    1. 完成后,您已在防火墙中打开端口1433 ,因此无法阻止连接,因为您可以看到here

    2. 此时您只需照常添加链接服务器 IP /实例

答案 3 :(得分:1)

正如其他人所指出的那样。它的很多答案和成功取决于2台机器的通信能力。 DNS配置也是如此?防火墙?你能ping吗?你能解析机器名吗?您是否可以从一台服务器与另一台服务器通信?从本地计算机和远程服务器创建链接服务器(反之亦然)的区别实际上只是反转信息。您的本地计算机仍然需要是具有适当配置和权限的服务器,但如果是,那么它只是另一个SQL服务器。链接服务器仅依赖于具有2个能够通信的SQL服务器。

因为我经常工作远程(VPN)并且服务器无法始终解析我的机器DN​​S名称我使用以下脚本在远程服务器上创建链接服务器以通过IP地址连接到我的本地计算机我通过连接到服务器SSMS:

DECLARE @AutoExecute BIT = 1
DECLARE @LinkedServerName VARCHAR(50) = 'LinkedServername' --if null or blank the linked server will just get the instance name
DECLARE @InstanceAppend VARCHAR(45) = '\InstanceName' --make emptry string if none
DECLARE @user VARCHAR(20) = 'username'
DECLARE @password VARCHAR(20) = 'password'

DECLARE @SQL VARCHAR(MAX)
DECLARE @IPAddress VARCHAR(255)
DECLARE @Instance VARCHAR(300)
DECLARE @SrvName VARCHAR(300)

SELECT @IPAddress = client_net_address
    ,@Instance = client_net_address + ISNULL(@InstanceAppend,'')
FROM
    sys.dm_exec_connections
WHERE Session_id = @@SPID;

SET @SrvName = CASE WHEN LEN(@LinkedServerName) > 0 THEN @LinkedServerName ELSE @Instance END

IF NOT EXISTS (SELECT * FROM sys.servers WHERE name = @SrvName)
BEGIN
    IF (LEN(@LinkedServerName) > 0)
    BEGIN
        SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @LinkedServerName + ''',@provider=''SQLOLEDB'', @srvproduct=N'''', @datasrc=N''' + @Instance + ''''
    END
    ELSE
    BEGIN
        SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @Instance + ''', @srvproduct=N''SQL Server'''
    END
    SET @SQL = @SQL + CHAR(13) +  'EXECUTE master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''' + @SrvName + ''',@useself=N''False'',@rmtuser=''' + @user + ''', @rmtpassword=''' + @password + ''''
END
ELSE
BEGIN
    PRINT 'Linked Server Exists'
END

PRINT @SQL

IF (@AutoExecute = 1)
BEGIN
    BEGIN TRY
        EXECUTE (@SQL)
        PRINT 'Executed Successfully'
    END TRY
    BEGIN CATCH
        PRINT 'Failed To Execute'
        ;THROW
    END CATCH
END