適用於:SQL Server
此範例會顯示使用以憑證為基礎的驗證建立資料庫鏡像工作階段所需的所有階段。 本主題中的範例會使用 Transact-SQL。 除非您可保證網路的安全無虞,否則建議您對資料庫鏡像連接使用加密。
將憑證複製到另一個系統時,請使用安全複製方法。 務必將您所有的憑證小心保管。
範例
下列範例示範必須在位於 HOST_A 的某個夥伴上執行的操作。 此範例中的兩個夥伴都是三個電腦系統中的預設伺服器執行個體。 兩個伺服器執行個體在不受信任的 Windows 網域上執行,因此必須有憑證驗證。
由 HOST_A 取得初始主體角色,而由 HOST_B 取得鏡像角色。
使用憑證設定資料庫鏡像包含四個一般階段,其中三個階段 (1、2 和 4) 將由這則範例示範。 這些階段如下:
-
這個範例會說明下列作業的步驟:
將 Host_A 配置為傳出連接。
為「Host_B」設定傳出連接。
如需此設定資料庫鏡像階段的資訊,請參閱 允許資料庫鏡像端點使用憑證進行輸出連線 (Transact-SQL)。
-
這個範例會說明下列作業的步驟:
為 Host_A 設定傳入連接。
為接收連線配置主機_B。
如需此設定資料庫鏡像階段的資訊,請參閱允許資料庫鏡像端點使用憑證進行輸入連線 (Transact-SQL)。
建立鏡像資料庫
如需如何建立鏡像資料庫的資訊,請參閱準備鏡像資料庫以進行鏡像 (SQL Server)。
設定傳出網路連線
若要為 Host_A 設定傳出連接
在 master 資料庫上,若有需要,請建立資料庫主金鑰。 以有效的密碼取代
<password>
。USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<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 的登入。 以有效的密碼取代
<password>
。USE master; CREATE LOGIN HOST_B_login WITH PASSWORD = '<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' 陳述式後,儘快新增見證。 請注意,必須先為見證伺服器設定傳入與傳出的連線。
相關工作
在另一個伺服器執行個體上提供可用的資料庫時,管理中繼資料 (SQL Server) (SQL Server)
另請參閱
SQL Server 資料庫鏡像與「Always On」可用性群組的傳輸安全性
指定伺服器網路位址 (資料庫鏡像)
資料庫鏡像端點 (SQL Server)
針對資料庫鏡像端點使用憑證 (Transact-SQL)
ALTER DATABASE (Transact-SQL)
SQL Server Database Engine 和 Azure SQL Database 的資訊安全中心