如何:讓資料庫鏡像使用傳出連接的憑證 (Transact-SQL)

此主題描述設定伺服器執行個體的相關步驟,以便使用憑證來驗證資料庫鏡像的傳出連接。您必須先完成傳出連接組態,才能設定傳入連接。

[!附註]

伺服器執行個體上的所有鏡像連接都使用單一資料庫鏡像端點,而您必須在建立端點時指定伺服器執行個體的驗證方法。

設定傳出連接的程序包含下列一般步驟:

  1. master 資料庫中,建立資料庫「主要金鑰」。

  2. master 資料庫中,建立伺服器執行個體的加密憑證。

  3. 使用伺服器執行個體的憑證來建立其端點。

  4. 將憑證備份至檔案中,並以安全的方式將其複製到其他一或多個系統。

您必須為每一個夥伴或見證 (如果有的話) 完成上述步驟。

下列程序將詳細說明這些步驟。在每一個步驟中,此程序都會提供一個範例,以便在名為 HOST_A 的系統上設定伺服器執行個體。隨附的<範例>一節會示範另一個伺服器執行個體在名為 HOST_B 的系統上的相同步驟。

程序

設定 (HOST_A 上) 傳出鏡像連接的伺服器執行個體

  1. master 資料庫中,若無資料庫「主要金鑰」存在,請加以建立。若要檢視資料庫的現有金鑰,請使用 sys.symmetric_keys 目錄檢視。

    若要建立資料庫「主要金鑰」,請使用下列 Transact-SQL 命令:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';
    GO
    

    使用唯一的增強式密碼,並將其記錄在安全的地方。

    如需詳細資訊,請參閱<CREATE MASTER KEY (Transact-SQL)>和<如何:建立資料庫主要金鑰>。

  2. master 資料庫中,建立伺服器執行個體的加密憑證,以供資料庫鏡像的傳出連接使用。

    例如,建立 HOST_A 系統的憑證。

    重要事項重要事項

    如果您打算使用此憑證超過一年以上,請在您的 CREATE CERTIFICATE 陳述式中使用 EXPIRY_DATE 選項來指定 UTC 時間的到期日。此外,我們也建議您使用 SQL Server Management Studio 建立以原則為基礎的管理規則,以便在憑證即將到期時提醒您。使用原則管理的 [建立新條件] 對話方塊,在 [憑證] Facet 的 [@ExpirationDate] 欄位中建立此規則。如需詳細資訊,請參閱<使用以原則為基礎的管理來管理伺服器>、<教學課程:使用以原則為基礎的管理來管理伺服器>和<保護 SQL Server 的安全>。

    USE master;
    CREATE CERTIFICATE HOST_A_cert 
       WITH SUBJECT = 'HOST_A certificate for database mirroring', 
       EXPIRY_DATE = '11/30/2013';
    GO
    

    如需詳細資訊,請參閱<CREATE CERTIFICATE (Transact-SQL)>。

    若要檢視 master 資料庫中的憑證,您可以使用下列 Transact-SQL 陳述式:

    USE master;
    SELECT * FROM sys.certificates;
    

    如需詳細資訊,請參閱<sys.certificates (Transact-SQL)>。

  3. 確定每個伺服器執行個體上都有資料庫鏡像端點。

    若伺服器執行個體上已有資料庫鏡像端點,您應在伺服器執行個體上所建立的任何其他工作階段,重複使用該端點。若要判斷伺服器執行個體上是否有資料庫鏡像端點,以及檢視該端點的組態,請使用下列陳述式:

    SELECT name, role_desc, state_desc, connection_auth_desc, encryption_algorithm_desc 
       FROM sys.database_mirroring_endpoints;
    

    若沒有端點存在,請建立一個端點,並使其在傳出連接上使用此憑證,而對其他系統的驗證則使用憑證的認證。這屬於伺服器範圍的端點,可供伺服器執行個體參與的所有鏡像工作階段使用。

    例如,為 HOST_A 上的範例伺服器執行個體建立鏡像端點。

    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
    

    如需詳細資訊,請參閱<CREATE ENDPOINT (Transact-SQL)>。

  4. 備份憑證,並將其複製到其他一或多個系統。若要在其他系統上設定傳入連接,就必須執行此動作。

    BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\HOST_A_cert.cer';
    GO
    

    如需詳細資訊,請參閱<BACKUP CERTIFICATE (Transact-SQL)>。

    使用您所選的任何安全方式來複製此憑證。務必將您所有的憑證小心保管。

前述幾個步驟中的範例程式碼會設定 HOST_A 上的傳出連接。

您現在需要針對 HOST_B 執行相同的傳出步驟。這些步驟會在下列<範例>一節中說明。

範例

下列範例示範如何針對傳出連接設定 HOST_B。

USE master;
--Create the database Master Key, if needed.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>';
GO
-- Make a certifcate on HOST_B server instance.
CREATE CERTIFICATE HOST_B_cert 
   WITH SUBJECT = 'HOST_B certificate for database mirroring', 
   EXPIRY_DATE = '11/30/2013';
GO
--Create a mirroring endpoint for the server instance on 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
--Backup HOST_B certificate.
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\HOST_B_cert.cer';
GO 
--Using any secure copy method, copy C:\HOST_B_cert.cer to HOST_A.

使用您所選的任何安全方式,將憑證複製到其他系統。務必將您所有的憑證小心保管。

重要事項重要事項

在設定傳出連接後,您必須在每個伺服器執行個體上設定其他一或多個伺服器執行個體的傳入連接。如需詳細資訊,請參閱<如何:允許資料庫鏡像使用憑證建立傳入連接 (Transact-SQL)>。

如需有關建立鏡像資料庫的資訊,包括 Transact-SQL 範例在內,請參閱<如何:準備鏡像資料庫以進行鏡像 (Transact-SQL)>。

如需建立高效能模式工作階段的 Transact-SQL 範例,請參閱<範例:使用憑證設定資料庫鏡像 (Transact-SQL)>。

安全性

除非您可保證網路的安全無虞,否則建議您對資料庫鏡像連接使用加密。

將憑證複製到另一個系統時,請使用安全複製方法。

變更記錄

更新的內容

已新增一則有關在 CREATE CERTIFICATE 陳述式中使用 EXPIRY_DATE 選項的注意事項,並更新此選項的程式碼範例。