IT

データベースを移行したらログインが出来なくなったときの解決方法【SQL Server編】

30_001_01

こんにちは!システムオペレーション部の「なべ」です!
 
今回は、以前、SQL Server 2008からSQL Server 2012へデータベースを移行した際に、初心者の私がつまずいてしまった事象と解決方法を紹介します。
 
 
SQL Server 2008からリストア作業が終わり、SQL Server 2012へ復元。
管理者以外のログインユーザーを追加した際に事件が起きました。
 
「追加したユーザーでログイン出来ない」
 
ユーザー情報は、以前のSQL Server と同じ設定をしています。
 
なぜ、ログインができないのでしょうか?
解決するには?
 
まずは一通り、設定を確認してみましょう。
 

・データベースへの接続権限があるか?

※今回はデータベース名を「TESTDB」
ユーザーを「TESTUSER」として設定を行います。
30_001_02
「データベースのプロパティ」から接続権限を確認しましょう。[接続]の許可欄にチェックが入っていれば問題ありません。
※赤枠部分参照
 

・ユーザーの状態はどのように設定されているか?

30_001_03
まずはTESTUSERの「ユーザーマッピング」を確認。
TESTDBに対してTESTUSERが設定されています。
30_001_04
次に、TESTUSERの「状態」。
「データベースエンジンに接続する権限」に[許可]が入ってれば問題はなさそうですが、「状態」が[SQL Server認証]になっている場合は、認証方式を確認します。
30_001_05
「サーバーのプロパティ」の「セキュリティ」より、サーバ認証を確認し、[SQL Server認証モードとWindows認証モード(S)]にチェックが入っていれば、認証モードの整合性が取れています。
 
上記のを確認し、何も問題が見つからなければ・・・
 
「復元元と同じユーザーを設定しても、別ID管理されているため、正常にマッピングされない。」
原因はこれである可能性が高いと思われます。
 
解決策は、再マッピングすること。
 
 

※マッピングとは・・・「関連付けること」
 今回であれば、TESTDBとTESTUSERを再度関連付ける。

 
 
以下のSQLを実行するとログイン出来るはずです。

USE TESTDB
EXEC sp_change_users_login 'Update_One','[現在データベースに登録してあるユーザ名]','[ログインしたいユーザー名]'

 
今回のケースだと以下のようになります。

USE TESTDB
EXEC sp_change_users_login 'Update_One','TESTUSER','TESTUSER'

 
これで解決できたでしょうか?
 
目に見えている部分が全てではないという事を思い知らされ、記事の内容以上に、苦しめられた事象でした。
同じ事象でつまずいている方がいたら、ぜひ参考にしていただければと思います。