SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Denali の HADR を証明書を利用したエンドポイントで使用

leave a comment

Denali の HADR (Always On) では SQL Server のデータベースミラーリングと同様に、ミラーリング用のエンドポイントを使用してサーバー間の通信が行われます。

image 

HADR はクラスター環境が必須となるので、サービスアカウントにドメインユーザーを使用するための障壁は低くなっているのですが、ドメインユーザーではなくローカルユーザーで SQL Server のサービスを起動することがあるかもしれません。

HADR のエンドポイントは構成中に自動で作成することができます。
image

ただし、サービスをローカルユーザーで起動している場合には以下のエラーが出力されます。
# Yes をクリックすると構成をすることができるのですが、開始時にエラーとなるかと思います。
image
ドメインユーザーでサービスを起動していない場合は証明書を利用したエンドポイントを使用する必要があります。
# サービスをローカルユーザーで起動してパスワードを同じにすればパススルーできる気もしますが。まだ試せていません…。

今回の投稿では、証明書を利用したエンドポイントのサンプルをまとめておきたいと思います。

■証明書を利用したエンドポイントの作成


SQL Server のサービスをローカルユーザーで起動している場合は、証明書を使用したエンドポイントを使用する必要があります。

証明書を使用したエンドポイントの作成に関しては以下の技術情報に記載がされています。

データベース ミラーリングで発信接続に証明書を使用できるようにする方法 (Transact-SQL)
データベース ミラーリングで着信接続に証明書を使用できるようにする方法 (Transact-SQL)
証明書を使用したデータベース ミラーリングの設定の例 (Transact-SQL)
SQL Server 2005 データ ベース ミラーリング検証

CTP1 では、2 つのインスタンスを利用した HADR 環境の構築に制限がされています。
# 最終的には 5 つのインスタンスを利用したデータベースコピーができるようですが。

今回は INST1 / INST2 というインスタンスを使用して証明書を利用したエンドポイントを作成したいと思います。
IP アドレスやパスワードはサンプルで適当に設定しています。

  1. INST1 で発信接続を構成

    /**** インスタンス 1 で実行 ****/
    /**** 発信用接続の設定 ****/

    — 1.データベース マスター キーの作成
    USE [master]
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘<SecurePasswordINST1>’
    GO

    — 2.証明書作成
    USE [master]
    CREATE CERTIFICATE INST1_cert
    WITH SUBJECT = ‘INST1 certificate for database mirroring’
    GO

    SELECT * FROM sys.certificates
    GO

    — 3.エンドポイント作成
    CREATE ENDPOINT Hadr_Endpoint
    STATE = STARTED AS TCP
    (LISTENER_PORT=5022, LISTENER_IP=(10.15.0.1))
    FOR
    DATABASE_MIRRORING
    ( AUTHENTICATION = CERTIFICATE INST1_cert ,
    ENCRYPTION = REQUIRED ALGORITHM RC4 , ROLE = ALL)
    GO

    SELECT * FROM sys.endpoints WHERE type = 4

    — 4. 2.で作成した証明書のバックアップ
    BACKUP CERTIFICATE INST1_cert
    TO FILE = ‘C:Program FilesMicrosoft SQL ServerMSSQL11.INST1MSSQLBackupINST1_cert.cer’
    GO

    /*
    DROP ENDPOINT Hadr_Endpoint
    DROP CERTIFICATE INST1_cert
    DROP MASTER KEY
    */

  2. INST2 で発信接続を構成

    /**** インスタンス 2 で実行 ****/
    /**** 発信用接続の設定 ****/
    — 1.データベース マスター キーの作成
    USE [master]
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘<SecurePasswordINST2>’
    GO

    — 2.証明書作成
    USE [master]
    CREATE CERTIFICATE INST2_cert
    WITH SUBJECT = ‘INST2 certificate for database mirroring’
    GO

    SELECT * FROM sys.certificates
    GO

    — 3.エンドポイント作成
    CREATE ENDPOINT Hadr_Endpoint
    STATE = STARTED AS TCP
    (LISTENER_PORT=5022, LISTENER_IP=(10.15.0.2))
    FOR
    DATABASE_MIRRORING
    ( AUTHENTICATION = CERTIFICATE INST2_cert ,
    ENCRYPTION = REQUIRED ALGORITHM RC4 , ROLE = ALL)
    GO

    SELECT * FROM sys.endpoints WHERE type = 4
    GO

    — 4. 2.で作成した証明書のバックアップ
    BACKUP CERTIFICATE INST2_cert
    TO FILE = ‘C:Program FilesMicrosoft SQL ServerMSSQL11.INST2MSSQLBackupINST2_cert.cer’
    GO

    /*
    DROP ENDPOINT Hadr_Endpoint
    DROP CERTIFICATE INST2_cert
    DROP MASTER KEY
    */

  3. INST1 で着信接続を設定

    /**** インスタンス 1 で実行 ****/
    /
    **** 着信接続の設定 ****/
    — 1.ログインの作成
    CREATE LOGIN INST2 WITH PASSWORD = ‘<SecureLoginPasswordINST1>’
    GO

    — 2.ユーザーの作成
    USE [master]
    GO
    CREATE USER INST2 FOR LOGIN INST2
    GO

    — 3.手順1(プリンシパル上)でバックアップした証明書の入手

    — 4.ユーザーと証明書の関連付け
    CREATE CERTIFICATE INST2_cert AUTHORIZATION INST2
    FROM FILE = ‘C:Program FilesMicrosoft SQL ServerMSSQL11.INST1MSSQLBackupINST2_cert.cer’
    GO

    — 5.エンドポイントに GRANT
    GRANT CONNECT ON ENDPOINT::Hadr_Endpoint TO INST2
    GO

    /*
    DROP CERTIFICATE INST2_cert
    USE [master]
    DROP USER INST2
    DROP LOGIN INST2
    */

  4. INST2 で着信接続を設定

    /**** インスタンス 2 で実行 ****/
    /**** 着信接続の設定 ****/
    — 1.ログインの作成
    CREATE LOGIN INST1 WITH PASSWORD = ‘<SecureLoginPasswordINST1>’
    GO

    — 2.ユーザーの作成
    USE [master]
    GO
    CREATE USER INST1 FOR LOGIN INST1
    GO

    — 3.手順1(プリンシパル上)でバックアップした証明書の入手

    — 4.ユーザーと証明書の関連付け
    CREATE CERTIFICATE INST1_cert AUTHORIZATION INST1
    FROM FILE = ‘C:Program FilesMicrosoft SQL ServerMSSQL11.INST2MSSQLBackupINST1_cert.cer’
    GO

    — 5.エンドポイントに GRANT
    GRANT CONNECT ON ENDPOINT::Hadr_Endpoint TO INST1
    GO

    /*
    DROP CERTIFICATE INST1_cert
    USE [master]
    DROP USER INST1
    DROP LOGIN INST1
    */

事前にエンドポイントを作成していた場合は、HADR の構成時に作成したエンドポイントが自動で選択された状態となります。
image

これで証明書を使用したエンドポイントを利用して、HADR を使用することが可能となります。

毎回調べるのが少し大変なのでメモとして投稿を残しておきたいと思います。

Share

Written by Masayuki.Ozawa

7月 8th, 2011 at 12:06 am

Posted in SQL Server

Tagged with ,

Leave a Reply