网络协议和 TDS 端点

当 SQL Server 数据库引擎 与应用程序通信时,它将使用称为“表格格式数据流”(TDS) 数据包的 Microsoft 通信格式来格式化通信数据。网络 SQL Server 网络接口 (SNI) 协议层替代了 SQL Server 2000 和 Microsoft 数据访问组件 (MDAC) 的 Net-Library,它将 TDS 数据包封装在标准通信协议(例如,TCP/IP 或 Named Pipes)内。SNI 协议层是数据库引擎和 SQL Server Native Client 共有的。SNI 协议层不是直接配置的。相反,服务器和 SQL Server Native Client 被配置为使用网络协议。然后,数据库引擎和 SQL Server Native Client 自动使用适当的协议设置。服务器为每个网络协议创建一个称为“TDS 端点”的 SQL Server 对象。在服务器中,TDS 端点是在 SQL Server 安装过程中由 SQL Server 安装的。

本主题介绍服务器如何创建和使用 TDS 端点。有关如何配置服务器的详细信息,请参阅配置服务器网络协议和网络库

在客户端计算机上,必须安装 SQL Server Native Client 并将其配置为使用服务器上所启用的网络协议。有关客户端的详细信息,请参阅配置客户端网络协议

安装后启用服务器协议

基本操作系统网络协议(如 TCP/IP)应已安装在客户端和服务器上。网络协议通常在 Windows 安装过程中安装;它们不是 SQL Server 安装的一部分。如果所需的网络协议不可用或未在服务器中配置,则数据库引擎将无法启动。如果所需的网络协议不可用或未在客户端上配置,则网络库将不起作用。

注意注意

在本主题的其他部分中,“启用协议”的意思是启用 SQL Server 协议,而不是启用操作系统协议。

在安装过程中通常不会为 SQL Server 启用与其他计算机上的 SQL Server 通信所需的网络协议。因此,若要从客户端计算机进行连接,可能需要启用 TCP/IP、Named Pipes 或 VIA 协议。(默认情况下,所有安装都启用 shared memory 协议,但只用于从同一计算机上客户端应用程序连接到数据库引擎。)有关为安装的类型启用哪个网络协议的信息,请参阅默认 SQL Server 网络配置

要启用网络协议,请使用 SQL Server 配置管理器。或者,可以通过在命令提示符下使用选项来在安装过程中启用协议。有关详细信息,请参阅如何从命令提示符安装 SQL Server 2008 R2

安装和配置了网络连接后,SQL Server 可以同时侦听任何服务器网络协议的组合。

定义的 TDS 端点

TDS 端点是表示 SQL Server 与客户端之间通信点的 SQL Server 对象。SQL Server 自动为 SQL Server 支持的四个协议分别创建一个端点。默认情况下,启用协议后所有用户都可以访问它们。如果没有启用网络协议,则端点仍然存在但不可用。附加端点为仅 sysadmin 固定服务器角色的成员可以使用的专用管理员连接 (DAC) 创建。

SQL Server 为每一个 TDS 端点生成唯一名称。下表显示了自动创建的端点。

用途

端点名称

Shared Memory

TSQL LocalMachine

Named Pipes

TSQL Named Pipes

TCP/IP

TSQL Default TCP

VIA

TSQL Default VIA

DAC

Dedicated Admin Connection

HTTP

HyperText Transport Protocol

对于 Named Pipes 和 Shared Memory 协议,每个实例只能有一个端点。对于这些协议类型没有可配置的端点。对于 TCP/IP 和 VIA,有默认端点,但可以创建附加端点。HTTP 端点也是用户创建的,它们不会显示在 SQL Server 配置管理器中。

重要说明重要提示

不推荐使用 VIA 协议。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

只可以在系统端点上更改所有者和状态(使用 ALTER ENDPOINT)。您不能禁用,但可以停止和启动默认端点。停止的端点仍在侦听,但它拒绝并关闭新的连接。

注意注意

默认情况下,配置客户端以尝试所有协议,直到其中一个协议运行。如果禁用 TCP/IP 协议,客户端将继续下一个协议。如果启用 TCP/IP 但停止了端点,则不拒绝连接尝试,所以客户端不会尝试其他协议,但又不能使用停止的连接。在此情况下,必须显式连接到活动的端点。

动态 TCP 端口通常连接到默认的 TCP 端点。

注册表中的协议设置

TDS 端点的设置记录在注册表中。用户应该使用 Transact-SQL 语句创建或更改端点并使用可以启动和停止端点的 SQL Server 配置管理器启用或禁用协议。

当用户更改注册表中的协议设置时,不会发生什么情况。注册表与元数据是分开的。

使用户连接与端点相关联

