透過的なデータ暗号化 (TDE) 環境のミラーリングの構成でエラー 927
佐藤 美菜 (さとう みな)
SQL Server Support Engineer
皆さん、こんにちは。
今回は、透過的なデータ暗号化 (TDE) 環境のミラーリンクを構成するときに、コマンド (Transact-SQL) で実行しないとエラーになってしまうという現象をご紹介します。
※ ミラーリングを構成するには、SQL Server Management Studio の「データベース ミラーリング セキュリティ構成ウィザード」を使って構成をする方法と Transact-SQL を使って構成する方法の 2 種類があります。
現象
透過的なデータ暗号化 (TDE) 環境でミラーリングを構成します。このとき、「データベース ミラーリング セキュリティ構成ウィザード」を使って構成をすると、エンドポイントの作成までは正常に終了します。その後、「ミラーリングの開始」をすると以下のエラーが発生します。
※ 透過的なデータ暗号化の環境以外では発生しません。 Management Studio 内で SMO (SQL Server 管理オブジェクト)を使用している過程で本現象が発生していますので、その回避策を証明書を使った Transact-SQL 実行手順で以下に紹介します。
回避策
透過的なデータ暗号化 (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)>