为SQL Server Express 2012启用远程连接


403

我刚刚在家庭服务器上安装了SQL Server Express 2012。我试图通过台式机从Visual Studio 2012连接到它,并反复得到众所周知的错误:

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

我已尝试解决此问题:

  • 在服务器上运行SQL Server配置管理器并启用SQL Server浏览器
  • 在服务器上为本地子网上的TCP,端口1433和1434添加Windows防火墙例外。
  • 验证我在SQL Server实例上是否具有我在台式机上登录的用户的登录名。
  • 验证我在SQL Server实例上使用Windows身份验证。
  • 反复重新启动SQL Server和整个dang服务器。
  • 拉我所有的头发。

如何获得SQL Server 2012 Express以允许远程连接!?


7
我通过启用SQL Server Browser服务:D解决了。感谢您发布。
alansiqueira27 2014年

1
解锁1433 UDP端口对我有帮助!
迈克尔

1
而且,如果您使用的是Azure VM,请不要忘记也通过Azure的管理门户(该端口充当VM自己的防火墙的外部防火墙...)打开端口。像这样:stackoverflow.com/questions/34251382/…–
jleach

对于那些想知道Sql Server Configuration Manager在较新版本中消失了的地方
转到

Answers:


731

好吧,我高兴地问。我终于发现的解决方案在这里:

如何配置SQL Server Express以允许在端口1433上进行远程tcp / ip连接?

  1. 运行SQL Server配置管理器。
  2. 转到“ SQL Server网络配置”>“ SQLEXPRESS的协议”。
  3. 确保已启用TCP / IP。

到目前为止,一切都很好,完全值得期待。但是之后:

  1. 右键单击“ TCP / IP”,然后选择“ 属性”
  2. 验证是否在IP2下将IP地址设置为本地子网上的计算机IP地址。
  3. 向下滚动到IPAll。
  4. 确保“ TCP动态端口”。(我的设置为5位端口号。)
  5. 确保将TCP端口设置为1433。(我是空白的。)

(另外,如果你遵循这些步骤,它不是必要的,以使SQL Server的浏览器,你只需要允许端口1433,而不是1434)

这些额外的五个步骤是我以前在SQL Server Express,Express或其他版本中必须记住的。它们似乎是必需的,因为我在服务器上使用的是命名实例(myservername \ SQLEXPRESS),而不是默认实例。看这里:

配置服务器以侦听特定的TCP端口(SQL Server配置管理器)


7
如果不是唯一的实例是SQL Server Express,则可能需要在其他实例上取消UNASSIGN端口1433。我有一个2008 R2默认实例(MSSQLSERVER),我可以从外部连接到这两个实例的唯一方法是将端口1433分配给2012实例(按上述方法),然后将较旧的默认实例的端口分配更改为TCP Dynamic。端口=“ 0”,TCP端口=“”(空白)。反之,则只能访问默认实例。
罗伯特·卡尔洪

17
IPAll设置是SAVIOR的建议!我的就像你的...:D
Leniel Maccaferri

18
万一它对其他人有帮助...这很有帮助,但是直到启动SQL Server Browser服务,我仍然无法连接。(注意:由于某种原因,SQL Server Browser服务的启动类型为“禁用”,因此我必须进入Windows“服务”应用程序。将启动类型更改为“自动”,启动了服务,然后能够连接。)
mercurial

9
在Windows 8和安装到SQLEXPRESS实例的SQL 2012 Express SP1上,我必须将动态端口设置为除空白以外的任何值(如果将其删除,设置为0,那么它将为您重新计算一个新的随机端口),并且还要打开TCP高级防火墙控制面板中的1433和UDP 1434传入端口规则。当动态端口为空时,SQL Server只是在启动时挂起。
Tony Wall

10
只想说谢谢和支持。你节省了我很多时间。您介意使用正确的连接语法更新您的帖子吗?我需要在myserver\sqlexpress,[portnumber]没有括号的情况下使用。请注意,它不是,,而是:
Marco

105

连接到远程SQL Server (不打开UDP端口1434并启用SQL Server Browser)的正确方法是使用ip和port代替命名实例

使用ip和port代替命名实例也更安全,因为它减少了攻击的表面积。

也许2张图片说出2000字...

此方法使用指定的端口(这是大多数人想要的端口)。

在此处输入图片说明

此方法需要打开UDP端口1434并运行SQL Server Browser。

在此处输入图片说明


您能通过说这是“正确”的方式来详细说明您的意思吗?
瑞安·伦迪2013年

3
@Kyralessa Ha!...现在,经过4-5个小时的拔头发尝试连接到远程实例后,我再次清醒了,我可能应该解释一下,这里的“正确”是从我的上下文中读取的。由于没有启用SQL Server浏览器,因此使用实例名称进行连接“不正确”。
Rosdi Kasim

为避免误解,我在回答中做了一些说明。
Rosdi Kasim 2013年

1
谢谢;)当您无权运行浏览器服务时,必须指定端口。
Arman McHitarian 2014年

3
加1表示MS使用逗号而不是列作为端口号的分隔符
Jorj

