SQL Server2005 ミラーリングでの SQL認証の注意点
SQL Server2005でミラーリングを構成したところ、データベース自身のフェールオーバーはするものの、SQL認証のユーザだけ、データベースのアクセス出来ず、ログインユーザとデータベースユーザのマッピングが消えている状態となっているのに気付きました。
ログインユーザのデータベースマッピングが行われていなければ、データベースのアクセスできません。
あれこれ、サイトをめぐってようやく原因の対応策がわかったのでメモしておきます。
■原因
データベース ミラーリングで同期されるのはユーザー データベースだけであり、SQL 認証のログインユーザーは master データベースに入っているため、ミラー側には反映されない。
プリンシパル側のログイン名と同一ユーザ名のログインを、ミラー側に手作業で作成しても、SIDが異なるため同一ログインとみなされない。
■対応策
プリンシパル サーバーに作ったログインユーザーをミラー サーバーにもコピーする
1)プリンシパル側で、登録されているログインを作成するスクリプトを生成する
・下記のサイトのストアドをプリンシパル側で実行する
http://support.microsoft.com/kb/918992/en-us
すると、masterに2つのストアドが登録されます。
・sp_help_revloginのストアドを実行する
・メッセージにログインを作成するスクリプトが出力されるのでミラー側にコピーしたいログインユーザーのみコピーする
こんな感じです SID入りのcarete login文が出来ました。
-- Login: user CREATE LOGIN [user] WITH PASSWORD = 0x010078D9F8399CD2101A6DB04AFCAF8B8ACE1E7E4DF1BCCE9625 HASHED, SID = 0x6B3F8E37401B7A47BBA5DCA187BE973F, DEFAULT_DATABASE = [master], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
2)ミラー側で先ほどコピーしたスクリプトを実行させる。
3)データベースをミラー側にフェールオーバーさせ、SQL認証のログインとデータベースがマッピングされているか確認する
■で...
ミラーリングの構成手順を記載している本やサイトを見ると、SQL認証の場合、ログイン情報をミラー側にコピーしてやる必要があることに触れているのを見たことがありません。
SQL Server2008では改善されていればいいですけど... 結構、苦労しました(-_-;)