ログインによって要求されたデータベース「テスト」を開くことができません。ログインに失敗しました。ユーザー「xyz \ ASPNET」のログインに失敗しました


97

一部のデータをdbに保存するWebサービスを作成しました。しかし、私はこのエラーを得ています:

ログインで要求されたデータベース「テスト」を開けません。ログインに失敗しました。ユーザー「xyz \ ASPNET」のログインに失敗しました。

私の接続文字列は

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True

これを診断する前に、さらに多くの情報が必要です。
2010

私はこの問題を抱えていて、ビジュアルスタジオを閉じて再び開き、それが機能し始めました
。– trees_are_great

回答:


47

まあ、エラーはかなり明確です、いいえ?ユーザー "xyz / ASPNET"でSQL Serverに接続しようとしています-これは、ASP.NETアプリが実行されているアカウントです。

このアカウントはSQL Serverへの接続を許可されていません-SQL Serverでそのアカウントのログインを作成するか、接続文字列で別の有効なSQL Serverアカウントを指定してください。

(元の質問を更新して)接続文字列を見せていただけますか?

更新:OK、統合Windows認証を使用しています-> SQL Serverで "xyz \ ASPNET"のSQL Serverログインを作成するか、接続文字列を次のように変更する必要があります。

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

データベースに「top $ secret」のパスワードを持つユーザー「xyz」がいる場合。


11
「SQL Serverへの接続は許可されていません」ではなく、「データベース "test"の使用は許可されていません」。
wRAR 2010

@wRAR:true-しかし、ユーザーログインがサーバー上に存在するが、この特定のデータベースでは有効になっていない可能性があります。おそらく(おそらく私は)スリムです
marc_s

"Database = IFItest"と "test"も参照してください。
wRAR 2010

2
あなたが触れたことのない1つのポイントは、DB名も間違っている可能性があるということです。Azure SQL Serverから一見したような例外メッセージがスローされていましたが、ASP.NETプロジェクトのC#コードの接続文字列の1つで、DBに間違った名前を付けていました。
Ron16

ロン、それは私の問題でした。私はスペルを再確認しましたが、それでもそれを逃しました。
ダレルロイドハーヴェイ

32
  • 「xyz \ ASPNET」はログインではありません(sys.server_principals内)
  • または: "xyz \ ASPNET"はセットアップされていますが、データベーステスト(sys.database_principals)でユーザーにマップされていません

私は2番目のオプションを選びます。エラーメッセージは、デフォルトのデータベースがそこにないか、ログインとして設定されていないのではなく、そこに権限がないことを示しています。

ログインとして設定されているかどうかをテストするには

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

NULLの場合

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

NULLでない場合

USE test
GO
SELECT USER_ID('xyz\ASPNET')

NULLの場合

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]

1
これはすばらしい!問題を検出して解決する単純なワークフローです。
Mazen el Senih

12

私にはこの問題があり、私のためにそれを解決したのは:

  • IISのアプリケーションプールに移動します。
  • プロジェクトアプリケーションプールを右クリック
  • プロセスモデルセクションでIDを開きます
  • カスタムアカウントオプションを選択
  • PCのユーザー名とパスワードを入力します。

私も働いた!
Mazen el Senih

8

ログイン問題の最善の解決策は、sqlServerにログインユーザーを作成することです。Windows認証(SQL Server Management Studio)を使用するSQL Serverログインを作成する手順は次のとおりです。

  1. SQL Server Management Studioでオブジェクトエクスプローラーを開き、新しいログインを作成するサーバーインスタンスのフォルダーを展開します。
  2. [セキュリティ]フォルダを右クリックし、[新規作成]をポイントして、[ログイン]をクリックします。
  3. [全般]ページで、[ログイン名]ボックスにWindowsユーザーの名前を入力します。
  4. Windows認証を選択します。
  5. OKをクリックします。

たとえば、ユーザー名がの場合、xyz\ASPNETこの名前を[ログイン名]ボックスに入力します。

また、ユーザーマッピングを変更して、アクセスしたいデータベースへのアクセスを許可する必要があります。


8

ほとんどの場合、これはログインの問題ではなく、データベース自体の作成に関する問題です。したがって、データベースの作成中にエラーが発生した場合、そもそもデータベースは作成されません。その場合、ユーザーに関係なくログインしようとすると、ログインに失敗します。これは通常、dbコンテキストの論理的な誤解が原因で発生します。

