web-dev-qa-db-ja.com

「ユーザーのデフォルトデータベースを開けません。ログインに失敗しました。」 SQL Server Management Studio Expressをインストールした後

プログラムが使用するローカルファイルにデータベースがあります。プログラムの機能は制限されており、いくつかの簡単なクエリを実行する必要がありました。 SQL Server Management Studio Express 2005(SSMSE)をインストールし、SQL Serverインスタンスに接続して、データベースファイルを接続し、クエリを実行しました。これで、元のプログラムはデータベースに接続しなくなります。私はエラーを受け取ります:

ユーザーのデフォルトデータベースを開けません。ログインに失敗しました。ユーザー 'MyComputer\MyUserName'のログインに失敗しました。

SSMSEに戻り、デフォルトのデータベースを設定しようとしました。 Security、Logins、BUILTIN\AdministratorsおよびBUILTIN\Usersを開きました。 Generalの下で、デフォルトのデータベースをプログラムのデータベースに設定しました。 ユーザーマッピングの下で、データベースがチェックされていること、およびdb_datareaderおよびdb_datawriterがチェックされていることを確認しました。

プログラムは接続文字列を使用します。

サーバー=(ローカル)\インスタンス; AttachDbFilename = C:\ PathToDatabase\Database.mdf;統合セキュリティ=真;ユーザーインスタンス= True;

私はデータベース管理についてのすべてを知っています。他に何が欠けていますか?

15
Hand-E-Food

まず、問題を特定してみます。

  1. ファイルのバックアップを取ってください!以下の手順のいくつかは、明らかに、状況によってはファイルが消えてしまう可能性があります。
  2. プログラムと同じように、Management Studioを介して同じインスタンスに接続していますか?
  3. 可能であれば、使用する予定のないインスタンスをシャットダウンしてみてください。
  4. ユーザーのデフォルトデータベースをマスターに設定し、プログラムにログオンしてみます。
  5. Management Studioを介してユーザーとしてログインしてみてください。セキュリティが統合されているため、プログラムのユーザーとしてManagement Studioを開く必要があります。
  6. 「ユーザーインスタンス」を使用していますか-おそらく知らないのでしょうか?もしそうなら、これは役に立つかもしれません: http://blogs.msdn.com/b/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management- studio.aspx

プログラムのようにファイルを添付する方法についてはあまり作業していませんが、Management StudioでDBを添付したことも書いています。プログラムを実行する前に、デタッチしてみましたか?おそらく、Management StudioとプログラムがMDFファイルへの排他的アクセスをめぐって競合しているのを見ていますか?

編集:上記のポイント6を追加しました-これは、このタイプのログインのトラブルシューティングに失敗したときに、自分のTODOリストに新しく追加されました。しかし、それはあなたが経験しているものとよく似ています。

EDIT2:最初の編集で、新しいアイテムがリストに追加されました。したがって、コメント内の数字は回答内の数字と一致しません。

6
user806549

これは具体的にあなたの質問に答えていないかもしれませんが、同様の問題を持つ他の人を助けるでしょう

問題は、ユーザーが何らかの理由でアクセスできないデータベースにデフォルト設定されていることです(名前の変更、削除、破損など)。問題を解決するには、次の手順に従ってください。

  1. ログインページでもう一度ログインしてみてください。他のタブで[接続プロパティ]を選択してください。
  2. タブの下で「データベースに接続」を見つけて、tempdbやマスターなどのアクセス権がある既存のデータベースを選択します
  3. SQL Serverインスタンスに接続したら、以下のTSQLを実行して、ログインに新しいデフォルトデータベースを割り当てます。

    Use master
    GO
    
    ALTER LOGIN [yourloginname] WITH DEFAULT_DATABASE = TempDB
    GO
    

または、接続したら、デフォルトのデータベース名をUI経由でマスターに変更します

取られた記事: http://www.mytechmantra.com/LearnSQLServer/Fix-cannot-open-user-default-database-Login-failed-Login-failed-for-user-SQL-Server-Error/

8
Kiarash

私はついにこれを理解しました、そして私の状況は今夜読んだ他のどの状況とも異なります。

バックアップからデータベースを復元しました。私が使用していた特定のログインユーザーがいることを知っていたので、そのユーザーをSSMSで作成しました。ただし、バックアップに含まれていたデータベースの下に、その名前のユーザーがすでに存在していました。

私はこれを修正するために多くのことをやったので、DBの下のユーザーを簡単に削除することができませんでした。データベースを削除して、再度復元しました。次に:

  1. Databases-> [my database]-> Usersでユーザーを削除します
  2. Security-> Loginsでユーザーを再度作成します(DBの下ではありませんが、おそらくうまくいきます)。
  3. 新しく作成したユーザーに移動します。プロパティを選択します。次に、[ユーザーマッピング]で、データベースをデフォルトにするように指示します。読み取りおよび書き込みアクセス権を付与します。

概要:2人のユーザーがいました。 DBに付属するものと、私が作成したもの。 DBに付属しているものを削除して、独自のものを作成します。

2
DustinA

この問題は、デフォルトのデータベースをオフラインにしたときに明らかになりました。次に、ログインできなかったことがわかります。 [接続プロパティ]タブに切り替えて、ドロップダウンを選択して接続したいデータベースを変更することもできませんでした。

([接続のプロパティ]タブで)接続したいデータベースとしてmasterを手動で入力すると、すぐにそれが可能になりました。

1
Mike Cheel

まず、「サーバーへの接続」プロンプトのオプション>>ボタンをクリックします。

次に、データベースへの接続を、masterやmsdbなどのサーバー上の既存のデータベースに変更します。

もっと詳しく

https://blog.sqlauthority.com/2008/11/04/sql-server-fix-error-4064-cannot-open-user-default-database-login-failed-login-failed-for-ユーザー/

1
Sundar

私も同じ問題を抱えていて、組み込みのメンバーシップクラス(ビュー内)にアクセスしようとしていること、そして.NetがApp_Dataフォルダーにデータベースを作成しようとしていることがわかりました。

@Membership.GetUser().ProviderUserKey

これにより、システムがトリガーされ、組み込みのメンバーシップシステムに基づいてデータベースを作成しようとします。これは、システムのセットアップ方法とは異なる場合があります。

0
Terry Kernan

同様の問題がありましたが、ユーザーインスタンスを起動できるSQL Expressユーティリティをダウンロードする必要がありました。 SSEUtilは、Visual Studioチームがユーザーインスタンスの問題のトラブルシューティングを支援するために作成したツールです。このユーティリティの詳細については、ユーティリティと共にインストールされるRead Meファイルを参照してください。 http://www.Microsoft.com/downloads/details.aspx?FamilyID=fa87e828-173f-472e-a85c-27ed01cf6b02&DisplayLang=en

これがお役に立てば幸いです。

0
Benson Makoni

私の場合、「任意のデータベースに接続する」正しいパスを設定する必要がありました。

インスタンスでSecurityに移動し、次にLoginsに移動します。

そこを右クリックすると、propertiesが表示されます。Securablesをクリックしてください。

そこでは、任意のデータベースに接続する可能性を与えます。

0
wookee80