ワークグループ環境で データベースミラーリングを構成する ~ 手順 3 ~

 
文書番号:10130


ワークグループ環境で データベースミラーリングを構築する ~ 手順 2 ~
ではミラー構成にするデータベースをバックアップしてミラーサーバーで復元しました。

次にミラーリングセッションでお互いに通信をする際に接続するためのログインを作成します。
ワークグループ(非ドメイン)環境ではドメインによる認証ができないため、SSL通信を行うために証明書を使用します。

本手順では証明書を作成し、その証明書を使用してエンドポイントとログインを作成します。

事前準備

  • 証明書ファイルを書き出すための一時フォルダーを準備します。
    本手順ではCドライブ直下に「temp」というフォルダーを作成しました。

    C:\temp  となります。


    クリックで拡大


    別の場所に作成しても問題ありませんが以降のコマンドで指定している部分は置き換えて実行してください。


証明書、エンドポイントを作成する

  1. まず、プリンシパルサーバーで SQL Server Management Studio を起動します。
    ログインでは Windows 認証でプリンシパルサーバーへ接続します。
    ※Windows と SQL Server の両方に管理者権限を持ったアカウントで接続します。

    クリックで拡大
  2. 画面左上の「新しいクエリ」ボタンをクリックするか、Citrl キーを押下しながら「N」キーを押下します。

    クリックで拡大
  3. 新しいクエリ画面が開きますので以下のSQLを順に実行していきます。

    クリックで拡大

  4. 最初にプリンシパルサーバーで実行します。

    コマンド内の赤字の部分は適宜変更してください。
    変更した部分については以降のコマンドでも同様に置き換えて実行してください。
    
    -- プリンシパルサーバー(SQL01)で実行
    
    use [master]
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'パスワード';
    
    -- 証明書を作成します。
    -- SUBJECT は説明なので何でもOKです。
    -- EXPIRY_DATE (有効期限)はオプションです。
    --   指定しない場合は作成した日から1年後になります。
    CREATE CERTIFICATE SQL01_CERT
      WITH SUBJECT = 'SQL01_CERT certificate for database mirroring'
     ,EXPIRY_DATE = '2020/12/31';
    
    -- エンドポイントを作成します。
    CREATE ENDPOINT Endpoint_Mirroring
      STATE = STARTED
      AS TCP (LISTENER_PORT = 5022 , LISTENER_IP = ALL)
      FOR DATABASE_MIRRORING(
         AUTHENTICATION = CERTIFICATE SQL01_CERT
    	,ENCRYPTION = REQUIRED ALGORITHM AES
    	,ROLE = ALL
    	);
    
    -- 証明書をファイルにバックアップします。
    BACKUP CERTIFICATE SQL01_CERT TO FILE = 'C:\temp\SQL01_CERT.cer';
    
    
  5. 次はミラーサーバーで実行します。
    先ほどと同様、ミラーサーバーで SQL Server Management Studio を起動し、Windows 認証で接続します。

    サーバー名を元にしている部分が「SQL02」になります。
    
    -- ミラーサーバー(SQL02)で実行
    
    use [master]
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'パスワード';
    
    -- 証明書を作成します。
    -- SUBJECT は説明なので何でもOKです。
    -- EXPIRY_DATE (有効期限)はオプションです。
    --   指定しない場合は作成した日から1年後になります。
    CREATE CERTIFICATE SQL02_CERT
      WITH SUBJECT = 'SQL02_CERT certificate for database mirroring';
     ,EXPIRY_DATE = '2020/12/31';
    
    -- エンドポイントを作成します。
    CREATE ENDPOINT Endpoint_Mirroring
      STATE = STARTED
      AS TCP (LISTENER_PORT = 5022 , LISTENER_IP = ALL)
      FOR DATABASE_MIRRORING(
         AUTHENTICATION = CERTIFICATE SQL02_CERT
    	,ENCRYPTION = REQUIRED ALGORITHM AES
    	,ROLE = ALL
    	);
    
    -- 証明書をファイルにバックアップします。
    BACKUP CERTIFICATE SQL02_CERT TO FILE = 'C:\temp\SQL02_CERT.cer';
    
    
  6. 最後にミラーリング監視サーバーで実行します。
    先ほどと同様、ミラーリング監視サーバーで SQL Server Management Studio を起動し、Windows 認証で接続します。

    サーバー名を元にしている部分が「SQL03」になります。
    
    -- ミラーリング監視サーバー(SQL03)で実行
    
    use [master]
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'パスワード';
    
    -- 証明書を作成します。
    -- SUBJECT は説明なので何でもOKです。
    -- EXPIRY_DATE (有効期限)はオプションです。
    --   指定しない場合は作成した日から1年後になります。
    CREATE CERTIFICATE SQL03_CERT
      WITH SUBJECT = 'SQL03_CERT certificate for database mirroring';
     ,EXPIRY_DATE = '2020/12/31';
    
    -- エンドポイントを作成します。
    CREATE ENDPOINT Endpoint_Mirroring
      STATE = STARTED
      AS TCP (LISTENER_PORT = 5022 , LISTENER_IP = ALL)
      FOR DATABASE_MIRRORING(
         AUTHENTICATION = CERTIFICATE SQL03_CERT
    	,ENCRYPTION = REQUIRED ALGORITHM AES
    	,ROLE = ALL
    	);
    
    -- 証明書をファイルにバックアップします。
    BACKUP CERTIFICATE SQL03_CERT TO FILE = 'C:\temp\SQL03_CERT.cer';
    
    
  7. プリンシパルでバックアップした「SQL01_CERT.cer」ファイルをミラーとミラー監視へコピーします。

    同様にミラーでバックアップした「SQL02_CERT.cer」ファイルをプリンシパルとミラー監視へコピーします。

    さらにミラー監視でバックアップした「SQL03_CERT.cer」ファイルをプリンシパルとミラーへコピーします。


    ここまでで、3台のサーバーそれぞれに3台分の証明書が揃った状態になります。

    クリックで拡大


