稼働中の社内システムに変更を入れるためにDBを複製することにした。
SQL Server Express 2005を使用しているが、バックアップはすぐにできるし、違うDBへも復元は可能。
問題は、ログインユーザーの復元
これは、基本的にできないと考えた方がよさそう。ログイン情報などの入ったmasterをバックアップして復元を試みるが、「Build番号が違う」と怒られる。「Build番号」を調べてみるが、本番機が3180で、さっきインストールしたDBが2900?テスト用はSP3で本番機はSP2?さんざんググってみたもののBuild番号が違うと絶対に復元できないらしい?
と言うわけで手動ならどうするのか?
結局のところ、ログイン認証がADなら手動でも簡単にできそう。でも、SQL認証なんだな。
SQL認証の場合、ログイン名で管理しているのではなくSIDで管理しているらしい。ということは、SIDが同じでないとセキュリティの設定が反映できないということ?
まず、DBにあるユーザーでログイン アカウントを持っていない人を表示させてみる。
USE データベース名
EXEC sp_change_users_login 'Report'
go
これで出てくるユーザーのことを「不明なデータベースユーザー」というらしい。
この不明なユーザーに割り当てるSQLへのログインアカウントを作成して、SIDとマッピングさせてやる必要がある。
「SQLへのログインアカウント」を作成し、マッピングを更新するために次のスクリプトを実行
use データベース名
exec sp_change_users_login 'Update_One' , 'DBにあるユーザー名' , '作成したユーザー名'
go
くわしくはこちら