此示例演示使用基于证书的身份验证创建数据库镜像会话所需的所有阶段。 本主题中的示例使用 Transact-SQL。 除非可以保证网络安全,否则建议对数据库镜像连接使用加密。
将证书复制到另一个系统时,请使用安全复制方法。 请非常小心,确保所有证书的安全。
示例:
以下示例演示了在HOST_A上合作伙伴必须执行的任务。 在此示例中,两个伙伴是三台计算机系统上的默认服务器实例。 这两个服务器实例在非受信任的 Windows 域中运行,因此需要基于证书的身份验证。
初始主体角色由HOST_A执行,镜像角色由HOST_B执行。
使用证书设置数据库镜像涉及四个常规阶段,此示例演示了三个阶段 1、2 和 4 阶段。 这些阶段如下所示:
-
此示例显示了以下作的步骤:
为出站连接配置Host_A。
为出站连接配置Host_B。
有关设置数据库镜像的此阶段的信息,请参阅 “允许数据库镜像终结点使用证书进行出站连接(Transact-SQL)”。
-
此示例显示了以下作的步骤:
为入站连接配置Host_A。
为入站连接配置Host_B。
有关设置数据库镜像的此阶段的信息,请参阅 “允许数据库镜像终结点将证书用于入站连接(Transact-SQL)”。
创建镜像数据库
有关如何创建镜像数据库的信息,请参阅准备镜像数据库(SQL Server)。
配置出站连接
为出站连接配置Host_A
在 master 数据库上,根据需要创建数据库主密钥。
USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>'; GO为此服务器实例创建证书。
USE master; CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate'; GO使用证书为服务器实例创建镜像终结点。
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备份HOST_A证书,并将其复制到其他系统,HOST_B。
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\HOST_A_cert.cer'; GO使用任何安全复制方法,将 C:\HOST_A_cert.cer复制到HOST_B。
为出站连接配置Host_B
在 master 数据库上,根据需要创建数据库主密钥。
USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>'; GO在HOST_B服务器实例上创建证书。
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate for database mirroring'; GO为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备份HOST_B证书。
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\HOST_B_cert.cer'; GO使用任何安全复制方法,将 C:\HOST_B_cert.cer复制到HOST_A。
有关详细信息,请参阅 “允许数据库镜像终结点使用证书进行出站连接(Transact-SQL)”。
配置入站连接
为入站连接配置Host_A
在HOST_A上为HOST_B创建登录名。
USE master; CREATE LOGIN HOST_B_login WITH PASSWORD = '1Sample_Strong_Password!@#'; GO--为该登录名创建用户。
CREATE USER HOST_B_user FOR LOGIN HOST_B_login; GO--将证书与用户关联。
CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'C:\HOST_B_cert.cer' GO授予登录远程镜像终结点的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login]; GO
为入站连接配置Host_B
在HOST_B上为HOST_A创建登录名。
USE master; CREATE LOGIN HOST_A_login WITH PASSWORD = '=Sample#2_Strong_Password2'; GO为该登录名创建用户。
CREATE USER HOST_A_user FOR LOGIN HOST_A_login; GO将证书与用户相关联。
CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'C:\HOST_A_cert.cer' GO授予登录远程镜像终结点的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login]; GO
重要
如果打算在具有自动故障转移的高安全模式下运行,则必须重复相同的设置步骤,为出站和入站连接配置见证服务器。 当涉及见证服务器时,设置入站连接需要在两个伙伴上为见证服务器设置登录名和用户,并在见证服务器上为两个伙伴设置登录名和用户。
有关详细信息,请参阅 “允许数据库镜像终结点使用证书进行入站连接(Transact-SQL)”。
创建镜像数据库
有关如何创建镜像数据库的信息,请参阅准备镜像数据库(SQL Server)。
配置镜像伙伴
在HOST_B上的镜像服务器实例上,将HOST_A上的服务器实例设置为合作伙伴(使其成为初始主体服务器实例)。 将有效的网络地址
TCP://HOST_A.Mydomain.Corp.Adventure-Works``.com:7024替换为 。 有关详细信息,请参阅指定服务器网络地址(数据库镜像)。--At HOST_B, set server instance on HOST_A as partner (principal server): ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://HOST_A.Mydomain.Corp.Adventure-Works.com:7024'; GO在HOST_A上的主体服务器实例上,将HOST_B上的服务器实例设置为合作伙伴(使其成为初始镜像服务器实例)。 将有效的网络地址
TCP://HOST_B.Mydomain.Corp.Adventure-Works.com:7024替换为 。--At HOST_A, set server instance on HOST_B as partner (mirror server). ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://HOST_B.Mydomain.Corp.Adventure-Works.com:7024'; GO此示例假定会话将以高性能模式运行。 若要将此会话配置为高性能模式,请在主体服务器实例(HOST_A)上将事务安全性设置为 OFF。
--Change to high-performance mode by turning off transacton safety. ALTER DATABASE AdventureWorks SET PARTNER SAFETY OFF GO注释
如果打算在具有自动故障转移的高安全模式下运行,请将事务安全设置为 FULL(默认设置),并在执行第二个 SET PARTNER '
partner_server' 语句后尽快添加见证服务器。 请注意,必须首先为出站和入站连接配置见证服务器。
相关任务
另请参阅
数据库镜像和 AlwaysOn 可用性组的传输安全性(SQL Server)
指定服务器网络地址(数据库镜像)
数据库镜像端点 (SQL Server)
对数据库镜像终结点使用证书(Transact-SQL)
ALTER DATABASE (Transact-SQL)
SQL Server 数据库引擎和 Azure SQL 数据库安全中心