在大多數生產環境下,數據庫的鏡像是搭建在同一域內,主體與鏡像間可以使用Windows身份驗證來達到對雙方鏡像端點的連接。但存在某些情況,比如需實現異地的鏡像高可用,就需要在不同的域之間實現數據庫鏡像。而在不同域之間,以Windows身份驗證來達到對雙方鏡像端點的連接便不再可行,此時需要另一種身份驗證方式——證書身份驗證。
【正文】
場景描述:
有兩台SQL服務器,SQL_A與SQL_B,其域環境分別為contoso1.com與contoso2.com。兩台服務器之間通過交換機及路由聯通,相互之間可以ping通。現在欲實現SQL_A與SQL_B之間的數據庫鏡像。
鏡像開始前准備:
在SQL_A上創建一個數據庫NorthwindCS,完整備份此庫。於SQL_B上還原,還原模式為Norecovery;
創建Master Key
分別在SQL_A與SQL_B上創建一個數據庫主密鑰,若已存在則跳過此步驟。
以SQL_A為例,其T_SQL語言如下:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';
GO
創建數據庫證書
分別在SQL_A與SQL_B上創建一個用於身份驗證的數據庫證書。
以SQL_A為例,其T_SQL語言如下:
USE master;
CREATE CERTIFICATE SQL_A_cert
WITH SUBJECT = 'SQL_A certificate',
Expiry_date = '12/31/2020', --證書到期時間
start_date = '06/21/2014'; --證書生效時間
GO
這裡要特別注意下必須要設置證書生效時間,因為中國標准時間與GMT的時差,我們要手動設置證書生效時間為一天以前,否則要等8個小時證書才能生效。以防證書過期,可以設置證書到期時間為100年以後甚至更久。若出現證書過期的情況,我們需新建一個證書,刪除原來的鏡像端點,使用此證書創建新的鏡像端點並已此來配置鏡像。
使用證書創建鏡像端點
分別在SQL_A與SQL_B上創建一個使用證書身份驗證的鏡像端點。
以SQL_A為例,其T_SQL語言如下:
USE master;
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=7024 --偵聽的端口號,可以是任意其他不沖突的端口
, LISTENER_IP = ALL --偵聽所有IP
)
FOR DATABASE_MIRRORING (
AUTHENTICATION
= CERTIFICATE SQL_A_cert --以證書SQL_A_cert進行身份驗證