CREATE ENDPOINT (Transact-SQL)

适用范围:SQL Server

创建端点并定义其属性,包括可用于客户端应用程序的方法。 有关相关权限信息,请参阅 GRANT 终结点权限

逻辑上可以划分为两部分的 CREATE ENDPOINT 语法:

  • 第一部分以 AS 开头,并在子句之前 FOR 结束。

    在此部分中,需要提供传输协议 (TCP) 特定的信息,设置端点的侦听端口号,以及设置端点身份验证的方法和/或要限制访问端点的 IP 地址列表(如果有的话)。

  • 第二部分以 FOR 子句开头。

    在此部分中,需要定义端点上所支持的负载。 有效负载可以为以下多种支持类型中的一种:Transact-SQL、Service Broker、数据库镜像。 在此部分中,还需要提供语言特定信息。

Transact-SQL 语法约定

语法

CREATE ENDPOINT endPointName [ AUTHORIZATION login ]
[ STATE = { STARTED | STOPPED | DISABLED } ]
AS { TCP } (
    <protocol_specific_arguments>
)
FOR { TSQL | SERVICE_BROKER | DATABASE_MIRRORING } (
    <language_specific_arguments>
)

<AS TCP_protocol_specific_arguments> ::=
AS TCP (
    LISTENER_PORT = listenerPort
    [ [ , ] LISTENER_IP = ALL | ( four_part_ipv4_address ) | ( 'ip_address_v6' ) ]
)

<FOR TSQL_language_specific_arguments> ::=
FOR TSQL (
    [ ENCRYPTION = { NEGOTIATED | STRICT } ]
)

<FOR SERVICE_BROKER_language_specific_arguments> ::=
FOR SERVICE_BROKER (
    [ AUTHENTICATION = {
          WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ]
          | CERTIFICATE certificate_name
          | WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] CERTIFICATE certificate_name
          | CERTIFICATE certificate_name WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ]
    } ]
    [ [ , ] ENCRYPTION = {
          DISABLED
          | { SUPPORTED | REQUIRED }
            [ ALGORITHM { AES | RC4 | AES RC4 | RC4 AES } ]
    } ]
    [ [ , ] MESSAGE_FORWARDING = { ENABLED | DISABLED } ]
    [ [ , ] MESSAGE_FORWARD_SIZE = forward_size ]
)

<FOR DATABASE_MIRRORING_language_specific_arguments> ::=
FOR DATABASE_MIRRORING (
    [ AUTHENTICATION = {
          WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ]
          | CERTIFICATE certificate_name
          | WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] CERTIFICATE certificate_name
          | CERTIFICATE certificate_name WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ]
    } ]
    [ [ , ] ENCRYPTION = {
          DISABLED
          | { SUPPORTED | REQUIRED }
            [ ALGORITHM { AES | RC4 | AES RC4 | RC4 AES } ]
    } ]
    [ , ] ROLE = { WITNESS | PARTNER | ALL }
)

参数

endPointName

要创建的终结点的分配名称。 在更新或删除端点时使用。

AUTHORIZATION login

指定被分配了新创建的终结点对象的所有权的有效 SQL Server 或 Windows 登录帐户。 如果未指定 AUTHORIZATION,则默认情况下,调用方将成为新创建对象的所有者。

若要通过指定 AUTHORIZATION 分配所有权,调用方必须对指定的 login 具有 IMPERSONATE 权限。

选项 AUTHORIZATION 在 . 中 ALTER ENDPOINT不可用。 只能在创建端点时分配所有权。

若要重新分配所有权,请参阅 DROP ENDPOINT ,然后返回到本文以重新创建终结点。

STATE = { STARTED |STOPPED |DISABLED }

创建终结点时的状态。 如果在创建终结点时未指定状态, STOPPED 则为默认值。

STARTED

端点已启动并在积极地侦听连接。

DISABLED

端点被禁用。 在该状态下,服务器侦听端口请求但向客户端返回错误。

停止

端点被停止。 在此状态下,服务器不会侦听终结点端口或响应任何尝试使用终结点的请求。

若要更改状态,请使用 ALTER ENDPOINT

AS { TCP }

指定要使用的传输协议。

FOR { TSQL |SERVICE_BROKER |DATABASE_MIRRORING }

指定负载类型。

当前,没有要传入 <language_specific_arguments> 参数的特定于 Transact-SQL 语言的自变量。

