55

初步尝试

我有一个带有 Windows Server 2012 的 Azure VM,我刚刚在其上安装了 SQL Server 2012 Express 数据库引擎组件。然后,我按照此处的说明远程连接 SQL Server Management Studio。

  1. 为虚拟机创建 TCP 端点
  2. 在 Windows 防火墙中打开 TCP 端口
  3. 配置 SQL Server 以侦听 TCP 协议
  4. 为混合模式身份验证配置 SQL Server
  5. 创建 SQL Server 身份验证登录
  6. 确定虚拟机的 DNS 名称
  7. 从另一台计算机连接到数据库引擎

在第七步之后,我收到以下错误:

与 SQL Server 建立连接时发生网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)(Microsoft SQL Server,错误:53)

在远程连接之前我还需要配置什么?

故障排除

我一直在按照此处的故障排除说明进行操作。下面的每个块引用都是描述该链接的一个步骤。

确认 SQL Server 数据库引擎的实例已安装并正在运行。

完毕。我们安装了 SQL Server Express,它作为一个名为 SQLEXPRESS 的命名实例运行。

如果您尝试连接到命名实例,请确保 SQL Server Browser 服务正在运行。

完毕。我们按照此处的步骤打开 SQL Server Browser 服务。

获取计算机的 IP 地址。

完毕。稍后我们将使用这些来测试连接性,并可能为 SQLEXPRESS 设置静态端口。

10.241.62.155

fe80::45c:8c29:e19f:f78b%15

获取 SQL Server 使用的 TCP 端口号。

完毕。SQL Server Management Studio服务器日志显示服务器正在侦听端口 49169。

启用协议

完毕。我们已经在配置管理器中启用了 TCP/IP,但我们重新启动了 SQL Server 服务以防万一。

测试 TCP/IP 连接

完毕。我们使用tcping.exe测试连接性(cmd ping 在 Azure 中无法快速运行。)我们能够连接到端口 80。

  • tcping.exe buddha.cloudapp.net > 成功
  • tcping.exe buddha.cloudapp.net 80 > 成功

测试本地连接

完毕。我们在命令提示符下使用了sqlcmd.exe,并且能够通过 TCP 使用用户名和密码进行本地连接。

  • sqlcmd -S Buddha\SQLEXPRESS(通过共享内存协议成功)
  • sqlcmd -S tcp:Buddha\SQLEXPRESS(通过 TCP 成功)
  • sqlcmd -S tcp:Buddha\SQLEXPRESS -U sa -P(使用用户名通过 TCP 成功)
  • sqlcmd -S tcp:10.241.62.155\SQLEXPRESS -U sa -P(内部IP成功)

在防火墙中打开端口

我们打开了 SQLEXPRESS 侦听的端口。服务器日志(上图)显示 SQLEXPRESS 正在侦听端口 49169,但这只是众多动态端口之一,我们想设置静态端口 1435。

  • 使用 WF.msc 为端口 1435 创建入站 TCP 规则。
  • 使用 Azure 管理门户为端口 1435 创建 TCP 终结点。

故障排除说明还说:

如果要连接到命名实例或 TCP 端口 1433 以外的端口,则还必须为 SQL Server Browser 服务打开UDP 端口 1434

由于我们正在连接 SQLEXPRESS(命名实例),因此我们需要为 UDP 打开端口 1434。

  • 使用 WF.msc 为端口 1434 创建入站UCP规则。
  • 使用 Azure 管理门户为端口 1434创建UDP终结点

关于连接到命名实例的进一步研究揭示了动态端口问题。我们使用端口 1435(静态)而不是端口 49169(许多有效选项之一)的原因。

SQL Server Express、SQL Server Compact 的实例和数据库引擎的命名实例使用动态端口。若要将这些实例配置为使用特定端口,请参阅配置服务器以侦听特定 TCP 端口(SQL Server 配置管理器)。这里 。

完毕。我们转到 SQL 配置管理器 > SQL Server 网络配置 > SQLEXPRESS 的协议 > TCP/IP,我们执行了以下操作。