连接到数据库引擎时,SQL Server 将连接与特定端点相关联并确定连接登录名是否已获得使用该端点的权限。按下列方式关联连接:

  • 共享内存连接使用 TSQL LocalMachine 端点。

  • Named Pipes 连接使用 TSQL Named Pipes 端点。

  • 专用管理员连接使用 Dedicated Admin Connection 端点。

  • 默认情况下,TCP 连接使用 TSQL Default TCP 端点。如果为特定 TCP 端口创建了新的(用户定义的)TCP 端点,则到该 TCP 端口的连接将连接到该新端点。如果使用 IP_ANY 作为端口创建了新的 TCP/TSQL 端点,则 TCP 连接将连接到该新端点。

  • VIA 连接与 TCP 连接的处理方式相同。

用户定义的端点与默认端点的行为方式相同。当为一个 IP 地址(或使用 IP_ANY 为所有 IP 地址)和一个特定 TCP 端口创建端点时,将在称为“配置”的进程中授予用户连接到端点的权限。无论服务器实际上是否正在侦听 IP 地址/TCP 端口组合,它们都将保留配置。到 IP 地址和 TCP 端口的连接按以下顺序与端点匹配:

  1. 如果 IP 地址和 TCP 端口与端点的 IP 地址和 TCP 端口完全匹配,则使用端点。

  2. 如果没有完全匹配,则对所有 IP_ANY 端点检查 TCP 端口,如果列出了 TCP 端口,则使用该端点。

  3. 如果没有完全端口匹配,则使用默认 TCP 端点。

连接关联进程通常导致最多选择一个端点。将检查该端点的连接权限。如果用户不具有该端点的权限,则该进程将不搜索下一个端点。

示例:关联用户连接与端点

下例说明如何使用 IP 地址和 TCP 端口选择端点。假定服务器配置为侦听以下 IP 地址和 TCP 端口:

127.0.0.1:1533

进一步假定建立了以下 TCP 端点:

端点名称

配置值

Loopback

LISTENER_IP = 127.0.0.1,LISTENER_PORT = 1533

Remote

LISTENER_IP = ALL,LISTENER_PORT = 1533

TSQL Default TCP

未链接到任何 IP 地址或端口

存在三种可能的连接可能性:

  • 如果客户端使用 TCP 连接到 127.0.0.1:1533,则与会话相关联的端点将是 Loopback 端点,因为有与 Loopback 端点完全匹配的 IP 地址和 TCP 端口。

  • 如果客户端使用 TCP 连接到 251.40.20.151:1533,则没有与端点完全匹配的 IP 地址和 TCP 端口,但 Remote 可用于此连接,因为 Remote 在侦听任何 IP 地址和端口 1533。如果连接登录不具有对 Remote 端点的权限,则该进程将失败。连接登录将不尝试连接到它可能对其具有权限的其他端点,如 TSQL Default TCP。

  • 如果客户端使用 TCP 连接到 251.40.20.151:1433,则没有与端点完全匹配的 IP 地址和 TCP 端口,而且 TCP 端口 1533 与任何 IP 地址不匹配,但 TSQL Default TCP 可用于此连接,因为 TSQL Default TCP 在侦听任何 IP 地址和任何端口。

升级和/或安装

默认情况下,所有用户都能访问 TDS 端点(专用管理员连接端点除外)。因为这些端点是服务器在内部创建的,它们没有所有者而且不能使它们与特定的帐户相关联。

使用 Transact-SQL 管理端点

使用 Transact-SQL 创建和管理端点。使用 CREATE ENDPOINT 和 DROP ENDPOINT 语句来创建和删除端点。还有一些语句可以控制、更改以及取得端点的所有权。

若要使用 Transact-SQL 端点连接到 SQL Server 实例,用户必须具有对端点的 CONNECT 权限和对 SQL Server 的全局权限才能登录。在创建登录名时,将隐式授予用户对连接到默认端点的权限。使用 GRANT | DENY | REVOKE CONNECT ON ENDPOINT 管理对端点的访问权限。

创建一个新 TCP 端点时,SQL Server 将自动撤消对 TSQL Default TCP 端点的所有现有权限。有关如何创建新 TCP 端点的示例,请参阅如何将数据库引擎配置为侦听多个 TCP 端口

  • 若要限制对端点的访问权限,管理员可以拒绝 EVERYONE 组的权限(使用 DENY CONNECT 语句),然后为特定个人或角色授权(使用 GRANT CONNECT 语句)。

  • 若要将权限返回到原始状态,请授予 PUBLIC 组 GRANT CONNECT 权限。

  • 若要为特定应用程序提供端点,请授予除使用该应用程序的所有用户 DENY CONNECT 权限。

安全说明安全说明

使用端点的授权与端点的名称相关联。如果更改端点名称,则无法再正确应用安全限制(例如,DENY CONNECT 语句)。端口更改后,端点名称也会更改。如果 SQL Server 侦听动态端口,则该端口可能会更改,从而也会更改端点名称并删除关联的端点权限。为避免此安全风险,请不要在与动态端口相关联的端点上设置自定义权限,并且不要更改 TCP/IP 端点在注册表中出现的顺序。

有关如何设置端点安全性的详细信息,请参阅 GRANT 端点权限 (Transact-SQL)