Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
佐藤 美菜 (さとう みな)
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)>