他のサーバーの証明書を取り込み、ログインを作成する


各サーバーで自サーバー以外の証明書のバックアップを使用して証明書オブジェクトを作成します。

ログイン、ユーザーを作成し、証明書オブジェクトを割り付けてエンドポイントへのアクセス権を付与します。

  1. まずは、プリンシパルサーバーで他サーバーから接続するためのログイン、ユーザーを作成します。

    
    --プリンシパルサーバー(SQL01)で実行
    
    use [master]
    GO
    
    
    --ミラーサーバーから接続するためのログインを作成します。
    CREATE LOGIN SQL02_Login WITH PASSWORD = 'パスワード';
    
    --上記で作成したログインに対するユーザーを作成します。
    CREATE USER SQL02_User FOR LOGIN SQL02_Login;
    
    --ミラーサーバーで作成した証明書を元に証明書オブジェクトを作成し、上記で作成したユーザーへ割り付けます。
    CREATE CERTIFICATE SQL02_CERT
      AUTHORIZATION SQL02_User
      FROM FILE = 'C:\temp\SQL02_CERT.cer'
    
    --上記で作成したログインに対してエンドポイントへのアクセス権を付与します。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SQL02_Login];
    
    
    
    --ミラーリング監視サーバーから接続するためのログインを作成します。
    CREATE LOGIN SQL03_Login WITH PASSWORD = 'パスワード';
    
    --上記で作成したログインに対するユーザーを作成します。
    CREATE USER SQL03_User FOR LOGIN SQL03_Login;
    
    --ミラーリング監視サーバーで作成した証明書を元に証明書オブジェクトを作成し、上記で作成したユーザーへ割り付けます。
    CREATE CERTIFICATE SQL03_CERT
      AUTHORIZATION SQL03_User
      FROM FILE = 'C:\temp\SQL03_CERT.cer'
    
    --上記で作成したログインに対してエンドポイントへのアクセス権を付与します。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SQL03_Login];
    
    
    
    --上記で作成したログインを"sysadmin"ロールのメンバーに追加します。
    EXEC master..sp_addsrvrolemember @loginame = N'SQL02_Login', @rolename = N'sysadmin';
    EXEC master..sp_addsrvrolemember @loginame = N'SQL03_Login', @rolename = N'sysadmin';
    
  2. 次にミラーサーバーでも同様にログインを作成します。

    
    --ミラーサーバーで実行(SQL02)
    
    use [master]
    GO
    
    
    --プリンシパルサーバーから接続するためのログインを作成します。
    CREATE LOGIN SQL01_Login WITH PASSWORD = 'パスワード';
    
    --上記で作成したログインに対するユーザーを作成します。
    CREATE USER SQL01_User FOR LOGIN SQL01_Login;
    
    --プリンシパルサーバーで作成した証明書を元に証明書オブジェクトを作成し、上記で作成したユーザーへ割り付けます。
    CREATE CERTIFICATE SQL01_CERT
      AUTHORIZATION SQL01_User
      FROM FILE = 'C:\temp\SQL01_CERT.cer'
    
    --上記で作成したログインに対してエンドポイントへのアクセス権を付与します。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SQL01_Login];
    
    
    
    --ミラーリング監視サーバーから接続するためのログインを作成します。
    CREATE LOGIN SQL03_Login WITH PASSWORD = 'パスワード';
    
    --上記で作成したログインに対するユーザーを作成します。
    CREATE USER SQL03_User FOR LOGIN SQL03_Login;
    
    --ミラーリング監視サーバーで作成した証明書を元に証明書オブジェクトを作成し、上記で作成したユーザーへ割り付けます。
    CREATE CERTIFICATE SQL03_CERT
      AUTHORIZATION SQL03_User
      FROM FILE = 'C:\temp\SQL03_CERT.cer'
    
    --上記で作成したログインに対してエンドポイントへのアクセス権を付与します。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SQL03_Login];
    
    
    
    --上記で作成したログインを"sysadmin"ロールのメンバーに追加します。
    EXEC master..sp_addsrvrolemember @loginame = N'SQL01_Login', @rolename = N'sysadmin';
    EXEC master..sp_addsrvrolemember @loginame = N'SQL03_Login', @rolename = N'sysadmin';
    
  3. 最後にミラーリング監視サーバーでも同様にログインを作成します。

    
    --ミラーリング監視サーバーで(SQL03)実行
    
    use [master]
    GO
    
    
    --プリンシパルサーバーから接続するためのログインを作成します。
    CREATE LOGIN SQL01_Login WITH PASSWORD = 'パスワード';
    
    --上記で作成したログインに対するユーザーを作成します。
    CREATE USER SQL01_User FOR LOGIN SQL01_Login;
    
    --プリンシパルサーバーで作成した証明書を元に証明書オブジェクトを作成し、上記で作成したユーザーへ割り付けます。
    CREATE CERTIFICATE SQL01_CERT
      AUTHORIZATION SQL01_User
      FROM FILE = 'C:\temp\SQL01_CERT.cer'
    
    --上記で作成したログインに対してエンドポイントへのアクセス権を付与します。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SQL01_Login];
    
    
    
    --ミラーサーバーから接続するためのログインを作成します。
    CREATE LOGIN SQL02_Login WITH PASSWORD = 'パスワード';
    
    --上記で作成したログインに対するユーザーを作成します。
    CREATE USER SQL02_User FOR LOGIN SQL02_Login;
    
    --ミラーサーバーで作成した証明書を元に証明書オブジェクトを作成し、上記で作成したユーザーへ割り付けます。
    CREATE CERTIFICATE SQL02_CERT
      AUTHORIZATION SQL02_User
      FROM FILE = 'C:\temp\SQL02_CERT.cer'
    
    --上記で作成したログインに対してエンドポイントへのアクセス権を付与します。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SQL02_Login];
    
    
    
    
    
    --上記で作成したログインを"sysadmin"ロールのメンバーに追加します。
    EXEC master..sp_addsrvrolemember @loginame = N'SQL01_Login', @rolename = N'sysadmin';
    EXEC master..sp_addsrvrolemember @loginame = N'SQL02_Login', @rolename = N'sysadmin';
    

  4. ここまで実行できればサーバー間で接続するためのログインの準備は完了です。

    次の手順でデータベースミラーリングの構成を行います

    ワークグループ環境で データベースミラーリングを構築する ~ 手順 4 ~

【参考情報】

[MSDN] CREATE CERTIFICATE (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms187798.aspx

[MSDN] CREATE ENDPOINT (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms181591.aspx