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

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

原始产品版本:SQL Server
原始 KB 编号: 2018930

症状

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

  • 例如,只有具有 CONTROL SERVER 权限的用户 (syadmin 固定服务器角色) 的成员才能通过 TCP/IP 进行连接。 没有此权限的用户无法使用 Windows 或SQL Server身份验证通过 TCP/IP 协议进行远程连接。

    注意

    你会注意到,提升的用户连接仅显示在 sys.dm_exec_sessions (Transact-SQL) Dynamic Management View (DMV) 中,而不显示在 sys.dm_exec_connections (Transact-SQL) 视图中。

  • 使用命名管道协议的本地和远程连接以及使用共享内存协议的本地连接继续正常工作。

此外,以下消息将记录在 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启动时的错误消息将相应地更改。