示例:使用证书设置数据库镜像 (Transact-SQL)
适用于: SQL Server
此示例演示了使用基于证书的身份验证创建数据库镜像会话所需的所有阶段。 本主题中的示例使用 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 transaction safety. ALTER DATABASE AdventureWorks SET PARTNER SAFETY OFF GO
注意
如果打算在具有自动故障转移功能的高安全性模式下运行,请将事务安全性设置为 FULL(默认设置),并在执行第二个 SET PARTNER 'partner_server' 语句后尽快添加见证服务器。 注意,必须首先为出站连接和入站连接配置见证服务器。
Related Tasks
当数据库在其他服务器实例上可用时管理元数据 (SQL Server) (SQL Server)
另请参阅
针对数据库镜像和 Always On 可用性组的传输安全性 (SQL Server)
指定服务器网络地址(数据库镜像)
数据库镜像端点 (SQL Server)
使用数据库镜像终结点证书 (Transact-SQL)
ALTER DATABASE (Transact-SQL)
SQL Server 数据库引擎和 Azure SQL Database 的安全中心