ブラウザでサイトにアクセスし、それらのエラーログを実際に読んでください。これは、コードの問題(通常、モデルとのロジックの競合問題)を特定するのに役立ちます。

私の場合、コードは問題なくコンパイルされ、同じログイン問題が発生しました。ManagementStudioをダウンロードしている間にエラーログを確認し、DBコンテキストの制約を修正して、サイトが正常に動作し始めました...


6

私にとってデータベースは作成されなかったので、EFコードが最初にデータベースを作成するはずでしたが、常にこのエラーが発生していました。同じ接続文字列がaspnetコアのデフォルトのWebプロジェクトで機能していました。解決策は追加することでした

_dbContext.Database.EnsureCreated()

最初のデータベース接続の前(DBシード前)。


4

問題

エラーは次のようなメッセージとして表示されます。

ログインで要求されたデータベース「データベース名」を開けません。ログインに失敗しました。ユーザーXYZのログインに失敗しました。

  • エラーは通常、単純なVisual Studioまたは完全なコンピューターの再起動では修正できません。
  • エラーは、ロックされているように見えるデータベースファイルとしても見つかります。

修正

ソリューションは次の手順で設定されます。データベース内のデータが失われることはなく、データベースファイルを削除しないでください。

前提条件:SQL Server Management Studio(フルまたはエクスプレス)をインストールしておく必要があります。

  1. SQL Server Management Studioを開く
  2. [サーバーへの接続]ウィンドウ([ファイル]-> [オブジェクトエクスプローラーの接続])で、次のように入力します。
    • サーバーの種類:データベースエンジン
    • サーバー名:(localdb)\ v11.0
    • 認証:[ローカルデータベースを作成したときに使用したもの。おそらくWindows認証)。
  3. 「接続」をクリック
  4. オブジェクトエクスプローラーの[データベース]フォルダーを展開します([表示]-> [オブジェクトエクスプローラー]、F8)。
  5. データベースを見つけます。データベース(.mdf)ファイルへの絶対パスとして名前を付ける必要があります
    • データベース名の最後に「(保留中の回復)」と表示されているか、データベースを拡張しようとするとエラーメッセージが表示される場合と表示されない場合があります。
    • これが問題!データベースが本質的にクラッシュしました。
  6. データベースを右クリックして、[タスク]-> [デタッチ...]を選択します。
  7. デタッチウィンドウで、リストからデータベースを選択し、「Drop Connections」という列を確認します
  8. OKをクリックします。
  9. データベースのリストからデータベースが削除されます。これで問題は修正されるはずです。localdbを使用するアプリケーションに移動して実行します。
  10. アプリケーションを実行すると、データベースがデータベースのリストに再表示されます-これは正しいです。正常に機能しているはずなので、「保留中のリカバリ」と表示されないはずです。

ソリューションのソース: https : //www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


問題は、そのDBが見つからないことです。
Shimmy Weitzhandler 2017年

3

DBの名前を間違って入力した場合にも発生します

ex : xxx-db-dev to xxx-dev-db