32

还有一件事...

凯拉雷莎(Kyralessa)提供了很多信息,但是即使在本文发表之后,我还有另外一件事要补充。

在“ SQL Server网络配置”>“服务器协议”>“启用TCP / IP”下。右键单击“ TCP / IP”,然后选择属性。在“ IP地址”下,您需要为所使用的每种连接类型将“启用”设置为“是”。

在此处输入图片说明


18

您可以使用它来解决此问题:

转到开始>执行,然后运行CLICONFG.EXE。

命名管道协议将在列表中排在首位,将其删除并升级TCP / IP。

彻底测试应用程序。

希望对您有所帮助。


哇,真是个宝...谢谢。从来不知道甚至存在。
Louis van Tonder 2014年

1
会将客户端配置为使用TCP / IP,而不是服务器。
mcr

天哪,行得通!!刚刚登录以对此答案进行投票。谢谢
Aki

15

您也可以设定

全部听不听

在协议对话框中,然后在IP地址IP1中(例如)

设置为是,

定义您的IP地址,

将“ TCP动态”设置为“空白”并

TCP端口到1433(或其他任何端口)


在装有SQL 2012 Express SP1的Windows 8.1上执行此操作,导致SQL在启动时挂起:(
Zhaph-Ben Duguid 2014年

我将所有IP条目1、2,...设置为启用+活动,已擦除动态,已擦除端口,并将IPAll端口设置为1433,然后必须添加规则以在防火墙中打开TCP 1433和UPD 1434(1434如果不使用名称,则不需要,而仅使用端口号)。
Mordachai 2014年


11

我最近有这个问题。2015年8月

通过打开SQL Server配置管理器解决

  • SQL Server网络配置-> SQLEXPRESS的协议
  • TCP / IP-> IP地址选项卡上的属性
  • 一切保持默认,仅将IPALL:TCP端口设置为1433

可以使用SQL Server Manager连接到计算机:[主机地址],1433

例:

在此处输入图片说明


6

在使用默认设置安装的SQL Server 2012 Developer Edition安装中,我只需要加载SQL Server配置管理器-> SQL Server网络配置-> MSSQLSERVER的协议,并将TCP / IP从“禁用”更改为“启用”。


1
快速说明:对我来说,这没有用。由于某种原因,其中存在错误的IP。但是,Kyralessa的步骤成功了,因为他们涉嫌更新IP。
Brian MacKay 2013年

这适用于我的一台服务器,但不适用于另一台。
cheny 2014年

5

我必须添加防火墙入站端口规则才能打开UDP端口1434。这是Sql Server Browser侦听的端口。


3

我更喜欢“ Rosdi Kasim”的方式,因为它不需要在IP上进行详细配置。

当我再次尝试建立另一台服务器时,我一定会再次忘记它。

通过简单地启用Sql Server Browser服务来保持简单愚蠢(KISS),然后在连接服务器时在IP后面添加\ SQLEXPRESS。

我的失败点是直接使用不带“ \ SQLEXPRESS”的IP,因为它不使用默认端口。

谢谢。


3

我在本地安装的SQL Server 2014命名实例存在相同的问题。连接使用FQDN\InstanceName会失败,而只使用我的连接hostname\InstanceName工作。例如:使用mycomputername\sql2014work进行连接,但是使用mycomputername.mydomain.org\sql2014无效。DNS正确解析,在SQL Configuration Manager中启用了TCP / IP,添加了Windows防火墙规则(然后关闭防火墙进行测试,以确保它不会阻止任何东西),但是这些都没有解决问题。

最后,我必须启动“ SQL Server浏览器 ”服务,该服务解决了连接问题。

我从来没有意识到SQL Server Browser服务实际上可以帮助SQL Server建立连接。我的印象是,当您单击“浏览更多”服务器以进行连接时,它只是帮助填充了下拉列表,但实际上,如果未明确分配端口号(类似,则它实际上有助于使客户端请求与要使用的正确端口号保持一致)网站绑定如何帮助缓解托管多个网站的IIS Web服务器上的同一问题)。

此连接项为我提供了有关SQL Server浏览器服务的线索:https : //connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine-名称

  • 当您将wstst05 \ sqlexpress用作服务器名称时,客户端代码会将计算机名称与实例名称分开,并将wstst05与netbios名称进行比较。我认为它们匹配没有问题,并且该连接被视为本地连接。从那里,我们无需获取所需信息联系SQL Browser即可并通过共享内存连接到SQL实例而没有任何问题。
  • 当您使用wstst05.capatest.local \ sqlexpress时,客户端代码将名称(wstst05.capatest.local)与netbios名称(wstst05)的比较失败,并将连接视为“远程”。这是设计使然,我们绝对会在将来考虑对此进行改进。无论如何,由于考虑到远程连接以及它是一个命名实例的事实,客户端决定需要使用SQLBrowser进行名称解析。它尝试与wstst05.capatest.local(UDP端口1434)上的SQL Browser联系,并且该部分显然失败了。因此,您得到的错误。

