データベース ミラーリングで発信接続に証明書を使用できるようにする方法 (Transact-SQL)

このトピックでは、データベース ミラーリングの発信接続を認証する際に証明書を使用するようにサーバー インスタンスを構成する手順について説明します。 着信接続を設定する前に、発信接続を構成する必要があります。

注意

1 つのサーバー インスタンス上のすべてのミラーリング接続では、1 つのデータベース ミラーリング エンドポイントが使用されます。そのため、エンドポイントを作成する際にサーバー インスタンスの認証方法を指定する必要があります。

発信接続を構成する処理には、次の一般的な手順が含まれます。

  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 ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';
    GO
    

    一意の強力なパスワードを使用し、作成したキーを安全な場所に記録します。

    詳細については、「CREATE MASTER KEY (Transact-SQL)」および「データベース マスタ キーを作成する方法」を参照してください。

  2. master データベースで、データベース ミラーリングの発信接続に使用する、暗号化された証明書をサーバー インスタンスに作成します。

    たとえば、HOST_A システム用の証明書を作成するには、次のステートメントを使用します。

    重要な注意事項重要

    証明書を 1 年以上使用する場合は、CREATE CERTIFICATE ステートメントで EXPIRY_DATE オプションを使用して、有効期限を UTC 時刻で指定します。 また、SQL Server Management Studio を使用して、証明書が間もなく期限切れになるときに通知するポリシー ベースの管理ルールを作成することをお勧めします。 このルールを作成するには、ポリシー管理の [新しい条件の作成] ダイアログ ボックスで、[証明書] ファセットの @ExpirationDate フィールドを使用します。 詳細については、「ポリシー ベースの管理を使用したサーバーの管理」、「チュートリアル : ポリシー ベースの管理を使用したサーバーの管理」、および「SQL Server の保護」を参照してください。

    USE master;
    CREATE CERTIFICATE HOST_A_cert 
       WITH SUBJECT = 'HOST_A certificate for database mirroring', 
       EXPIRY_DATE = '11/30/2013';
    GO
    
    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;
    
    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;
    
    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 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 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.

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 オプションの使用に関する注意を追加し、このオプションを使用するコード例を更新しました。