允许数据库镜像终结点将证书用于出站连接(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 示例)的信息,请参阅“准备镜像数据库进行镜像”(SQL Server)。

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

.NET Framework 安全性

除非可以保证网络安全,否则建议对数据库镜像连接使用加密。

将证书复制到另一个系统时,请使用安全复制方法。

另请参阅

选择加密算法
为镜像准备镜像数据库 (SQL Server)
ALTER ENDPOINT (Transact-SQL)
示例:使用证书设置数据库镜像(Transact-SQL)
数据库镜像端点 (SQL Server)
数据库镜像配置疑难解答 (SQL Server)
设置加密的镜像数据库