如何允许数据库镜像使用证书进行出站连接 (Transact-SQL)

本主题说明配置服务器实例以使用证书对数据库镜像的出站连接进行身份验证的步骤。必须配置出站连接,才可以设置入站连接。

注意注意

服务器实例上的所有镜像连接都使用单个数据库镜像端点,必须在创建端点时指定服务器实例的身份验证方法。

配置出站连接的进程分为以下基本步骤:

  1. master 数据库中,创建数据库主密钥。

  2. master 数据库中,为服务器实例创建加密证书。

  3. 使用服务器实例的证书为该服务器实例创建端点。

  4. 将证书备份到文件,并将其安全地复制到其他系统。

必须对每一个伙伴和见证服务器(如果存在)完成以上步骤。

下面的过程详细说明了这些步骤。对于每个步骤,该过程都提供了一个在名为 HOST_A 的系统上配置服务器实例的示例。随附的示例说明了在名为 HOST_B 的系统上配置另一服务器实例的步骤(步骤相同)。

过程

配置用于出站镜像连接的服务器实例(在 HOST_A 上)

  1. master 数据库上,创建数据库主密钥(如果不存在)。若要查看数据库的现有密钥,请使用 sys.symmetric_keys 目录视图。

    若要创建数据库主密钥,请使用下面的 Transact-SQL 命令:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';
    GO
    

    使用唯一的强密码,并将其记录到一个安全的位置。

    有关详细信息,请参阅 CREATE MASTER KEY (Transact-SQL)如何创建数据库主密钥

  2. master 数据库中,对服务器实例创建一个用于其数据库镜像出站连接的加密证书。

    例如,为 HOST_A 系统创建一个证书。

    重要说明重要提示

    如果您想要多年使用该证书,则通过在您的 CREATE CERTIFICATE 语句中使用 EXPIRY_DATE 选项,以 UTC 时间指定到期日期。此外,我们建议您使用 SQL Server Management Studio 来创建基于策略的管理规则,以便在您的证书快要到期时提醒您。使用策略管理的“创建新条件”对话框,在“证书”方面的 @ExpirationDate 字段中创建此规则。有关详细信息,请参阅使用基于策略的管理来管理服务器教程:使用基于策略的管理来管理服务器保护 SQL Server

    USE master;
    CREATE CERTIFICATE HOST_A_cert 
       WITH SUBJECT = 'HOST_A certificate for database mirroring', 
       EXPIRY_DATE = '11/30/2013';
    GO
    

    有关详细信息,请参阅 CREATE CERTIFICATE (Transact-SQL)

    若要查看 master 数据库中的证书,可以使用下面的 Transact-SQL 语句:

    USE master;
    SELECT * FROM sys.certificates;
    

    有关详细信息,请参阅 sys.certificates (Transact-SQL)

  3. 确保每个服务器实例上都存在数据库镜像端点。

    如果服务器实例上已存在数据库镜像端点,则您应将该端点重新用于在服务器实例上建立的任何其他会话。若要确定服务器实例上是否存在数据库镜像端点并查看其配置,请使用下面的语句:

    SELECT name, role_desc, state_desc, connection_auth_desc, encryption_algorithm_desc 
       FROM sys.database_mirroring_endpoints;
    

    如果端点不存在,请创建一个端点,该端点使用此证书进行出站连接,并使用此证书的凭据通过其他系统的验证。这是一个服务器范围内的端点,供服务器实例参与的所有镜像会话使用。

    例如,为 HOST_A 上的示例服务器实例创建镜像端点。

    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (
          LISTENER_PORT=7024
          , LISTENER_IP = ALL
       ) 
       FOR DATABASE_MIRRORING ( 
          AUTHENTICATION = CERTIFICATE HOST_A_cert
          , ENCRYPTION = REQUIRED ALGORITHM AES
          , ROLE = ALL
       );
    GO
    

    有关详细信息,请参阅 CREATE ENDPOINT (Transact-SQL)

  4. 备份证书并将其复制到其他系统。若要在其他系统上配置入站连接,此步骤是必需的。

    BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\HOST_A_cert.cer';
    GO
    

    有关详细信息,请参阅 BACKUP CERTIFICATE (Transact-SQL)

    使用您选择的任何安全方法复制此证书。必须格外小心地保证所有证书的安全。

前面步骤中的示例代码将在 HOST_A 上配置出站连接。

您现在需要对 HOST_B 执行相同的出站步骤。下面的“示例”一节说明了这些步骤。

示例

下面的示例说明了如何配置 HOST_B 以进行出站连接。

USE master;
--Create the database Master Key, if needed.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>';
GO
-- Make a certifcate on HOST_B server instance.
CREATE CERTIFICATE HOST_B_cert 
   WITH SUBJECT = 'HOST_B certificate for database mirroring', 
   EXPIRY_DATE = '11/30/2013';
GO
--Create a mirroring endpoint for the server instance on HOST_B.
CREATE ENDPOINT Endpoint_Mirroring
   STATE = STARTED
   AS TCP (
      LISTENER_PORT=7024
      , LISTENER_IP = ALL
   ) 
   FOR DATABASE_MIRRORING ( 
      AUTHENTICATION = CERTIFICATE HOST_B_cert
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE = ALL
   );
GO
--Backup HOST_B certificate.
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\HOST_B_cert.cer';
GO 
--Using any secure copy method, copy C:\HOST_B_cert.cer to HOST_A.

使用您选择的任何安全方法将证书复制到其他系统。必须格外小心地保证所有证书的安全。

重要说明重要提示

在建立出站连接之后,必须在每个服务器实例上为其他服务器实例配置入站连接。有关详细信息,请参阅如何允许数据库镜像将证书用于入站连接 (Transact-SQL)

有关创建镜像数据库的信息,以及 Transact-SQL 示例,请参阅 如何为镜像准备镜像数据库 (Transact-SQL)

有关建立高性能模式会话的 Transact-SQL 示例,请参阅示例:使用证书设置数据库镜像 (Transact-SQL)

安全性

建议您对数据库镜像连接进行加密,除非您能够保证网络的安全。

将证书复制到其他系统时,请使用安全的复制方法。

更改历史记录

更新的内容

添加了有关在 CREATE CERTIFICATE 语句中使用 EXPIRY_DATE 选项的说明,并更新了使用此选项的代码示例。