406

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

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

我为解决此问题所做的工作:

  • 在服务器上运行 SQL Server 配置管理器并启用 SQL Server Browser
  • 在服务器上为本地子网上的 TCP、端口 1433 和 1434 添加 Windows 防火墙例外。
  • 验证我在桌面上登录的用户是否在 SQL Server 实例上登录。
  • 验证我是否在 SQL Server 实例上使用 Windows 身份验证。
  • 反复重启 SQL Server 和整个 dang 服务器。
  • 把我所有的头发都拉出来。

如何让 SQL Server 2012 Express 允许远程连接!?

4

17 回答 17

738

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

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

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

到目前为止,一切都很好,完全符合预期。但是之后:

  1. 右键单击 TCP/IP 并选择Properties
  2. 确认在 IP2 下,IP 地址设置为本地子网上的计算机 IP 地址。
  3. 向下滚动到 IPAll。
  4. 确保TCP 动态端口空白。(我的设置为一些 5 位数的端口号。)
  5. 确保TCP 端口设置为1433。(我的是空白的。)

(另外,如果您按照这些步骤操作,则无需启用 SQL Server Browser,您只需要允许端口 1433,而不是 1434。)

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

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

于 2012-06-30T22:21:34.707 回答
108

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

使用 ip 和端口而不是命名实例也更安全,因为它减少了攻击面。

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

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

在此处输入图像描述

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

在此处输入图像描述

于 2013-06-04T17:02:25.773 回答
34

还有一件事...

Kyralessa 提供了很好的信息,但即使在这篇文章之后,我还有一件事要补充。

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

在此处输入图像描述

于 2014-05-08T19:57:43.973 回答
18

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

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

Named Pipes 协议将在列表中排在第一位。将其降级,并提升 TCP/IP。

彻底测试应用程序。

我希望这会有所帮助。

于 2013-05-20T04:22:21.643 回答
15

您还可以设置

全部听NO

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

将启用设置为是,

定义您的 IP 地址,

将 TCP 动态设置为空白和

TCP端口到1433(或其他)

于 2012-11-26T11:52:24.923 回答
12

我最近遇到了这个问题。2015 年 8 月

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

  • SQL Server 网络配置 -> SQLEXPRESS 的协议
  • TCP/IP 上的属性 -> IP 地址选项卡
  • 一切都保持默认,只设置 IPALL: TCP Port to 1433

可以使用SQL Server Manager连接到机器:[hostaddress], 1433

例子:

在此处输入图像描述

于 2015-08-20T16:42:14.487 回答
11

这篇文章帮助了我...

如何在 SQL Server 中启用远程连接

SQL Server 中的所有内容都已配置,我的问题是防火墙阻止了端口 1433

于 2013-08-14T20:28:02.740 回答
6

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

于 2013-01-04T14:27:25.877 回答
5

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

于 2014-07-10T13:28:52.180 回答
3

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

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

Keep It Simple Stupid (KISS) 只需启用 Sql Server Browser 服务,然后在连接服务器时在 IP 后面添加 \SQLEXPRESS。

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

谢谢。

于 2014-03-03T16:46:35.317 回答
3

我必须通过配置管理器添加端口并在我的 sql 连接[host]\[db instance name],1433中添加端口号

注意 instancename 和 port 之间的 ,(逗号)

于 2015-04-30T21:43:56.863 回答
3

我在本地安装的 SQL Server 2014 命名实例中遇到了同样的问题。使用连接FQDN\InstanceName会失败,而仅使用我的hostname\InstanceName工作连接。例如:使用连接mycomputername\sql2014工作,但使用mycomputername.mydomain.org\sql2014没有。DNS 正确解析,在 SQL 配置管理器中启用了 TCP/IP,添加了 Windows 防火墙规则(然后关闭防火墙进行测试以确保它没有阻止任何内容),但这些都没有解决问题。

最后,我不得不在 SQL Server 上启动“ SQL Server Browser ”服务,从而解决了连接问题。

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

这个连接项目给了我关于 SQL Server Browser 服务的线索:https ://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine-姓名

  • 当您使用 wstst05\sqlexpress 作为服务器名称时,客户端代码将机器名称与实例名称分开,并将 wstst05 与 netbios 名称进行比较。我认为他们匹配没有问题,并且连接被认为是本地的。从那里,我们在不联系 SQL 浏览器的情况下检索所需的信息,并通过共享内存毫无问题地连接到 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/en-us/library/ms181087(v=sql.120).aspx

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

如果 SQL Server Browser 服务未运行,如果您提供正确的端口号或命名管道,您仍然可以连接到 SQL Server。例如,如果 SQL Server 在端口 1433 上运行,您可以使用 TCP/IP 连接到默认实例。但是,如果 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 Browser 的工作原理”部分的同一篇文章的更多信息:

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

于 2015-10-20T18:08:45.353 回答
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. 在左下角,您可以在“服务器”下看到您的服务器的实际名称(不是连接,而是在其上方)。

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

于 2013-01-24T12:20:41.417 回答
1

要检查的另一件事是您是否正确拼写了命名实例!

本文对解决连接问题非常有帮助:如何排除连接到 SQL Server 数据库引擎的故障

于 2014-06-19T10:35:44.473 回答
1

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

于 2015-09-02T19:22:05.410 回答
0

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

于 2013-01-10T21:43:38.167 回答
0

连接到 SQL Server 时遇到问题?

尝试断开防火墙。

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

“SQL 管理员连接”TCP 端口 1434

“SQL 管理员连接”UDP 端口 1434

“SQL 分析服务” TCP 端口 2383

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

“SQL 调试器/RPC” TCP 端口 135

"SQL SERVER" TCP PORT 1433 和其他,如果你有动态端口

“SQL 服务代理” TCP 端口 4022

于 2019-01-08T10:00:15.373 回答