TCP 协议选项

下列参数仅适用于 TCP 协议选项。

LISTENER_PORT = listenerPort

指定 Service Broker TCP/IP 协议在其上侦听连接的端口号。 按照约定,将使用 5022,但 1024 和 32767 之间的任何数字都有效。

LISTENER_IP = ALL |(four_part_ipv4_address) |(“ip_address_v6” )

指定端点将侦听的 IP 地址。 默认值为 ALL。 这表示侦听器将接受任何有效 IP 地址上的连接。

如果使用 IP 地址而不是完全限定的域名(ALTER DATABASE SET PARTNER = partner_IP_addressALTER DATABASE SET WITNESS = witness_IP_address)配置数据库镜像,则必须指定 LISTENER_IP =IP_address ,而不是 LISTENER_IP=ALL 创建镜像终结点时。

T-SQL 选项

ENCRYPTION = { NEGOTIATED |STRICT }

适用于:SQL Server 2022 (16.x) 及更高版本

指定在此过程中如何使用加密。 默认值为 NEGOTIATED,出于兼容性原因。

谈判

在服务器和客户端之间协商连接的方式。 建立的实际连接可以加密:

  • 仅 LOGIN7 消息。
  • 除 PRELOGIN 之外的所有消息。
  • 所有消息。

严格

指定发送到此终结点的所有消息都必须加密,并且终结点不会提供回退证书。 如果 TLS 标头不是第一条消息,服务器会中断连接。

SERVICE_BROKER和DATABASE_MIRRORING选项

以下 AUTHENTICATION 参数和 ENCRYPTION 参数是 SERVICE_BROKER 常见的和 DATABASE_MIRRORING 选项。

备注

有关特定于 SERVICE_BROKER的选项,请参阅本节后面的 SERVICE_BROKER选项 。 有关特定于 DATABASE_MIRRORING的选项,请参阅本节后面的 DATABASE_MIRRORING选项

AUTHENTICATION = <authentication_options>

指定此端点连接需要的 TCP/IP 身份验证。 默认值是 WINDOWS

支持的身份验证方法包括 NTLM 和/或 Kerberos。

重要

服务器实例上所有的镜像连接都只使用一个数据库镜像端点。 任何创建其他数据库镜像端点的尝试都将失败。

WINDOWS [ { NTLM |KERBEROS |NEGOTIATE } ]

指定端点使用 Windows 身份验证协议进行连接以验证端点。 这是默认值。

如果指定授权方法(NTLMKERBEROS),该方法始终用作身份验证协议。 默认值 NEGOTIATE会导致终结点使用 Windows 协商协议选择 NTLM 或 Kerberos。

CERTIFICATE certificate_name

指定端点使用 certificate_name 指定的证书验证连接以建立授权标识。 远端点必须具有其公钥与指定证书的私钥相匹配的证书。

WINDOWS [ { NTLM |KERBEROS |NEGOTIATE } ] 证书 certificate_name

指定端点通过使用 Windows 身份验证尝试进行连接;如果该尝试失败,则尝试使用指定的证书。

证书 certificate_name WINDOWS [ { NTLM |KERBEROS |NEGOTIATE } ]

指定端点通过使用指定的证书尝试进行连接;如果该尝试失败,则尝试使用 Windows 身份验证。

ENCRYPTION = { DISABLED |支持 |REQUIRED } [ ALGORITHM { AES |RC4 |AES RC4 |RC4 AES } ]

指定是否在过程中使用加密。 默认值为 REQUIRED

DISABLED

指定未加密通过连接发送的数据。

SUPPORTED

指定仅当相反的终结点指定 SUPPORTEDREQUIRED相反的终结点时,数据才会加密。

REQUIRED

指定与此端点的连接必须使用加密。 因此,若要连接到此终结点,另一个终结点必须 ENCRYPTION 已设置为或 SUPPORTEDREQUIRED

(可选)可以使用 ALGORITHM 参数指定终结点使用的加密形式,如下所示:

AES

指定端点必须使用 AES 算法。 这是 SQL Server 2016 (13.x) 及更高版本中的默认值。

RC4

指定端点必须使用 RC4 算法。 这是 SQL Server 2014 (12.x) 中的默认值。

备注

