透過的なデータ暗号化 (TDE) 環境のミラーリングの構成でエラー 927

佐藤 美菜 (さとう みな)

SQL Server Support Engineer

皆さん、こんにちは。

今回は、透過的なデータ暗号化 (TDE) 環境のミラーリンクを構成するときに、コマンド (Transact-SQL) で実行しないとエラーになってしまうという現象をご紹介します。

※ ミラーリングを構成するには、SQL Server Management Studio の「データベース ミラーリング セキュリティ構成ウィザード」を使って構成をする方法と Transact-SQL を使って構成する方法の 2 種類があります。

現象

透過的なデータ暗号化 (TDE) 環境でミラーリングを構成します。このとき、「データベース ミラーリング セキュリティ構成ウィザード」を使って構成をすると、エンドポイントの作成までは正常に終了します。その後、「ミラーリングの開始」をすると以下のエラーが発生します。

※ 透過的なデータ暗号化の環境以外では発生しません。 Management Studio 内で SMO (SQL Server 管理オブジェクト)を使用している過程で本現象が発生していますので、その回避策を証明書を使った Transact-SQL 実行手順で以下に紹介します。

image

 

回避策

透過的なデータ暗号化 (TDE) 環境では、コマンド (Transact-SQL) を使ってミラーリングを構成します。

ここでは、プリンシパル、ミラーサーバーの構築手順の例をご紹介します。

[ 事前作業 ]

プリンシパル、ミラー側のエンドポイントでリッスンするポート (本手順例では 5022 ポート) が F/W でブロックされている場合は、事前にブロックの解除をします。

※ プリンシパル、ミラー の両環境にて、エンドポイントでリッスンするポートを解放します。

A. プリンシパル側での作業 (発信接続設定)

A-1) データベース マスター キーを作成します。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Passw@rd1';

GO

※ PASSWORD= には任意のパスワードを指定します。

A-2) 証明書を作成します。

CREATE CERTIFICATE ss2008r2p_cert

WITH SUBJECT = 'ss2008r2p certificate for database mirroring',START_DATE = '09/01/2011',EXPIRY_DATE = '09/01/2021';

GO

※ 証明書名 ( 例では、”ss2008r2p_cert ) は、任意の名前を指定します。

A-3) エンドポイントを作成します。

CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT=5022, LISTENER_IP=(192.168.20.1)) FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE ss2008r2p_cert,ENCRYPTION = REQUIRED ALGORITHM RC4,ROLE = ALL); GO

※ LISTENER_IP= にはプリンシパル マシンの IP アドレスを指定します。

A-4) 手順 A-2 で作成した証明書のバックアップを任意の場所 (例では、C ドライブ直下) にとります。

BACKUP CERTIFICATE ss2008r2p_cert TO FILE = 'C:¥ss2008r2p_cert.cer';

GO

A-5) 手順 A-4 で取得したバックアップをミラー側の任意の場所にコピーします。

B. ミラー側での作業 (発信接続設定)

B-1) データベース マスターキーを作成します。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Passw@rd1';

GO

※ PASSWORD= には任意のパスワードを指定します。

B-2) 証明書を作成します。

CREATE CERTIFICATE ss2008r2m_cert

WITH SUBJECT = 'ss2008r2m certificate for database mirroring',START_DATE = '09/01/2011',EXPIRY_DATE = '09/01/2021';

GO

B-3) エンドポイントを作成します。

CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT=5022, LISTENER_IP=(192.168.20.2)) FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE ss2008r2m_cert,ENCRYPTION = REQUIRED ALGORITHM RC4,ROLE = ALL);

GO

B-4) 手順 B-2 で作成した証明書のバックアップを任意の場所 (例では、C ドライブ直下) にとります。

BACKUP CERTIFICATE ss2008r2m_cert TO FILE = 'C:¥ss2008r2m_cert.cer';

GO

B-5) 手順 B-4 で取得したバックアップをプリンシパル側の任意の場所にコピーします。

 

C. プリンシパル側での作業 (着信接続設定)

C-1) ミラー着信用の新規ログインおよびユーザーを作成します。

CREATE LOGIN ss2008r2m WITH PASSWORD = 'Passw@rd1';

GO

CREATE USER ss2008r2m FOR LOGIN ss2008r2m;

GO

※ PASSWORD= には任意のパスワードを指定します。

C-2) 手順 C-1 で作成したユーザーと証明書を関連付けます。

CREATE CERTIFICATE ss2008r2m_cert

AUTHORIZATION ss2008r2m

FROM FILE = 'C:¥ss2008r2m_cert.cer';

GO

※ FILE= には、手順 B-5 で任意の場所にコピーした証明書のバックアップ ファイルを指定します。

C-3) エンドポイントに対する接続権限を付与します。

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ss2008r2m; GO

D. ミラー側での作業 (着信接続設定)

D-1) ミラー着信用の新規ログインおよびユーザーを作成します。

CREATE LOGIN ss2008r2p WITH PASSWORD = 'Passw@rd1';

GO

CREATE USER ss2008r2p FOR LOGIN ss2008r2p;

GO

※ PASSWORD= には任意のパスワードを指定します。

D-2) 手順 D-1 で作成したユーザーと証明書を関連付けます。

CREATE CERTIFICATE ss2008r2p_cert

AUTHORIZATION ss2008r2p

FROM FILE = 'C:¥ss2008r2p_cert.cer';

GO

※ FILE= には、手順 A-5 で任意の場所にコピーした証明書のバックアップファイルを指定します。

D-3) エンドポイントに対する接続権限を付与します。

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ss2008r2p;

GO

 

E. プリンシパル側での作業 (バックアップ)

E-1) ミラーリング対象データベースの完全バックアップおよびトランザクション ログのバックアップを取得します。

E-2) 手順 E-1 で取得したバックアップをミラー側の任意の場所にコピーします。

 

F. ミラー側での作業 (リストア)

F-1) 手順 E-2 でコピーしたバックアップをミラーリング対象のデータベースに RESTORE WITH NORECOVERY で復元します。

 

G. ミラー側での作業 (ミラーリング実行 )

G-1) ミラーリング開始コマンドを実行します。

ALTER DATABASE <MirrorDB> SET PARTNER = 'tcp://192.168.20.1:5022'

※ PARTNER= にはプリンシパル側の IP アドレスを指定します。

H. プリンシパル側での作業 (ミラーリング実行)

H-1) ミラーリング開始コマンドを実行します。

ALTER DATABASE <MirrorDB> SET PARTNER = 'tcp://192.168.20.2:5022'

※ PARTNER= には、ミラー側の IP アドレスを指定します。

 

以上が手順となります。

無事、ミラーリングが開始できましたでしょうか。ウィザードと比べコマンドの方が少し面倒かもしれませんが、何卒、ご容赦ください。

 

<参照資料>

証明書を使用したデータベース ミラーリングの設定の例 (Transact-SQL)

<https://msdn.microsoft.com/ja-jp/library/ms191140(v=SQL.105)>