如何允许数据库镜像将证书用于入站连接 (Transact-SQL)

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

配置入站连接的过程通常有以下几个步骤:

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

  2. 创建一个使用该登录名的用户。

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

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

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

如果存在见证服务器,还必须为见证服务器设置进站连接。 这需要在两个伙伴上为见证服务器设置登录名、用户和证书,反之亦然。

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

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

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

    下面的示例在 HOST_A 上的服务器实例的 master 数据库中为系统 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
    

    有关详细信息,请参阅 GRANT 端点权限 (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 示例,请参阅如何为镜像准备镜像数据库 (Transact-SQL)

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

安全性

将证书复制到其他系统时,请使用安全的复制方法。 必须格外小心地保证所有证书的安全。