允许数据库镜像端点使用证书进行入站连接(Transact-SQL)

本主题介绍配置服务器实例以使用证书对数据库镜像的入站连接进行身份验证的步骤。 在设置入站连接之前,必须在每个服务器实例上配置出站连接。 有关详细信息,请参阅 “允许数据库镜像终结点使用证书进行出站连接(Transact-SQL)”。

配置入站连接的过程涉及以下常规步骤:

  1. 为其他系统创建登录名。

  2. 为该登录名创建用户。

  3. 获取其他服务器实例的镜像终结点的证书。

  4. 将证书与在步骤 2 中创建的用户相关联。

  5. 对该镜像终结点的登录授予 CONNECT 权限。

如果有见证,则还必须为其设置入站连接。 这需要为两个合作伙伴的见证服务器设置登录名、用户和证书,反之亦然。

以下过程详细介绍了这些步骤。 对于每个步骤,该过程都提供了一个示例,用于在名为 HOST_A 的系统上配置服务器实例。 随附的“示例”部分演示了名为 HOST_B 的系统上另一个服务器实例的相同步骤。

为入站镜像连接配置服务器实例(HOST_A)

  1. 为其他系统创建登录名。

    以下示例在 HOST_A 上的服务器实例 的主 数据库中为系统HOST_B创建登录名;在此示例中,登录名命名 HOST_B_login。 将自己的密码替换为示例密码。

    USE master;  
    CREATE LOGIN HOST_B_login   
       WITH PASSWORD = '1Sample_Strong_Password!@#';  
    GO  
    

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

    若要查看此服务器实例上的登录名,可以使用以下 Transact-SQL 语句:

    SELECT * FROM sys.server_principals;  
    

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

  2. 为该登录名创建用户。

    以下示例为上一步中创建的登录名创建一个用户 HOST_B_user

    USE master;  
    CREATE USER HOST_B_user FOR LOGIN HOST_B_login;  
    GO  
    

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

    若要查看此服务器实例上的用户,可以使用以下 Transact-SQL 语句:

    SELECT * FROM sys.sysusers;  
    

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

  3. 获取其他服务器实例的镜像终结点的证书。

    如果尚未在配置出站连接时执行此作,请获取远程服务器实例镜像终结点的证书副本。 为此,请备份该服务器实例上的证书,如 “允许数据库镜像终结点使用证书进行出站连接(Transact-SQL)”中所述。 将证书复制到另一个系统时,请使用安全复制方法。 请非常小心,确保所有证书的安全。

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

  4. 将证书与在步骤 2 中创建的用户相关联。

    以下示例将HOST_B证书与其HOST_A上的用户相关联。

    USE master;  
    CREATE CERTIFICATE HOST_B_cert  
       AUTHORIZATION HOST_B_user  
       FROM FILE = 'C:\HOST_B_cert.cer'  
    GO  
    

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

    若要查看此服务器实例上的证书,请使用以下 Transact-SQL 语句:

    SELECT * FROM sys.certificates;  
    

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

  5. 授予登录远程镜像终结点的 CONNECT 权限。

    例如,要在 HOST_A 上向 HOST_B 上的远程服务器实例授予权限,以便连接到其本地登录——即连接到 HOST_B_login——请使用以下 Transact-SQL 语句:

    USE master;  
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];  
    GO  
    

    有关详细信息,请参阅授予终结点权限 (Transact-SQL)

这将完成设置证书身份验证,以便HOST_B登录到HOST_A。

现在,您需要在HOST_B上执行与HOST_A等效的入站步骤。 示例部分中的入站部分展示了这些步骤。

示例:

以下示例演示如何为入站连接配置HOST_B。

注释

此示例使用一个包含HOST_A证书的证书文件,该证书是通过“允许数据库镜像终结点使用证书进行出站连接”(Transact-SQL)中的代码段创建的。

USE master;  
--On HOST_B, create a login for HOST_A.  
CREATE LOGIN HOST_A_login WITH PASSWORD = 'AStrongPassword!@#';  
GO  
--Create a user, HOST_A_user, for that login.  
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;  
GO  
--Obtain HOST_A certificate. (See the note   
--   preceding this example.)  
--Asscociate this certificate with the user, HOST_A_user.  
CREATE CERTIFICATE HOST_A_cert  
   AUTHORIZATION HOST_A_user  
   FROM FILE = 'C:\HOST_A_cert.cer';  
GO  
--Grant CONNECT permission for the server instance on HOST_A.  
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO HOST_A_login;  
GO  

如果打算在具有自动故障转移的高安全模式下运行,则必须重复相同的设置步骤,为出站和入站连接配置见证服务器。

有关创建镜像数据库(包括 Transact-SQL 示例)的信息,请参阅“准备镜像数据库进行镜像”(SQL Server)。

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

.NET Framework 安全性

将证书复制到另一个系统时,请使用安全复制方法。 请非常小心,确保所有证书的安全。

另请参阅

数据库镜像和 AlwaysOn 可用性组的传输安全性(SQL Server)
GRANT 端点权限 (Transact-SQL)
设置加密的镜像数据库
数据库镜像端点 (SQL Server)
数据库镜像配置疑难解答 (SQL Server)