【问题标题】:Connecting to a 2014 SQLEXPRESS database on an externally hosted computer through TCP/IP通过 TCP/IP 连接到外部托管计算机上的 2014 SQLEXPRESS 数据库
【发布时间】:2015-01-04 04:08:18
【问题描述】:

我正在开发一个可以从多个位置更新小型数据库的系统。我希望将数据库托管在我的家用计算机上,并允许通过 tcp/ip 从其他两个位置连接到数据库。

到目前为止,我做了以下事情:

  1. 为 SQLEXPRESS 启用 TCP/IP
  2. 在我的防火墙上允许端口 1433 tcp
  3. 在我的防火墙上允许端口 1434 udp
  4. 启用 SQLEXPRESS 服务器以允许远程连接

我希望能够通过在其他电脑上打开 sql management studio 并使用以下格式 [ExternalIP]\SQLEXPRESS 来连接到数据库,但到目前为止我还无法这样做。我查看了我的外部 IP 可能是什么,我得到了两个不同的值:

86.XX.X.XXX 66.XXX.XX.XX

当一切都正确配置后,我是否应该使用这些值中的任何一个以这种格式从其他 sql 管理工作室连接?有没有我遗漏的步骤?

【问题讨论】:

  • 其他客户端是在同一个局域网上还是在互联网上?
  • 他们在互联网上
  • 请注意,通过互联网,您还需要在您拥有的任何路由器上进行端口转发。一些 ISP 不允许家庭连接的传入连接,所以也要注意这一点。

标签: sql-server external remote-access tcp-ip


【解决方案1】:

命名实例默认情况下,SQL Server 不侦听端口 1433,而是在每次服务启动时确定的随机端口上侦听。 sql 浏览器服务 的功能是为客户端提供每个运行实例的实际端口(这是使用固定的 1434 udp 端口​​完成的)。

必要的步骤是将服务器配置为使用固定端口,然后设置防火墙和路由器以允许该端口。连接时,只需将外部 IP 地址与端口一起使用,而不是实例名称(因为这会调用浏览器服务,而固定端口则不需要)。

要恢复,必要的步骤如下:

  1. 在服务器上启用远程连接。
  2. 根据需要设置用户和权限(Windows 身份验证在 Internet 上很麻烦,因此强烈建议使用 SQL 身份验证)
  3. 为实例启用 TCP/IP。
  4. 将服务器配置为使用固定端口进行连接(1433 是标准端口)。 Look here 获取说明。
  5. 重新启动数据库服务器。
  6. 授予防火墙权限以允许服务器在您选择的端口上执行传入连接。此时 LAN 中的其他计算机应已连接。
  7. 在您的路由器上将您打开的端口转发到您的本地计算机专用 IP(请注意,在 Windows 中,您必须将计算机配置为使用固定的本地 IP 而不是 DHCP)。
  8. 通过 Internet 使用客户端或仅使用您的外部 IP 进行测试。

请注意,对于来自远程客户端的连接,服务器名称必须使用 86.XX.X.113,1433(端口号用逗号分隔,如果是 1433,则可选) .请注意,没有实例名称,即使您将其安装为 SQLEXPRESS 或其他名称。这是由于具有固定的侦听端口(默认情况下就像默认实例)。这消除了对浏览器服务和 udp 1434 的需求,以及动态端口转发的痛苦。

您还应该检查您的 ISP 是否最有可能为您提供动态外部 IP,以便在更改时可能会重新配置客户端。或者您可以使用一些动态 DNS 服务。

【讨论】:

  • 与端口转发有关,其他一切都配置好,感谢您的帮助 alejandro
【解决方案2】:

配置MSSQL Express 2014连接remoto PC或PHP等。

观看视频教程 Easy Config Server to MSSQL Express:

https://www.youtube.com/watch?v=5UkHYNwUtCo

代码测试客户端远程 PHP:

$serverName = '192.168.1.64,49170'; //only the server name and ip MSSQL SERVER EXPRESS 
 $connectionInfo = array( "Database"=>"mydbName", "UID"=>"myUserId", "PWD"=>"myPass");
 $conn = sqlsrv_connect( $serverName, $connectionInfo);

 if( $conn ) {
   echo "Connection established";
 }else{
   echo "Connection could not be established.";
   die( print_r( sqlsrv_errors(), true));
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2011-10-24
    • 2019-07-18
    • 2014-05-11
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多