使用SQL Server Management Studio远程连接到Azure虚拟机上托pipe的SQL Server Express实例
初始尝试
我有一个Windows Server 2012的Azure虚拟机,我刚安装了SQL Server 2012 Express数据库引擎组件。 然后,我按照这里的说明与SQL Server Management Studio进行远程连接。
- 为虚拟机创build一个TCP端点
- 在Windows防火墙中打开TCP端口
- configurationSQL Server侦听TCP协议
- configurationSQL Server以进行混合模式身份validation
- 创buildSQL Server身份validationlogin
- 确定虚拟机的DNS名称
- 从另一台计算机连接到数据库引擎
第七步后,我收到以下错误:
与SQL Serverbuild立连接时发生networking相关或实例特定的错误。 服务器未find或无法访问。 validation实例名称是否正确,并将SQL Serverconfiguration为允许远程连接。 (提供程序:命名pipe道提供程序,错误:40 – 无法打开连接到SQL Server)(Microsoft SQL Server,错误:53)
在远程连接之前还需要configuration什么?
故障排除
我一直在这里按照故障排除说明。 下面的每个blockquote是一个描述该链接的步骤。
确认SQL Server数据库引擎的实例已安装并正在运行。
完成。 我们安装了SQL Server Express,并且它作为名为SQLEXPRESS的命名实例运行。
如果您试图连接到一个命名实例,请确保SQL Server Browser服务正在运行。
完成。 我们按照这里的步骤打开SQL Server Browser服务。
获取计算机的IP地址。
完成。 我们稍后将使用这些来testing连通性,也许会为SQLEXPRESS设置一个静态端口。
10.241.62.155
FE80 :: 45:8c29:e19f:f78b 15%
获取SQL Server使用的TCP端口号。
完成。 SQL Server Management Studio服务器日志显示服务器正在侦听端口49169。
启用协议
完成。 我们已经在configurationpipe理器中启用了TCP / IP,但为了以防万一,我们重新启动了SQL Server服务。
testingTCP / IP连接
完成。 我们使用tcping.exe来testing连接性(cmd ping与Azure不能很快地工作)。我们能够连接到端口80。
- tcping.exe buddha.cloudapp.net>成功
- tcping.exe buddha.cloudapp.net 80>成功
testing本地连接
完成。 我们在命令提示符下使用了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,但这只是众多dynamic端口之一,我们想要设置静态端口1435。
- 使用WF.msc为端口1435创build一个入站TCP规则。
- 使用Azurepipe理门户为端口1435创buildTCP端点。
故障排除说明还说:
如果要连接到TCP端口1433以外的命名实例或端口,则还必须打开SQL Server Browser服务的UDP端口1434 。
由于我们正在连接SQLEXPRESS(一个命名实例),因此我们需要为UDP打开端口1434。
- 使用WF.msc为端口1434创build一个入站UCP规则。
- 使用Azurepipe理门户为端口1434创buildUDP端点
关于连接命名实例的进一步研究揭示了dynamic端口问题。 我们使用端口1435(静态)而不是端口49169(许多有效选项之一)的原因。
SQL Server Express实例,SQL Server Compact实例和数据库引擎的命名实例使用dynamic端口。 要configuration这些实例以使用特定的端口,请参阅configuration服务器以在特定的TCP端口上进行侦听(SQL Serverconfigurationpipe理器)。 在这里 。
完成。 我们进入SQLconfigurationpipe理器> SQL Servernetworkingconfiguration> SQLEXPRESS> TCP / IP协议,我们做了以下工作。
协议选项卡>全部收听> NO。
IP地址选项卡>为每个列出的地址
- 启用>是
- TCPdynamic端口>空白(删除零)
- TCP端口> 1435(或您的select)
重新启动SQLEXPRESS服务后,我们再次查看SQL Server Management Studio日志,发现服务器正在侦听端口1435! 万岁!
testing连接
完成。 我们在本地(非Azure)计算机上打开SQL Server Management Studio并连接。
- buddha.cloudapp.net,1435或buddha.cloudapp.net \ SQLEXPRESS
- SA
- 密码
成功。
以下是我们find答案的三个网页。 最困难的部分是为SQLEXPRESS设置静态端口。
在Windows Azure上configurationSQL Server虚拟机 。 这些初步指示提供了25%的答案。
如何解决连接到SQL Server数据库引擎 。 仔细阅读这个答案提供了另外50%的答案。
如何configurationSQL服务器以监听不同IP地址上的不同端口? 。 这可以为命名实例(例如SQLEXPRESS)设置静态端口。最终我们花了25%的答案。
从Names Pipes Provider得到错误的事实告诉我们,当您尝试build立连接时,您没有使用TCP / IP协议。 尝试添加“tcp”前缀并指定端口号:
tcp:name.cloudapp.net,1433
我也在类似的事情上挣扎。 我的猜测是你的实际问题是连接到另一台机器上运行的SQL Express实例。 这样做的步骤可以总结如下:
- 确保SQL Expressconfiguration了SQL身份validation以及Windows身份validation(默认)。 您可以通过SQL Server Management Studio(SSMS)服务器属性/安全性来执行此操作
- 在SSMS中,创build一个名为“sqlUser”的新login名,例如用合适的密码“sql”表示。 确保为SQL身份validation设置了新的login名,而不是Windows身份validation。 SSMS服务器安全/login/属性/常规。 另外确保“强制密码策略”未被选中
- 在“属性/服务器angular色”下,确保此新用户具有“系统pipe理员”angular色
- 在SQL Serverconfigurationpipe理器SSCM(在Windows \ SysWOW64中searchSQLServerManagerxx.msc文件,如果找不到SSCM),请在SQL Servernetworkingconfiguration/协议SQLExpress下确保TCP / IP已启用。 如果需要,可以禁用命名pipe道
- 右键单击协议TCP / IP,然后在IPAddresses选项卡上,确保每个IP地址都设置为Enabled,并且TCP端口1433(这是SQL Server的默认端口)
- 在Windows防火墙(WF.msc)中创build两个新的入站规则 – 一个用于SQL Server,另一个用于SQL浏览器服务。 对于SQL Server,您需要打开TCP端口1433(如果您使用的是SQL Server的默认端口) ,对于SQL浏览器服务非常重要,则需要打开UDP端口1434 。 在防火墙中适当地命名这两个规则
- 停止并使用SSCM或Services.mscpipe理单元重新启动SQL Server服务
- 在Services.mscpipe理单元中确保SQL浏览器服务启动types为自动,然后启动此服务
此时,您应该可以使用SQL身份validation,用户“sqlUser”密码“sql”远程连接到上面configuration的SQL Express实例。 最后一个提示和简单的方法来检查这是为了创build一个带有.UDL扩展名的空文本文件,在您的桌面上说“Test.UDL”。 双击编辑该文件将调用Microsoft Data Link Properties对话框,通过该对话框可以快速testing远程SQL连接