0

我的问题是尝试在 C# 中创建一个连接字符串,该字符串远程连接到 SQL Server 2012 数据库。如果托管 SQL Server 的机器不需要端口号来导航,我可以成功地做到这一点。现在我们已经重新路由了我们的 ip,托管 SQL Server 的机器的 ip 是 XXX.XXX.XXX.XXX:16500,其中 SQL Server 仍在侦听默认端口 1433。

我知道您可以像这样指定 SQL Server 实例使用的端口号;

data source=XXX.XXX.XXX.XXX,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

我们的问题是,我们的远程机器不仅仅是一个 IP。它是一个IP和一个端口。

XXX.XXX.XXX.XXX:16500将手动导航到所需的 PC,忽略端口号会将您带到另一台计算机。我们正在努力完成这样的事情;

data source=XXX.XXX.XXX.XXX:16500,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

我一生都找不到如何做到这一点。我想将我的数据源设置为远程 IP:PORT,以及设置 SQL Server 将侦听的端口(我知道 1433 是默认值,但在某些情况下我们可能必须更改它,所以它需要未来)

我努力了;

data source=XXX.XXX.XXX.XXX:16500,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

错误:

与 SQL Server 建立连接时发生与网络相关或特定于实例的错误...

data source=XXX.XXX.XXX.XXX:16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

错误:

与 SQL Server 建立连接时发生与网络相关或特定于实例的错误...

data source=XXX.XXX.XXX.XXX,16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

错误:

与服务器成功建立连接,但在登录前握手期间发生错误。(提供者:TCP 提供者,错误:0 - 现有连接被远程主机强行关闭。)

在这里,我似乎只是连接到错误的服务器,试图为 SQL Server 使用端口 16500,这是不正确的。

任何人都可以请发光,这可能吗?

4

3 回答 3

2

这听起来像您拥有的 IP 地址实际上是一个 NAT 设备,它根据用于连接它的端口将流量转发到另一台机器。如果是这种情况,您需要让您的 NAT 管理员在 NAT 上创建一个公共端口,该端口将被转发到您的 SQL Server 计算机上的端口 1433。任何端口转发始终只转发到单个端口,因此如果没有设置新的转发规则,您尝试执行的操作将无法进行。

于 2012-10-24T21:49:08.773 回答
1

从网络的角度来看,您所说的没有意义:根据定义,主机与一个或多个 IP 地址相关联,而不是与 IP:Port 组合相关联。

我同意塞巴斯蒂安的观点,听起来您的网络管理员设置了 NAT 或其他类型的路由/防火墙,以便(通过 TCP?)连接到路由器/防火墙/NAT 上的 XXX.XXX.XXX.XXX:16500 会转发连接到在 SQL 服务器机器的某个端口上侦听的某个应用程序(可能是远程桌面应用程序。)

您需要按照 Sebastian 的建议请求将端口转发到要配置的 sql 服务器。另一种选择是设置 SSH 服务器以侦听已转发的端口(或其他端口),然后您(或您的网络管理员)可以为所需的任何应用程序设置安全隧道,而无需更改防火墙配置。

通过 NAT/路由器/防火墙在多个应用程序的多个端口上完成转发,或使用 SHH 在单个端口上建立隧道,各有其优点和缺点。与您的网络管理员交谈,他应该能够确定哪种方案更适合您的情况。

于 2012-10-24T22:28:14.757 回答
0

MS SQL Server 是 XXX.XXX.XXX.XXX:16500,其中 MS SQL 仍在侦听默认端口 1433。

Um.. no.. NAT 设备位于 XXX.XXX.XXX.XXX,它将端口 16500 转发到您的 SQL Server。您不知道 SQL 服务器 IP 地址,因为您的应用程序完全无法访问该地址,因为 NAT 在您和它之间。您也不知道/不在乎 SQL 服务器安装在哪个端口号上:这是 NAT 的工作。

因此,要使用的正确连接字符串是:

data source=XXX.XXX.XXX.XXX,16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;";

现在,你说你在这里收到了一个错误。该错误表明您已成功连接,但还有其他问题正在发生。可能导致这种情况的事情包括:

  • SQL Server 已达到其连接限制(很可能)
  • SQL Server 需要加密连接,但这不是您要建立的
  • 使用了错误的 ssl 证书
  • SQL Server 只需要 Windows 身份验证,您没有使用它
  • SQL Server 上未启用 TCP/IP 连接
  • 您与 NAT 或 NAT 与 SQL 服务器之间的数据压缩。
  • 在连接信息到达 SQL 服务器之前,NAT 会破坏连接信息(当然可能是配置错误的 NAT)。
  • SynAttackProtect 在某处被打开,你已经尝试了很多事情,它把你踢了出去。
  • NAT 和 SQL Server 之间有足够的延迟导致 SQL Server 踢出连接。
  • 还有更多...

本质上这里存在网络问题,而不是由于端口号。你必须让网络管理员参与进来,看看发生了什么。

我会放下钱,问题是SQL服务器上的配置问题人为地限制连接数,或者NAT在请求正确转发到数据库服务器之前正在劫持请求。

请参阅以下内容:http: //betav.com/blog/billva/2008/11/solution-forcibly-closed-sql-s.html http://arshpreet9.wordpress.com/category/sql-errorsbug-fixes /

于 2012-10-24T23:02:09.283 回答