协议选项卡 > 全部听 > 否。

IP 地址选项卡 > 对于每个列出的地址

  • 启用 > 是
  • TCP 动态端口 > 空白(删除零)
  • TCP 端口 > 1435(或您的选择)

重启SQLEXPRESS服务后,我们再次查看SQL Server Management Studio日志,发现Server is Listening on port 1435!!!万岁!

测试连接

完毕。我们在本地(非 Azure)计算机上打开了 SQL Server Management Studio 并进行了连接。

  • buddha.cloudapp.net,1435 或 buddha.cloudapp.net\SQLEXPRESS
  • 密码

成功。

4

3 回答 3

18

以下是我们找到答案的三个网页。最困难的部分是为 SQLEXPRESS 设置静态端口。

在 Windows Azure 上配置 SQL Server 虚拟机。这些初始说明提供了 25% 的答案。

如何排除连接到 SQL Server 数据库引擎的故障。仔细阅读本文提供了另外 50% 的答案。

如何配置 SQL Server 以侦听不同 IP 地址上的不同端口?. 这使得为​​命名实例(例如 SQLEXPRESS)设置静态端口成为可能。我们花了最后 25% 的时间才得到答案。

于 2013-04-11T23:25:18.960 回答
16

您从 Names Pipes Provider 收到错误的事实告诉我们,当您尝试建立连接时,您没有使用 TCP/IP 协议。尝试添加“tcp”前缀并指定端口号:

tcp:name.cloudapp.net,1433
于 2013-04-11T19:22:36.477 回答
3

我也为类似的事情而苦苦挣扎。我的猜测是您的实际问题是连接到在另一台机器上运行的 SQL Express 实例。执行此操作的步骤可总结如下:

  1. 确保为 SQL 身份验证和 Windows 身份验证(默认)配置了 SQL Express。您可以通过 SQL Server Management Studio (SSMS) 服务器属性/安全性执行此操作
  2. 在 SSMS 中创建一个名为“sqlUser”的新登录名,例如,使用合适的密码“sql”。确保为 SQL 身份验证设置此新登录名,而不是 Windows 身份验证。SSMS 服务器安全/登录/属性/常规。还要确保未选中“强制执行密码策略”
  3. 在属性/服务器角色下确保这个新用户具有“系统管理员”角色
  4. 在 SQL Server 网络配置/SQLExpress 协议下的 SQL Server 配置管理器 SSCM(如果找不到 SSCM,请在 Windows\SysWOW64 中搜索 SQLServerManagerxx.msc 文件)确保 TCP/IP 已启用。如果需要,您可以禁用命名管道
  5. 右键单击协议 TCP/IP 并在 IPAddresses 选项卡上,确保每个 IP 地址都设置为 Enabled Yes,以及 TCP 端口 1433(这是 SQL Server 的默认端口)
  6. 在 Windows 防火墙 (WF.msc) 中创建两个新的入站规则 - 一个用于 SQL Server,另一个用于 SQL Browser 服务。对于 SQL Server,您需要打开 TCP 端口 1433 (如果您使用 SQL Server 的默认端口),非常重要的是,对于 SQL Browser 服务,您需要打开 UDP 端口 1434。在您的防火墙中适当地命名这两个规则
  7. 使用 SSCM 或 Services.msc 管理单元停止并重新启动 SQL Server 服务
  8. 在 Services.msc 管理单元中,确保 SQL Browser 服务启动类型为自动,然后启动此服务

此时您应该可以远程连接,使用 SQL 身份验证,用户“sqlUser”密码“sql”到如上配置的 SQL Express 实例。最后一个提示和简单的检查方法是创建一个带有 .UDL 扩展名的空文本文件,在桌面上说“Test.UDL”。双击编辑此文件会调用 Microsoft 数据链接属性对话框,您可以使用该对话框快速测试远程 SQL 连接

于 2017-07-21T07:39:26.373 回答