ChatGPT解决这个技术问题 Extra ChatGPT

为 SQL Server Express 2012 启用远程连接

我刚刚在我的家庭服务器上安装了 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 允许远程连接!?

我通过启用 SQL Server Browser 服务解决了:D。感谢您发布它。
解锁 1433 UDP 端口对我有帮助!
如果您使用的是 Azure VM,请不要忘记通过 Azure 的管理门户打开端口(它充当 VM 自身防火墙的外部防火墙......)。像这样:stackoverflow.com/questions/34251382/…
对于那些想知道 Sql Server 配置管理器在较新版本中消失到哪里的人,head on over here

C
Cœur

嗯,glad I asked。我最终发现的解决方案在这里:

How do I configure SQL Server Express to allow remote tcp/ip connections on port 1433?

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

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

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

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

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

Configure a Server to Listen on a Specific TCP Port (SQL Server Configuration Manager)


如果 SQL Server Express 不是唯一的实例,则可能需要在其他实例上 UNASSIGN 端口 1433。我有一个 2008 R2 默认实例 (MSSQLSERVER),我可以从外部连接到它们的唯一方法是将端口 1433 分配给 2012 实例(如上所述)并将旧默认实例的端口分配更改为 TCP 动态端口 =“0”和 TCP 端口 =“”(空白)。反之则只能访问默认实例。
IPAll 设置是 SAVIOR 的建议!我的和你的一样... :D
以防它帮助其他任何人......这有帮助,但在我启动 SQL Server Browser 服务之前我仍然无法连接。 (注意:我必须进入 Windows“服务”应用程序来执行此操作,因为 SQL Server Browser 服务的启动类型由于某种原因被“禁用”。将启动类型更改为“自动”,启动服务,然后可以连接。)
在安装到 SQLEXPRESS 实例的 Windows 8 和 SQL 2012 Express SP1 上,我必须将动态端口设置为空白以外的任何内容(如果您将其删除,则设置为 0,然后它将为您重新计算一个新的随机端口)并且还打开 BOTH TCP高级防火墙控制面板中的 1433 和 UDP 1434 传入端口规则。当动态端口为空白时,SQL Server 刚在启动时挂起。
只是想说声谢谢和赞成。你为我节省了很多时间。您介意使用正确的连接语法更新您的帖子吗?我需要使用不带括号的 myserver\sqlexpress,[portnumber] 。注意它是 , 而不是 :
R
Rosdi Kasim

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

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

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

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

https://i.stack.imgur.com/ECI4t.jpg

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

https://i.stack.imgur.com/b1D3v.jpg


您能否通过说这是“正确”的方式来详细说明您的意思?
@Kyralessa Ha!...现在我在拉扯头发 4-5 小时试图连接到我的远程实例后再次清醒,我可能应该解释一下,这里的“正确”是要从我的上下文中读取的。由于我没有启用 SQL Server Browser,因此使用实例名称进行连接是“不正确的”。
为了避免误解,我在回答中添加了一些说明。
谢谢 ;) 当您无权运行浏览器服务时,您必须指定端口。
加 1 表示 MS 使用逗号而不是列作为端口号的分隔符
P
Pete

还有一件事...

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

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

https://i.stack.imgur.com/fLmzb.png


J
Jayron Soares

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

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

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

彻底测试应用程序。

我希望这会有所帮助。


哇,真是个宝石……谢谢。从来不知道它甚至存在。
这会将客户端配置为使用 TCP/IP,而不是服务器。
天哪,它的工作原理!刚刚登录投票给这个答案。谢谢
C
Community

您还可以设置

全部听NO

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

将启用设置为是,定义您的 IP 地址,将 TCP 动态设置为空白并将 TCP 端口设置为 1433(或其他)


在安装了 SQL 2012 Express SP1 的 Windows 8.1 上执行此操作会导致 SQL 在启动时挂起 :(
我将所有 IP 条目 1、2、...设置为启用 + 活动、删除动态、删除端口,并将 IPAll 端口设置为 1433,然后必须添加规则以在防火墙中打开 TCP 1433 和 UPD 1434(1434如果不使用名称,则不需要,仅使用端口号)。
D
DDan

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

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

SQL Server 网络配置 -> SQLEXPRESS 的协议

TCP/IP 上的属性 -> IP 地址选项卡

一切都保持默认,只设置 IPALL: TCP Port to 1433

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

例子:

https://i.stack.imgur.com/yaJZx.png


J
JGilmartin

这篇文章帮助了我...

How to enable remote connections in SQL Server

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


每个人都知道,或者很容易遇到 Azure 允许的端口配置。我没有想到该端口可能被 WINDOWS VM 防火墙阻止。谢谢。+1
P
Phil

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


快速说明:对我来说,这不起作用。由于某种原因,错误的IP在那里。然而,Kyralessa 的步骤起到了作用,因为它们涉及更新 IP。
这适用于我的一台服务器,但不适用于另一台服务器。
t
tom redfern

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


A
ALien

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

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

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

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

谢谢。


T
Toby Allen

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

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


C
Community

我在本地安装的 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-name

当您使用 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 端口或命名管道进行响应。客户端应用程序上的网络库然后通过使用所需实例的端口或命名管道向服务器发送请求来完成连接


M
MasterMastic

到目前为止,我遇到的所有答案都存在不同的问题!

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

好吧,上帝,这实际上很简单,也许有点愚蠢。当我尝试创建数据库并且 Visual Studio 建议 SQL Server 的名称时,它给了我我的 Windows 用户名,因为它实际上是我选择的服务器的名称。

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

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

打开 SQL Server 管理工作室图标。如果您没有看到您的服务器(默认停靠在左侧),请按 F8 或转到查看 -> 对象资源管理器。右键单击服务器名称并选择属性(最后一项) 在左下角,您可以在“服务器”下看到服务器的实际名称(不是连接,而是在它上方)。

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


M
Matt Burrell

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

本文对解决连接问题非常有帮助:How to Troubleshoot Connecting to the SQL Server Database Engine


T
Tomas Kubes

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


u
user1968210

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


不幸的是,这不是“你需要做的全部”。如上面接受的答案中所述,还有很多其他步骤需要采取。
实际上,在我的情况下,这就是我需要做的所有事情,所以不公平地降低了实际有用的输入。
添加规则以打开端口 1433 是为我修复它的原因。
我认为可以公平地说“很多事情必须保持一致,你需要哪些额外的步骤会有所不同”
我必须完成所有的 Kyralessa、Pete 和这个,然后才能让 Windows 10 服务 SQL。
P
Pau Dominguez

连接到 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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