来自TechNet的“ SQL Server Browser”服务的原因(我特别强调):https : //technet.microsoft.com/zh-cn/library/ms181087(v=sql.120 ) .aspx

在“使用SQL Server浏览器”部分中:

如果SQL Server Browser服务未运行,则在您提供正确的端口号或命名管道的情况下仍可以连接到SQL Server。例如,如果它在端口1433上运行,则可以使用TCP / IP连接到SQL Server的默认实例。但是,如果SQL Server Browser服务没有运行,则以下连接不起作用

  • 任何尝试不完全指定所有参数(例如TCP / IP端口或命名管道)而连接到命名实例的组件
  • 生成或传递服务器\实例信息的任何组件,以后其他组件可使用这些信息来重新连接。
  • 在不提供端口号或管道的情况下连接到命名实例
  • DAC到命名实例或默认实例(如果不使用TCP / IP端口1433)。
  • OLAP重定向器服务。
  • 在SQL Server Management Studio,企业管理器或查询分析器中枚举服务器。

如果在客户端-服务器方案中使用SQL Server(例如,当您的应用程序通过网络访问SQL Server时),则如果停止或禁用SQL Server Browser服务,则必须为每个实例分配一个特定的端口号,并且编写客户端应用程序代码以始终使用该端口号。此方法存在以下问题

  • 您必须更新并维护客户端应用程序代码,以确保其连接到正确的端口。
  • 您为每个实例选择的端口可能被服务器上的其他服务或应用程序使用,从而导致SQL Server实例不可用。

以及来自“ SQL Server浏览器的工作原理”部分的同一篇文章的更多信息:

因为 只有一个SQL Server实例可以使用端口或管道,为命名实例(包括SQL Server Express)分配了不同的端口号和管道名称。默认情况下,启用后,命名实例和SQL Server Express均配置为使用动态端口,即,在SQL Server启动时分配了可用端口。如果需要,可以将特定端口分配给SQL Server实例。连接时,客户端可以指定一个特定的端口。但是如果端口是动态分配的,则端口号可以在SQL Server重新启动时随时更改,因此客户端不知道正确的端口号。...当SQL Server客户端请求SQL Server资源时,客户端网络库使用端口1434向服务器发送UDP消息。SQLServer Browser用请求的实例的TCP / IP端口或命名管道进行响应。


2

我必须通过Configuration Manager添加端口,并在我的sql连接[host] \ [db实例名称],1433中添加端口号

注意实例名称和端口之间的,(逗号)


1

我有一个与迄今为止所有答案都不同的问题!

首先,我说它是在Visual Studio中提供的,而不是SQL Server Express,但解决方案应该完全相同。

好吧,天哪,这实际上很简单,也许有些愚蠢。当我尝试创建数据库并且Visual Studio建议使用SQL Server的名称时,它为我提供了Windows用户名,因为它实际上是我所使用的服务器的名称。

实际上,实际上是我的Windows用户名+ \SQLEXPRESS。如果您未更改任何设置,则可能也属于您。如果有效,请停止阅读;这是我的答案。如果不起作用,则名称可能不同。

如果像我一样,如果您仅在Visual Studio中遇到此问题以检查您的问题,请执行以下步骤:

  1. 打开“ SQL Server Management Studio” 图标
  2. 如果没有看到您的服务器(默认情况下停靠在左侧),请按F8或转到View-> Object Explorer
  3. 右键单击服务器的名称,然后选择“ 属性”。(最后一项)
  4. 在左下角,您可以在“ 服务器 ” 下看到服务器的实际名称(不是Connection,而是在其上方)。

这是服务器的名称,这是您应尝试连接的名称!不是Visual Studio所建议的!



1

在我的情况下,数据库在非标准端口上运行。检查您连接的端口是否与数据库正在运行的端口相同。如果有更多的SQL Server实例,请检查正确的实例。


0

您需要做的就是打开服务器防火墙上的相关端口。


6
不幸的是,这不是“您需要做的所有事情”。如上面公认的答案所述,还需要采取许多其他步骤。
2014年

2
实际上,就我而言,这就是我需要做的所有事情,因此被不公平地标记为实际有用的输入。
MagicalArmchair 2013年

1
在我打开端口1433时增加了一条规则。
GiddyUpHorsey

我认为可以说“很多事情必须保持一致,您需要采取的额外步骤将有所不同”
Mordachai 2014年

我必须先完成Kyralessa,Pete以及这一项的所有工作,然后才能获得Windows 10服务的SQL。
alfadog67

0

连接到SQL Server时遇到问题?

尝试断开防火墙连接。

如果您可以在断开防火墙连接的情况下进行连接,则可能是您错过了一些输入规则,例如“ sql service broker”,请将此输入规则添加到防火墙中:

“ SQL ADMIN连接” TCP端口1434

“ SQL ADMIN连接” UDP端口1434

“ SQL分析服务” TCP端口2383

“ SQL浏览分析服务” TCP端口2382

“ SQL DEBUGGER / RPC” TCP端口135

如果您有动态端口,则“ SQL SERVER” TCP PORT 1433和其他端口

“ SQL服务代理” TCP端口4022

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.