web-dev-qa-db-ja.com

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

いくつかのデータをdbに保存するWebサービスを作成しました。しかし、私はこのエラーを受け取っています:

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

私の接続文字列は

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

さて、エラーはかなり明確です、違いますか?ユーザー "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」がある場合。

44
marc_s
  • いずれか:「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]
22
gbn

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

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

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

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

8
Rajeev

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

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

私の場合、コードは問題なくコンパイルされ、同じログインの問題をコンパイルしましたが、まだ管理スタジオをダウンロードしている間、エラーログを調べ、dbコンテキストの制約を修正し、サイトが正常に動作し始めました...

7
Justice O.

私はこの問題を抱えていましたが、私にとってそれを解決したのは:

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

問題

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

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

  • 通常、このエラーは、単純なVisual Studioまたはコンピューター全体の再起動では修正できません。
  • このエラーは、一見ロックされたデータベースファイルとして検出されることもあります。

修正

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

前提条件:SQL Server Management Studio(FullまたはExpress)がインストールされている必要があります

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

ソリューションのソース:https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-リクエストされたログイン失敗

3
Anton Lyhin

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

_dbContext.Database.EnsureCreated()

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

3
cyptus

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

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

user('ftool')を適宜置き換えてください。

2
shashank

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

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

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

1
Giorgi

以前の号でこれについて言及したことはないので、別の可能性を捨てさせてください。 IFItestに到達できないか、単に存在しない可能性があります。たとえば、それぞれに独自のデータベースを持つ多数の構成がある場合、データベース名が現在の構成の正しい名前に変更されていない可能性があります。

1
demongolem

これは私のために働く。

  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 /

1
Kamran

私が使用したcyptusの答えに触発された

_dbContext.Database.CreateIfNotExists();

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

1

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

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

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

1
Grey Wolf

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

0

私の場合、asp.netアプリケーションは通常、問題なくデータベースに接続できます。ログにそのようなメッセージがあることに気付きました。 I 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 ServerがASP.NETアプリケーションより少し早くシャットダウンし、サーバーが再起動する前の数秒間データベースが利用できなかったようです。

0
Tomas Kubes

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

0
Chris Halcrow

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

編集:ログインをデータベース所有者として設定すると、次の問題も解決しました

0
DevDave

私の場合、「システム」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 $」について文句を言う理由がわかりません。そのログインと対応するユーザーを削除しましたが、すべて機能します。

0
Greg Z.

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

悪い英語についての私の謝罪。よろしく、イグナット。

0
user3041948

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

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

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