一、问题描述

有时,您可能会在连接到 SQL Server 时遇到问题,并且可能会收到如下消息:

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_IP

 

这些错误可能是针对 命名管道连接或 TCP/IP连接。在本技巧中,我们将探讨导致这些错误的原因以及解决方法。

二、解决方案

您收到这些错误消息的原因可能有多种。请按照以下步骤查看是否可以解决该问题。

第 1 步 - 检查是否可以 ping SQL Server 框

确保您能够从客户端计算机 ping 通安装了 SQL Server 的物理服务器。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_SQL_02

如果这不起作用,您可以尝试仅使用IP 地址(对于默认实例)或命名实例的IP 地址\实例名称来连接到 SQL Server。

如果可以使用 IP 地址进行连接,则可以将 SQL Server 计算机添加到主机文件中。要在主机文件中添加条目,请打开位于%SystemRoot%\system32\drivers\etc\ 中的文件,并使用记事本添加信息。

例如,假设我的服务器 SQLDBPool 使用 IP 地址 74.200.243.253,我可以将其添加到主机文件中,并使用 SQLDBPool 的计算机名称。现在我应该能够使用计算机名称而不是 IP 地址来连接到 SQL Server。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_Server_03

步骤 2 - 检查 SQL 服务是否正在运行

确保 SQL 服务正在运行。您可以使用SC命令打开SQL Server 配置管理器来检查 SQL Server 服务。很多时候您可能会发现 SQL Server 实例没有运行。

使用 SQL Server 配置管理器

您可以使用 SQL Server 配置管理器来确保服务正在运行。如果由于某种原因您 找不到 SQL Server 配置管理器,请查看本文。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_Server_04

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_Server_05

使用SC命令

您可以从 Windows 命令行发出以下命令来查看服务的状态。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_SQL_06

请注意,对于命名实例,您必须使用正确的实例名称编写如下命令,将instancename替换为实际的 SQL Server 实例名称。

sc query mssql$instancename

步骤 3 - 检查 SQL Server Browser 服务是否正在运行

检查 SQL Server Browser 服务是否正在运行。如果您已安装 SQL Server 命名实例且未配置特定 TCP/IP 端口,则传入请求将在动态端口上侦听。要解决此问题,您需要启用并运行 SQL Server Browser 服务。您可以使用SQL Server 配置管理器(请参阅步骤 2) 或SC命令检查浏览器服务状态,如下所示。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_IP_07

步骤 4 - 检查您使用的 SQL Server 实例名称是否正确

确保您使用正确的实例名称。当您连接到默认实例时,machinename是实例名称的最佳代表,而当您连接到命名实例(例如 sqlexpress)时,您需要按如下所示指定实例名称:machinename\instancename,其中您在 instancename 中输入 SQL Server 实例名称。

第 5 步 - 检查是否可以找到 SQL Server

检查 SQL Server 是否在网络中。您可以使用SQLCMD -L命令检索网络中安装的 SQL Server 列表。请注意,如果 SQL Server Browser 服务正在运行,这只会返回 SQL Server。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_Server_08

步骤 6 - 检查 TCP/IP 和命名管道是否已启用

检查 TCP/IP 和命名管道协议和端口。打开 SQL Server 配置管理器并检查 SQL Server 网络配置协议。您应该启用命名管道和 TCP/IP 协议。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_SQL_09

对于 TCP/IP 协议,右键单击并选择属性,也可以检查 TCP/IP 通信端口。默认端口为 1433,如果需要,可以出于安全目的更改该端口。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_Server_10

步骤 7 - 检查是否已启用允许远程连接此服务器

检查是否启用了允许此服务器的远程连接。在 SSMS 中,右键单击实例名称并选择属性。转到“连接”选项卡并确保选中“允许远程连接到此服务器” 。如果需要进行更改,则必须重新启动 SQL Server 实例才能应用更改。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_Server_11

您还可以使用以下命令配置远程服务器连接。如果进行更改,则需要重新启动 SQL Server 才能生效。

下面的设置与上图中的设置等效。

exec sp_configure "remote access", 1          -- 0 on, 1 off
exec sp_configure "remote query timeout", 600 -- seconds
exec sp_configure "remote proc trans", 0      -- 0 on, 1 off

步骤 8 - 检查 SQL Server 正在使用的端口号

本地连接到 SQL Server 并检查端口条目的错误日志。您可以执行 XP_READERRORLOG 过程来读取错误或通过转至管理 > SQL Server 日志并选择当前日志来使用 SSMS。滚动到错误日志中第一个条目的底部,查找类似于下面的条目,其中显示命名管道和 TCP/IP 已启用,并且用于 TCP/IP 的端口在本例中为 1433。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_IP_12

步骤 9 - 检查防火墙是否未阻止对 SQL Server 的访问

为 SQL Server 端口和 SQL Server Browser 服务配置 Windows 防火墙。转到“控制面板”并单击“Windows 防火墙”,转到例外选项卡。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_Server_13

单击添加端口...并输入端口号和名称。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_SQL_14

单击“添加程序...”以添加 SQL Server Browser 服务。这里您需要获取浏览器服务可执行路径,通常它位于 C:\Program Files\Microsoft SQL Server\90\Shared location for SQL 2005 或类似的其他版本的 SQL Server。浏览位置并将 SQLBrowser.exe 添加到例外列表中。

防火墙找开SQL Server 连接 error40无法打开到sqlserver的连接 无法打开sql server的连接40_IP_15

步骤 10 - 检查服务主体名称是否已注册

如果您能够通过物理登录到服务器来连接到 SQL Server,但无法从客户端计算机进行连接,则在查询窗口中执行以下查询来检查 SPN。

-- run this command to see if SPN is not found
EXEC xp_readerrorlog 0,1,"could not register the Service Principal Name",Null


如果SQL运行在域用户下,服务器也在域中,能通过IP连接,但是不能通过计算机名连接,测试计算机名也能正确解析

   最后通过setspn解决

setspn -D MSSQLSvc/<servername.domainname>:1433 <servername>
setspn -D MSSQLSvc/<servername.domainname> <servername>