SQL Server 運用をしていると、データベースを移動したりする件が出てきます。バックアップ、リストア、新しい環境への移行、サーバー本体とデータベースファイルの切り離しはリスクが伴います。
通常は SQL Server Management Studio があれば大体のことができます。ところが、標題の件についてはできません。ここはクエリを発行するしかなさそうです。
まず基礎知識から。SQL Server のデータベースシステムには「ログイン」と「ユーザー」という似たような概念があります。通常は同じ名前をつけるので意識しませんが、以下の意味を持っています。
- ログイン
SQL Server に入るためのアカウント情報です。ID/パスワードや、Microsoft アカウントの関連付け、サーバー全体の権限、役割を管理します。 - ユーザー
ログインした後のアカウント情報です。特定のデータベースに、どの名前でデータを扱うかを管理します。どのテーブルの書き込みができるようにするかなど、データベース単位での権限を管理します。
さて、このユーザーについてはデータベースファイルにくっついてきます。なので UserA というユーザーを持っているとき、他のサーバーに移動すると UserA も一緒に移行されます。
ややこしいのですが、以降先のサーバーに、仮に UserA があったとしても、同じものとは見てくれません。理由は人間の目で見えるユーザー名では管理していないからです。ServerA の UserA で内部IDが"1a2b-3c4d-5e6f"だったとすると ServerB の UserA は"0a9b-8c7d-6e5f"のように別物になるので、移行されたサーバーからは「しらないひと」となるわけです。
これをログインとユーザーを割り当てするには「ALTER USER」を使います。構文は以下のとおりです。
これで、ID の関連付けができるようになりました。