RC4 算法仅用于支持向后兼容性。 仅当数据库兼容级别为 90 或 100 时,才能使用 RC4 或 RC4_128 对新材料进行加密。 (建议不要使用。)而是使用一种较新的算法,如 AES 算法之一。 在 SQL Server 2012 (11.x) 和更高版本中,可以在任何兼容性级别对使用 RC4 或 RC4_128 加密的材料进行解密。

AES RC4

指定两个端点将与优先使用 AES 算法的此端点协商加密算法。

RC4 AES

指定两个端点将与优先使用 RC4 算法的此端点协商加密算法。

备注

不推荐使用 RC4 算法。 在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 我们建议使用 AES。

如果两个端点都指定了这两种算法,但顺序不同,则接受连接的端点入选。

SERVICE_BROKER选项

以下参数特定于 SERVICE_BROKER 该选项。

MESSAGE_FORWARDING = { ENABLED |DISABLED }

确定是否将转发此端点所收到的位于其他位置的服务的消息。

ENABLED

如果转发地址可用,则转发消息。

DISABLED

放弃位于其他位置的服务的消息。 这是默认值。

MESSAGE_FORWARD_SIZE = forward_size

指定存储要转发的消息时为要使用的端点分配的最大存储量 (MB)。

DATABASE_MIRRORING选项

下列参数专用于 DATABASE_MIRRORING 选项。

ROLE = { WITNESS |合作伙伴 |ALL }

指定端点支持的数据库镜像角色(一个或多个)。

WITNESS

启用要在镜像过程中以见证角色执行的端点。

备注

对于 SQL Server 2005 Express 版本, WITNESS 是唯一可用的选项。

PARTNER

启用要在镜像过程中以伙伴角色执行的端点。

ALL

启用要在镜像过程中以见证角色兼伙伴角色执行的端点。

有关这些角色的详细信息,请参阅数据库镜像 (SQL Server)

备注

DATABASE_MIRRORING没有默认端口。

备注

ENDPOINT DDL 语句不能在用户事务内执行。 ENDPOINT DDL 即使活动快照隔离级别事务正在使用正在更改的终结点,语句也不会失败。

可通过以下方式对 ENDPOINT 请求执行:

  • sysadmin 固定服务器角色的成员

  • 端点的所有者

  • 已授予 CONNECT 终结点权限的用户或组

权限

要求具有 CREATE ENDPOINT 权限,或者具有 sysadmin 固定服务器角色的成员身份。 有关详细信息,请参阅 GRANT 终结点权限

示例

创建数据库镜像终结点

下面的示例创建一个数据库镜像端点。 该端点使用端口号 7022,也可以使用任何可用的端口号。 该端点配置为使用只使用 Kerberos 的 Windows 身份验证。 ENCRYPTION 选项配置为 SUPPORTED 的非默认值以支持加密或未加密数据。 该端点目前配置为同时支持伙伴和见证角色。

CREATE ENDPOINT endpoint_mirroring
    STATE = STARTED
    AS TCP (LISTENER_PORT = 7022)
    FOR DATABASE_MIRRORING (
            AUTHENTICATION = WINDOWS KERBEROS,
            ENCRYPTION = SUPPORTED,
            ROLE = ALL);
GO

新建指向特定 IPv4 地址和端口的终结点

CREATE ENDPOINT ipv4_endpoint_special
STATE = STARTED
AS TCP (
    LISTENER_PORT = 32766,
    LISTENER_IP = (10.0.75.1)
)
FOR TSQL ();

-- Keep existing public permission on default endpoint for demo purpose
GRANT CONNECT ON ENDPOINT::[TSQL Default TCP] TO public; 

GRANT CONNECT ON ENDPOINT::ipv4_endpoint_special TO login_name;

新建指向特定 IPv6 地址和端口的终结点

CREATE ENDPOINT ipv6_endpoint_special STATE = STARTED AS TCP (
    LISTENER_PORT = 32766,
    LISTENER_IP = ('::1')
)
FOR TSQL();

GRANT CONNECT ON ENDPOINT::[TSQL Default TCP] TO PUBLIC;

GRANT CONNECT ON ENDPOINT::ipv6_endpoint_special TO PUBLIC;

使用严格加密创建新终结点

CREATE ENDPOINT [TDSSConnection]
STATE = STARTED
AS TCP (
    LISTENER_PORT = 1433,
    LISTENER_IP = ALL
)
FOR TSQL (
    ENCRYPTION = STRICT
);
GO