例えば、SQL Server で "testDB" というデータベースを運用しているとします。
この SQL Server には "userA" という SQL ユーザがおり、SQL 認証でのログインが可能で、"testDB" に対して db_owner のロールを持っているとします。
この "testDB" データベースをデタッチして、新たに SQL Server をインストールした別のサーバに "testDB" の mdf,ldf ファイルを移してアタッチします。
この時、どうやら mdf ファイルに前のサーバで設定した データベースユーザの情報が残っているらしく、Management Studio でみると、"testDB" のセキュリティに "userA" が表示されます。
ただ、SQL Server 全体のセキュリティには表示されません。
ちょうど下記のような状態です。(SQL Server からユーザ削除した時と同じ現象ですね。)
これは "testDB" の "userA" のプロパティです。ログインができなくなってます。
この状態で、下記のように "userA" を作っても、うまく "testDB" とのマッピングができません。
USE [master]
GO
CREATE LOGIN userA WITH PASSWORD=N'1234', DEFAULT_DATABASE=testDB, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE testDB
GO
CREATE USER userA FOR LOGIN userA
GO
USE testDB
GO
EXEC sp_addrolemember N'db_owner', N'userA'
GO
このように、マッピングされていない状態となってしまいます。
それで、上記のコマンドの前にいったん "testDB" に関連付けられてる "userA" を削除する下記 SQL を実行したら、上記コマンド実行後にちゃんと "testDB" と "userA" がマッピングされるようになりました。
USE [testDB]
GO
DROP USER [userA]
GO
まあ、Management Studio から手動でマッピングしてもいいんですが、パッケージ製品として、インストール時にバッチファイル等で初期設定するときとかは SQL コマンドでやったほうが楽ですね。