【发布时间】: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 以作为良好的衡量标准。我认为我的问题源于所有其他列出的协议监听。干得好!
标签: sql-server azure remote-access ports