Denali の HADR (Always On) では SQL Server のデータベースミラーリングと同様に、ミラーリング用のエンドポイントを使用してサーバー間の通信が行われます。
HADR はクラスター環境が必須となるので、サービスアカウントにドメインユーザーを使用するための障壁は低くなっているのですが、ドメインユーザーではなくローカルユーザーで SQL Server のサービスを起動することがあるかもしれません。
HADR のエンドポイントは構成中に自動で作成することができます。
ただし、サービスをローカルユーザーで起動している場合には以下のエラーが出力されます。
# Yes をクリックすると構成をすることができるのですが、開始時にエラーとなるかと思います。
ドメインユーザーでサービスを起動していない場合は証明書を利用したエンドポイントを使用する必要があります。
# サービスをローカルユーザーで起動してパスワードを同じにすればパススルーできる気もしますが。まだ試せていません…。
今回の投稿では、証明書を利用したエンドポイントのサンプルをまとめておきたいと思います。
■証明書を利用したエンドポイントの作成
SQL Server のサービスをローカルユーザーで起動している場合は、証明書を使用したエンドポイントを使用する必要があります。
証明書を使用したエンドポイントの作成に関しては以下の技術情報に記載がされています。
データベース ミラーリングで発信接続に証明書を使用できるようにする方法 (Transact-SQL)
データベース ミラーリングで着信接続に証明書を使用できるようにする方法 (Transact-SQL)
証明書を使用したデータベース ミラーリングの設定の例 (Transact-SQL)
SQL Server 2005 データ ベース ミラーリング検証
CTP1 では、2 つのインスタンスを利用した HADR 環境の構築に制限がされています。
# 最終的には 5 つのインスタンスを利用したデータベースコピーができるようですが。
今回は INST1 / INST2 というインスタンスを使用して証明書を利用したエンドポイントを作成したいと思います。
IP アドレスやパスワードはサンプルで適当に設定しています。
- 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’
GOSELECT * 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)
GOSELECT * 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
*/ - 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’
GOSELECT * 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)
GOSELECT * 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
*/ - 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
*/ - 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 の構成時に作成したエンドポイントが自動で選択された状態となります。
これで証明書を使用したエンドポイントを利用して、HADR を使用することが可能となります。
毎回調べるのが少し大変なのでメモとして投稿を残しておきたいと思います。