【问题标题】:sql server 2012 allowing remote connectionsql server 2012 允许远程连接
【发布时间】:2014-06-29 12:24:49
【问题描述】:

我想将托管在 Web 服务器上的 asp.net 应用程序与托管在另一个远程位置的 sql server 2012 db 连接起来。 我在 sql server 上启用了 TCP/IP,还为 ip1 和 ipall 设置了端口 6322。 但是如果我去我的网络服务器和远程登录到数据库服务器,没有建立连接。 在 ASP.net 页面中只是为了测试连接我使用的连接字符串如下

 <add name="DBConnectionStringTEST" 
 connectionString="Data Source=<db ip address>; Initial Catalog=<db name>; Persist Security Info=True;User ID=<username>;Password=<password>;connection timeout=0;Max Pool Size = 100;Pooling = True" 
      providerName="System.Data.SqlClient" />

我的问题,

1) 有没有我遗漏的东西,比如错误的端口。

2) 我需要提供数据库 IP 地址(client_net_address) 还是实际的数据库服务器地址。

3) 我是否需要请求服务器管理员允许网络服务器 IP 地址连接。

4) 什么是测试 web 服务器是否可以与 sql 服务器通信而无需在每次我进行更改时修改 asp.net 应用程序中的连接字符串的最快方法。

注意:我搜索了其他类似的主题,但找不到任何适合我的答案。

【问题讨论】:

  • 您是否正在为您的 SQL Server 运行命名实例?如果是这样,您需要在您的连接字符串(例如 ServerName\InstanceName)中为您的 Data Source 使用它
  • 防火墙是否允许通过该端口的流量?

标签: asp.net sql-server networking infrastructure


【解决方案1】:

如果没有明确的端口或实例名称规范,将使用默认的 1433 端口。在连接字符串中指定您的自定义端口:

<add name="DBConnectionStringTEST" 
    connectionString="Data Source=<db server ip address or host name>,6322; Initial Catalog=<db name>; Persist Security Info=True;User ID=<username>;Password=<password>;connection timeout=0;Max Pool Size = 100;Pooling = True" 
      providerName="System.Data.SqlClient" />

测试网络连接的简单方法是使用 TELNET:

TELNET <db server ip address or host name> 6322

如果成功,这将显示一个空的控制台窗口。按 ctrl-C 关闭。

如果您没有安装 TELNET,您还可以使用下面的 Powershell 命令验证端口连接:

6322 | % { echo ((new-object Net.Sockets.TcpClient).Connect("<db server ip address or host name>",$_)) "server listening on TCP port $_" }

【讨论】:

  • 我尝试了 telnet 和 powershell,但无法连接。想检查我是否提供了正确的信息。我有以下信息(稍作修改以保护信息)本地服务器名称:BRR-CLUSTINT07\CLUSTRESOURCE02,本地网络地址:10.170.7.103,客户端网络地址(与机器IP地址相同):10.170.7.1,机器的主机名安装 sql 的位置:BRR=SQL-N1,用户名:SA,密码:密码,本地 tcp 端口 6322。鉴于上述信息,telnet 或 power shell 的命令应该是什么?
  • 只指定主机名,省略实例名。验证端口连接的 Powershell 命令是:6322 | % { echo ((new-object Net.Sockets.TcpClient).Connect("BRR-CLUSTINT07",$_)) "服务器监听 TCP 端口 $_" }
  • 在您的连接字符串中,如果 CLUSTRESOURCE02 是您的实例名称,您可以指定“BRR-CLUSTINT07,6322”或“BRR-CLUSTINT07\CLUSTRESOURCE02”。看名字,我怀疑CLUSTRESOURCE02是集群资源的名字而不是实例的名字。不应在连接字符串中指定集群资源名称。
  • 嗨,Dan,这是一个集群服务器,因此资源可以在两台服务器之间共享。那么应该是什么 telnet 命令我已经尝试过 TELNET BRR-CLUSTINT07,6322 和 TELNET BRR-CLUSTINT07\CLUSTRESOURCE02,6322 无济于事
  • 我注意到的另一件事。为了访问 sql server,我远程桌面到 server1,然后远程桌面到 server2(sql server)。如果我使用以下内容转到服务器 i 和 UDL 测试连接,CLUSTINT07\CLUSTRESOURCE02 它可以工作。但可能是因为 server1 和 server2 都在同一个环境中或其他东西
【解决方案2】:

1) 有没有我遗漏的东西,比如错误的端口。

从您发布的连接字符串看来,您正在使用默认实例。如果它确实是命名实例,则在您的连接字符串中提供相同的信息。

2) 我需要提供 db ip 地址(client_net_address) 还是实际的 db 服务器地址。

它应该是实际的数据库服务器 IP 地址/主机名以及数据库服务器安装的实例名称。

3) 我需要请求服务器管理员允许网络服务器 ip 连接地址。

如果您提供正确的 IP 地址/主机名/端口/凭据,那么它应该允许您通过连接。 (前提是您的数据库管理员已经为您创建了数据库用户)

4) 测试 Web 服务器是否可以与 sql server 无需修改asp.net中的连接字符串 每次我进行更改时应用程序。

通过创建UDL 文件。打开notepad 并将其另存为test.udl。保存后 -> 双击文件 -> 提供所有信息并测试连接。它应该如下所示

编辑:

配置通用数据链接 (.udl) 文件

  1. 双击名为test.udl的文件

  2. Provider 选项卡上选择SQL Server Native client 10.0

  3. Connection 标签上

    输入BRR=SQL-N1Server Name

    Usernamepassword 部分提供SApassword

    点击Test Connection

有关更多信息,请参阅Here

【讨论】:

  • 我创建了 UDL 文件,但无法连接。想检查我是否提供了正确的信息。我有以下信息(稍作修改以保护信息)本地服务器名称:BRR-CLUSTINT07\CLUSTRESOURCE02,本地网络地址:10.170.7.103,客户端网络地址(与机器IP地址相同):10.170.7.1,机器的主机名安装 sql 的位置:BRR=SQL-N1,用户名:SA,密码:密码,本地 tcp 端口 6322,现在给出上述信息 rahul 我应该在源名称中写什么?
  • @HakanZim,查看编辑后的答案(主要是EDIT: 部分
  • 我注意到的另一件事。为了访问 sql server,我远程桌面到 server1,然后远程桌面到 server2(sql server)。如果我去服务器 i 和 UDL 测试连接与以下,CLUSTINT07\CLUSTRESOURCE02 它工作。但可能是因为 server1 和 server2 都在同一个环境中。
  • @HakanZim,没错。如果您正在测试本地机器的连接,那么这将不起作用,因为您没有直接连接。你必须从你的跳箱测试连接。
  • 我正在尝试使用由另一家完整的托管公司托管的 Web 服务器。所以你是说如果不能连接数据库服务器和网络服务器需要在同一个环境中?
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多