時々、それは単なる愚かな間違いです。私はこれを見つけるのに1時間以上かかります:(私は最初にたくさんの難しいことを試してみるので


2

ユーザーを更新してみましたが、うまくいきました。以下のコマンドを参照してください。

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

user('ftool')適宜交換してください。


2

これは私にとってはうまくいきます。

  1. SQL Server >>セキュリティ>>ログインに移動し、NT AUTHORITY \ NETWORK SERVICEを右クリックして[プロパティ]を選択します
  2. 新しく開いたログインプロパティの画面で、[ユーザーマッピング]タブに移動します。
  3. 次に、[ユーザーマッピング]タブで、目的のデータベース、特にこのエラーメッセージが表示されるデータベースを選択します。
  4. OKをクリックします。

このブログを読んでください。

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- user-nt-authoritynetwork-service /


おかげで、 "NT AUTHORITY \ SYSTEM"を使用すると問題が解決しました。
Farzad Karimi

2

Windows認証を使用してローカルデータベースの.mdfファイルに接続し、ローカルサーバーはsql server 2014でした。この接続文字列を使用して問題を解決しました:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";

ローカルDBを機能させるために、この部分 "User Instance = True"を削除する必要がありました
匿名

2

私の場合は別の問題です。データベースがシングルユーザーモードになり、データベースへの2番目の接続でこの例外が発生していました。この問題を解決するには、以下の手順に従ってください。

  1. オブジェクトエクスプローラがmasterなどのシステムデータベースを指していることを確認してください。
  2. a exec sp_who2を実行して、データベース 'my_db'へのすべての接続を見つけます。KILL { session id }セッションIDがsp_who2によって一覧表示されたSPIDである場合は、すべての接続を強制終了します。
USE MASTER;
EXEC sp_who2
  1. データベースを変更する
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

これまでの問題で触れたことはないので、別の可能性を捨ててみましょう。IFItest到達できないか、単に存在しない可能性があります。たとえば、それぞれが独自のデータベースを持ついくつかの構成がある場合、データベース名が現在の構成の正しい名前に変更されなかった可能性があります。


1

注意:Windowsサービスを使用してWebサービスをホストする場合。

Webサービスが正しいログオンアカウントを使用してSQL Serverに接続していることを確認する必要があります。

  • オープンサービス(Windowsサービスがインストールされていると思います)
  • サービスを右クリックし、プロパティに移動します。
  • 「ログオン」タブをクリックします
  • 「このアカウント」ラジオボタンをクリックします
  • 「参照」をクリックします
  • テキストフィールドにPCユーザー名を入力し、右側の[名前の確認]ボタンをクリックします。
  • テキストフィールドのテキストをクリックし、「OK」ボタンを押します
  • ログインパスワードを入力して適用


1

サーバーにデータベースを作成していない場合、同じログインエラーが発生します。ログインする前に、データベースが存在することを確認してください。


1

asp.net mvcテンプレートで提供されるデフォルトのデータベースに書き込もうとしたときに、この問題に遭遇しました。これは、データベースがまだ作成されていないためです。

データベースを作成してアクセス可能であることを確認するには、次の手順に従います。

  1. Visual Studioでパッケージマネージャーコンソールを開く
  2. コマンド「update-database」を実行します

これにより、データベースが作成され、必要なすべての移行が実行されます。


0

sql認証よりも安全であるため、Windows統合認証を使用することをお勧めします。必要な権限を持つSQLサーバーで新しいWindowsユーザーを作成し、アプリケーションプールのセキュリティ設定でIISユーザーを変更します。


0

新しいログインを作成するときにUserMappingオプションも設定する必要があることがわかり、これで問題が解決しました。ここで立ち往生していることに気付いた人にも役立つことを願っています!

編集:db所有者としてログインを設定すると、次の問題も解決されました


0

このdbを別のsqlサーバーで開いて(たとえば、sql managment studio(SMS)を起動してこのdbを追加した場合)、このサーバーの停止を忘れると、この問題が発生することがあります。その結果、あなたはアプリが別のサーバーの下でこのデータベースに既に接続されているユーザーと接続しようとしました。これを修正するには、このサーバーを構成で停止してください。ディスパッチャーSQLサーバー。

悪い英語についての私の謝罪。よろしく、Ignat。


0

私の場合、asp.netアプリケーションは通常、問題なくデータベースに接続できます。ログでそのようなメッセージに気づきました。SQLサーバーログオンにすると、次のメッセージが表示されます。

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

そのため、サーバーが再起動しており、SQLサーバーがASP.NETアプリケーションとデータベースよりも少し前にシャットダウンしていたため、サーバーが再起動する前の数秒間はデータベースを使用できませんでした。


0

ログインをDB所有者として設定し、ログインを使用するデータベースのユーザーマッピングを設定した場合でも、実際のDBユーザー(ログインだけでなく)が「所有者」の役割を持っていることを確認してください。


0

私の場合、「システム」IDでWindowsサービスを実行していました。エラーは:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

問題は、エラーが非常に誤解を招くということです。'MYDOMAINNAME \ HOSTNAME $'ログインをデータベースに追加し、このログインにsysadminアクセスを許可して、ターゲットデータベースにそのログインのユーザーを追加し、そのユーザーをdbownerにした後でも、同じエラーが発生していました。どうやら私は 'NT AUTHORITY \ SYSTEM'ログインにも同じことをする必要がありました。その後、問題なくログインできました。エラーメッセージが「MYDOMAINNAME \ HOSTNAME $」について文句を言う理由がわかりません。そのログインと対応するユーザーを削除しましたが、すべてうまくいきます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.