使用 SQL Server Management Studio 远程连接到托管在 Azure 虚拟机上的 SQL Server Express 实例

Posted

技术标签:

【中文标题】使用 SQL Server Management Studio 远程连接到托管在 Azure 虚拟机上的 SQL Server Express 实例【英文标题】:Use SQL Server Management Studio to connect remotely to an SQL Server Express instance hosted on an Azure Virtual Machine 【发布时间】:2013-04-04 02:26:19 【问题描述】:

初步尝试

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

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

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

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

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

疑难解答

我一直遵循故障排除说明here。下面的每个块引用都是描述该链接的一个步骤。

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

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

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

完成。我们按照here的步骤开启了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 打开 UDP 端口 1434 浏览器服务。

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

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

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

SQL Server Express、SQL Server Compact 和命名的实例 数据库引擎的实例使用动态端口。要配置这些 使用特定端口的实例,请参阅Configure a Server to Listen on a Specific TCP Port (SQL Server Configuration Manager). 和 here.

完成。我们转到 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 萨 密码

成功。

【问题讨论】:

哇,列出所有步骤和尝试的工作令人难以置信。 你为我节省了大量时间!对我来说,关键是最后:Protocol Tab > Listen All > NO。我不必从 1433 更改 IP,但我确实从动态端口中删除了 0 以作为良好的衡量标准。我认为我的问题源于所有其他列出的协议监听。干得好! 【参考方案1】:

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

Provisioning a SQL Server Virtual Machine on Windows Azure。这些初始说明提供了 25% 的答案。

How to Troubleshoot Connecting to the SQL Server Database Engine。仔细阅读本文提供了另外 50% 的答案。

How to configure SQL server to listen on different ports on different IP addresses?。这可以为命名实例(例如 SQLEXPRESS)设置静态端口。我们花了最后 25% 的时间才得到答案。

【讨论】:

【参考方案2】:

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

tcp:name.cloudapp.net,1433

【讨论】:

嗨,Paul,仍然有一个错误,但现在它来自 TCP Provider 而不是 Named Pipes Provider。 – Shaun Luttin 7 分钟前 抱歉,根据对您问题的快速阅读,我认为您已经将服务器配置为侦听静态端口 1433。【参考方案3】:

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

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

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

【讨论】:

神一样的回答。在第 5 步中,我唯一做的就是在 IPAll -> TCP 端口设置 1433,它也可以正常工作。

以上是关于使用 SQL Server Management Studio 远程连接到托管在 Azure 虚拟机上的 SQL Server Express 实例的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL Server Management Studio 连接到 SQL Server

如何使用 SQL Server Management Studio (2008) 在 SQL Server Compact Edition 中创建列

SQL Server Central Management System

怎样使用SQL Server Management Studio

怎样使用SQL Server Management Studio

SQL server management studio的基本使用