用户可能无法使用 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)动态管理视图(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 启动时的错误消息会相应地更改。