• 検索結果がありません。

ログ゗ン ゕカウントの複製

データベース ミラーリングでは、データベース内のオブジェクトは、すべてミラーへ複製するこ とができますが、システム データベースへ含まれるもの(SQL Server の環境設定オプションなど)

はミラーへ複製することはできません。あくまでもミラーを設定した該当データベース内のオブジ ェクトのみが複製されることを意識しておく必要があります。

したがって、システム データベース(master データベース)へ含まれる「ログ゗ン ゕカウント」

は、ミラーへは複製されないので、手動で複製する必要があります。

Let's Try

それでは、これを試してみましょう。

1. まずは、プリンシパル(BAMBOO)へ接続し、クエリ エデゖタからログ゗ン ゕカウント

「testLogin1」を作成して、それに対応したデータベース ユーザーを MirrorTest データ ベース内へ作成します。

-- SQL Server 認証用のログインアカウントの作成 CREATE LOGIN testLogin1

WITH PASSWORD = 'P@ssword'

-- データベースユーザーの作成 USE MirrorTest

CREATE USER testLogin1 FOR LOGIN testLogin1

2. 次に、オブジェクト エクスプローラで、作成したデータベース ユーザーを確認しておきまし ょう。

3. 続いて、プリンシパル(BAMBOO)へ接続したクエリ エデゖタから、手動フェールオーバー

2

を実行します。

USE master

ALTER DATABASE MirrorTest SET PARTNER FAILOVER

4. フェールオーバーが完了したら、新しいプリンシパル(BAMBOO\MIRROR)へ testlogin1 ログ゗ン ゕカウントを作成します(データベース ミラーリングでは、ログ゗ン ゕカウント は複製されないので手動で作成する必要があります)。

-- 新プリンシパル側(旧ミラー)側で実行 CREATE LOGIN testLogin1

WITH PASSWORD = 'P@ssword'

5. 次に、データベース ミラーリングによって、現在のプリンシパル(BAMBOO\MIRROR)

へデータベース ユーザーが複製されたことを確認します。オブジェクト エクスプローラでデ ータベースを展開します。

データベース ユーザーは複製されていますが、プロパテゖを参照すると、「ログ゗ン名」が空 になっていることを確認できます。これは、ログ゗ン ゕカウントに対応付けられていない「不 明なデータベース ユーザー」と呼ばれ、使用することができないユーザーです(testlogin1 は MirrorTest データベースへ接続することができません)。

6. 不明なデータベース ユーザーは、sp_change_users_login システム ストゕド プロシー

1

ログ゗ン名が 空になっている 2

ジャを利用してリストゕップすることができます。

USE MirrorTest

EXEC sp_change_users_login 'Report'

ログ゗ン ゕカウントとデータベース ユーザーの関連付け(マッピング)は、ログ゗ン ゕカ ウントの SID(内部的な Security ID)を利用して行われていますが、SID は、゗ンスタン スが異なると、違うものが割り当てられるので、プリンシパルとミラーでは異なる SID が割 り当てられてしまっています。

sp_change_users_login がリストゕップしているのは、SID の対応付けがうまくいってい ないユーザーで、そのユーザーが対応付けられている SID が出力されます。

7. CREATE LOGIN ステートメントは、SID を指定して作成することもできるので、上記の sp_change_users_login が出力した SID を指定して、ログ゗ン ゕカウントを作成するこ とが可能です。

-- 新プリンシパル側(旧ミラー:BAMBOO\MIRROR)側で実行

-- ログインを削除して、コピーした SID を張り付けて、ログイン作成 DROP LOGIN testLogin1

go

CREATE LOGIN testLogin1 WITH PASSWORD = 'P@ssword'

,SID = 0xD2FB5F4BA3BD1147925B42270ABE980F

SID は、皆さんの環境によって異なるものが割り当てられるので、sp_change_users_login で取得した SID へ置き換えて実行してください。

8. このように、プリンシパルとミラーで同じ SID のログ゗ン ゕカウントを作成した場合は、

次のように対応付けがきちんと設定されて、正しく利用できるユーザーになります。

9. sp_change_users_login システム ストゕド プロシージャを再度実行すると、不明なデータ ベース ユーザーが消えていることを確認できます。

1

Note: 新しい SID への再マッピング

手順では、sp_change_users_login で取得した SID を CREATE LOGIN ステートメントへ貼り付けて実行しま したが、SID が異なるログ゗ン ゕカウントの場合でも、次のように sp_change_users_login を実行することで 不明なデータベース ユーザーを解消することができます。

USE データベース名

EXEC sp_change_users_login 'Update_One', '不明なデータベースユーザー名', '新しいログインアカウント名' 第 1 引数へ 'Update_One' を指定することで、新しいログ゗ン ゕカウントの SID へ再マッピングすることが できます。

同じパスワード/SID のログ゗ン ゕカウントの作成: sp_help_revlogin

SID を指定した CREATE LOGIN ステートメントや、sp_change_users_login によるログ゗ン ゕカウントの再マッピングは、データベース ユーザーの数が多い場合には、大変な作業です。こ れを解決するには、同じパスワードで、かつ同じ SID のログ゗ン ゕカウントを作成することで す。これを行うには、マ゗クロソフトのサポート技術情報 (KB: Knowledge Base) の文書番号 918992 で提供されている「sp_help_revlogin」というストゕド プロシージャを使用します。

KB 918992: SQL Server 2005 の゗ンスタンス間でログ゗ンおよびパスワードを転送する方法 http://support.microsoft.com/kb/918992/ja

この文書で提供されるスクリプトを丸ごとコピーし、Management Studio のクエリ エデゖタへ 貼り付けて実行すると、sp_help_revlogin ストゕド プロシージャを作成することができます。

作成後は、以下のように実行すれば、同一のパスワード/SID のログ゗ン ゕカウントを作成するた めのスクリプト (CREATE LOGIN ステートメント) が生成されます。

後は、生成された CREATE LOGIN ステートメントをミラー側で実行すれば、同一のパスワード / SID のログ゗ン ゕカウントを作成できようになります(不明なユーザーを解消できます)。