示例:使用证书设置数据库镜像 (Transact-SQL)
此示例说明使用基于证书的身份验证创建带有见证服务器的数据库镜像会话所需的所有阶段。本主题中的示例使用 Transact-SQL。建议您对数据库镜像连接进行加密,除非您能够保证网络的安全。
将证书复制到其他系统时,请使用安全的复制方法。必须格外小心地保证所有证书的安全。
示例
下面的示例说明必须对驻留在 HOST_A 上的伙伴执行的操作。在此示例中,两个伙伴是三个计算机系统上默认的服务器实例。两个服务器实例在非信任的 Windows 域中运行,因此需要基于证书的身份验证。
在以下示例中,HOST_A 担当初始主体角色,HOST_B 担当镜像角色。
配置出站连接
为出站连接配置 Host_A
在 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)。
创建镜像数据库
有关如何创建镜像数据库的信息,请参阅如何为镜像准备镜像数据库 (Transact-SQL)。
配置镜像伙伴
在 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' 语句后尽快添加见证服务器。注意,必须首先为出站连接和入站连接配置见证服务器。
请参阅
任务
如何允许数据库镜像将证书用于入站连接 (Transact-SQL)
如何允许数据库镜像使用证书进行出站连接 (Transact-SQL)
如何为镜像准备镜像数据库 (Transact-SQL)
概念
数据库镜像传输安全性
指定服务器网络地址(数据库镜像)
数据库镜像端点
使用数据库镜像证书
为镜像准备镜像数据库
管理数据库镜像 (SQL Server Management Studio)
当数据库在其他服务器实例上可用时管理元数据
对数据库镜像设置进行故障排除
其他资源
ALTER DATABASE (Transact-SQL)
SQL Server 安全注意事项