可用性组和数据库镜像中的传输安全性

适用范围:SQL Server

传输安全性涉及身份验证,或者还涉及数据库间交换的消息的加密。 对于数据库镜像和 Always On 可用性组,身份验证和加密是在数据库镜像端点上配置的。 有关数据库镜像终结点的简介,请参阅数据库镜像终结点(SQL Server)。

身份验证

身份验证是验证用户是否具有其所声明的身份的过程。 数据库镜像端点之间的连接需要进行身份验证。 伙伴或见证服务器的连接请求(如果有)必须进行身份验证。

用于数据库镜像或 AlwaysOn 可用性组的服务器实例使用的身份验证类型是数据库镜像端点的一种属性。 数据库镜像端点可以使用两种类型的传输安全性功能:Windows 身份验证(安全支持提供程序接口 (SSPI))和基于证书的身份验证。

Windows 身份验证

在 Windows 身份验证下,每个服务器实例使用运行进程的 Windows 用户帐户的 Windows 凭据登录到另一端。 Windows 身份验证可能要求对登录帐户进行一些手动配置,如下所示:

  • 如果 SQL Server 的实例基于相同的域帐户作为服务运行,则无需额外配置。

  • 如果 SQL Server 的实例在不同的域帐户(位于同一域或受信任域中)下以服务形式运行,则必须在其他每个服务器实例上的 master 中创建各帐户的登录名,并且必须向该登录名授予对端点的 CONNECT 权限。

  • 如果 SQL Server 实例以 Network Service 帐户运行,则必须在每个其他服务器上的 master 中为每台主机计算机帐户(<domain-name>\<computer-name>$)创建登录名,并且必须向该登录名授予终结点上的 CONNECT 权限。 其原因在于,基于网络服务帐户运行的服务器实例使用主机的域帐户进行身份验证。

注意

有关使用Windows Authentication设置数据库镜像会话的示例,请参阅示例:使用Windows 身份验证配置数据库镜像

证书

在某些情况下,例如,当服务器实例不在受信任的域中,或者当SQL Server作为本地服务运行时,Windows身份验证不可用。 在这种情况下,对连接请求进行身份验证需要使用证书,而不是用户凭据。 每个服务器实例的镜像端点必须使用其自己的本地创建的证书进行配置。

创建证书时,将建立加密方法。 有关详细信息,请参阅 数据库镜像 - 将证书用于出站连接。 请务必小心管理您使用的证书。

建立连接时,服务器实例使用其证书的私钥建立自己的标识。 接收连接请求的服务器实例使用发送方证书的公钥对发送方的标识进行身份验证。 例如,考虑两个服务器实例, Server_A 以及 Server_BServer_A 在向 Server_B 发送连接请求之前,使用其私钥对连接标头进行加密。 Server_B 使用证书的 Server_A公钥解密连接标头。 如果解密的标头正确, Server_B 则知道标头已加密 Server_A,并且连接已经过身份验证。 如果解密的标头不正确, Server_B 则知道连接请求未经身份验证并拒绝连接。

数据加密

默认情况下,数据库镜像端点要求加密通过镜像连接发送的数据。 在这种情况下,端点只能连接到也使用加密的端点。 除非您可以保证您的网络是安全的,否则我们建议您对数据库镜像连接加密。 但是,您可以禁用加密或支持加密(不是必需的)。 如果禁用加密,则永远不会加密数据,终结点无法连接到需要加密的终结点。 如果支持加密,则只有另一端点也支持或要求加密时,数据才会加密。

注意

SQL Server Management Studio 创建的镜像端点可以使用必需加密或禁用加密的方式来创建。 若要将加密设置 SUPPORTED更改为,请使用 ALTER ENDPOINT Transact-SQL 语句。 有关详细信息,请参阅 ALTER ENDPOINT

或者,您可以通过在 CREATE ENDPOINT 语句或 ALTER ENDPOINT 语句中为 ALGORITHM 选项指定以下值之一,来控制端点可使用的加密算法:

ALGORITHM 说明
RC4 (默认值) 指定端点必须使用 RC4 算法。

警告:RC4 算法已弃用。 在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 我们建议使用 AES。
AES (建议) 指定端点必须使用 AES 算法。
AES RC4 指定两个终结点协商加密算法,此终结点优先使用 AES 算法。
RC4 AES 指定两个终结点协商加密算法,此终结点优先使用 RC4 算法。

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

注意

尽管 RC4 远远快于 AES,但它是一个相对较弱的算法,而 AES 是一个相对较强的算法。 因此,应使用 AES 算法。

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

有关用于指定加密的 Transact-SQL 语法的信息,请参阅 CREATE ENDPOINT

为数据库镜像终结点配置传输安全性