SQL Server 2008 R2データベースに接続するASP.NET MVC3 Webアプリを開発しています。
私がこのエラーを受け取り始めるまで、すべてがうまくいきました:
The database myDb is not accessible. (ObjectExplorer)
この問題は、SQL Server Management Studioでデータベースを参照しようとしたときにも発生します。データベースにアクセスするための権限を失ったようです。他のデータベースも問題なく閲覧できます。
私は混合モード認証を使用しています(これまでWindows認証は正常に機能していました)。 sa
としてログインすると、同じエラーが発生します。
データベースにアクセスできない場合、必要な権限をユーザーアカウントに戻すにはどうすればよいですか?
そもそもどういうことでこれが起こったのでしょうか?
最近行った唯一の変更はデータベースに関連したものではなく、これを引き起こしている原因を突き止めるのに苦労しています。
更新さて、コンピュータを再起動した後、すべてが再び動作し始めました:/私は何も変更していません、まだここで返信を読んでいませんでした。非常に奇妙な!
更新さて、コンピュータを再起動した後、すべてが再び動作し始めました:/私は何も変更していません、まだここで返信を読んでいませんでした。非常に奇妙な!
過去に、SQLインスタンスから削除されたように、DB所有者が悪用されていることが原因であることがわかりました。
クエリウィンドウからこれを試してください:
use <database with issue>;
exec sp_changedbowner 'sa';
その後、SSMSエクスプローラーでDBを参照できるようになります。
混合モード認証を使用していない場合は、ドメインアカウントを使用して「sa」を抑制します。できれば、SA権限を持つサービスアカウントとして機能するアカウントを使用してください。
受け入れられた答えは、すべてが再起動後に機能し始めたと言いますが、なぜですか?
SSDT(Visual Studioプラグイン)を使用してデータベースを更新しようとしたところ、これが起こり、スクリプトがエラーで失敗しました。その後、SSMS(Management Studio)からでもデータベースにアクセスできませんでした。データベースエントリの横に「(シングルユーザー)」と表示されていましたが、これが問題の手がかりでした。
スクリプトはデータベースをSINGLE_USERモードに設定し、MULTI_USERに戻す前に突然終了しました。その後、データベースはSSDTユーザーをまだアクティブであると見なし、他の接続を許可しませんでした。再起動すると、その接続がクリアされ(SQL Serverサービスを循環させると、おそらくそれも実行されたはずです)、再接続できました。
そこから、DBプロパティ([オプション]-> [状態]-> [アクセス制限])を使用してデータベースをMULTI_USERモードに戻すことができますが、代わりに、完了まで実行された別のソースブランチからSSDTを実行し、モードをリセットしました。
非常に一般的なエラーメッセージのように見えます。 Windows認証ユーザーから以下を実行して、結果が返されるかどうかを確認してください。
EXEC sp_change_users_login 'report'
はいの場合は、以下を実行します。
EXEC sp_change_users_login 'auto_fix', 'username_from_above'
これで問題が解決しない場合は、別の方法を試してみます。