用户可能无法使用 TCP/IP 协议远程连接到 SQL Server

本文可帮助你解决无法使用 TCP/IP 协议远程连接到 SQL Server 的问题。

原始产品版本:SQL Server
原始 KB 数: 2018930

现象

使用 Microsoft SQL Server 时,可能会看到以下一个或多个症状:

此外,SQL Server Errorlog 文件中记录了以下消息:

  • 在 SQL Server 启动时:

    错误:26023,严重性:16,状态:1。
    服务器 TCP 提供程序无法侦听 ['any'ipv6<> 1963]。 TCP 端口已在使用中。
    错误:9692,严重性:16,状态:1。
    Service Broker 协议传输无法侦听端口 1963,因为它正在由另一个进程使用。

  • 对于失败的登录:

    SQL Server 2008 及更高版本:

    错误:18456,严重性:14,状态:11。
    用户“MyDomain\TestAcc”登录失败。 原因: 基于令牌的服务器访问验证失败,出现基础结构错误。 请检查以前的错误。

原因

使用 SQL Server 实例配置为使用的同一 端口为 Service Broker 配置 TCP 终结点 时,会发生此错误。 可以通过执行以下查询来获取终结点列表:

SELECT * FROM sys.tcp_endpoints

注意

如有关 sys.tcp_endpoints (Transact-SQL)的联机丛书主题中所述,此视图不包含有关 SQL Server 实例当前配置为使用的端口和协议的信息。 若要查找该信息,请参阅SQL Server 配置管理器

解决方法

  • 方法 1:使用 DROP ENDPOINT (Transact-SQL) 命令删除导致问题的终结点。

    例如,若要删除名为 TestEP 终结点的终结点,可以使用以下命令:

    DROP ENDPOINT TestEP
    
  • 方法 2:使用 ALTER ENDPOINT (Transact-SQL) 命令更改终结点以使用其他端口。

    例如,若要更改命名 TestEP 为使用不同的端口的终结点,可以使用以下命令:

    ALTER ENDPOINT TestEP as tcp (listener_port=1980)
    

详细信息

其他 TCP 终结点(如为数据库镜像创建的终结点)也可能出现类似的问题,SQL Server 启动时的错误消息会相应地更改。