一部のデータをdbに保存するWebサービスを作成しました。しかし、私はこのエラーを得ています:
ログインで要求されたデータベース「テスト」を開けません。ログインに失敗しました。ユーザー「xyz \ ASPNET」のログインに失敗しました。
私の接続文字列は
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
一部のデータをdbに保存するWebサービスを作成しました。しかし、私はこのエラーを得ています:
ログインで要求されたデータベース「テスト」を開けません。ログインに失敗しました。ユーザー「xyz \ ASPNET」のログインに失敗しました。
私の接続文字列は
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
回答:
まあ、エラーはかなり明確です、いいえ?ユーザー "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」がいる場合。
私は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]
私にはこの問題があり、私のためにそれを解決したのは:
ログイン問題の最善の解決策は、sqlServerにログインユーザーを作成することです。Windows認証(SQL Server Management Studio)を使用するSQL Serverログインを作成する手順は次のとおりです。
たとえば、ユーザー名がの場合、xyz\ASPNET
この名前を[ログイン名]ボックスに入力します。
また、ユーザーマッピングを変更して、アクセスしたいデータベースへのアクセスを許可する必要があります。
ほとんどの場合、これはログインの問題ではなく、データベース自体の作成に関する問題です。したがって、データベースの作成中にエラーが発生した場合、そもそもデータベースは作成されません。その場合、ユーザーに関係なくログインしようとすると、ログインに失敗します。これは通常、dbコンテキストの論理的な誤解が原因で発生します。
ブラウザでサイトにアクセスし、それらのエラーログを実際に読んでください。これは、コードの問題(通常、モデルとのロジックの競合問題)を特定するのに役立ちます。
私の場合、コードは問題なくコンパイルされ、同じログイン問題が発生しました。ManagementStudioをダウンロードしている間にエラーログを確認し、DBコンテキストの制約を修正して、サイトが正常に動作し始めました...
エラーは次のようなメッセージとして表示されます。
ログインで要求されたデータベース「データベース名」を開けません。ログインに失敗しました。ユーザーXYZのログインに失敗しました。
ソリューションは次の手順で設定されます。データベース内のデータが失われることはなく、データベースファイルを削除しないでください。
前提条件:SQL Server Management Studio(フルまたはエクスプレス)をインストールしておく必要があります。
ソリューションのソース: https : //www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
これは私にとってはうまくいきます。
このブログを読んでください。
Windows認証を使用してローカルデータベースの.mdfファイルに接続し、ローカルサーバーはsql server 2014でした。この接続文字列を使用して問題を解決しました:
string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
私の場合は別の問題です。データベースがシングルユーザーモードになり、データベースへの2番目の接続でこの例外が発生していました。この問題を解決するには、以下の手順に従ってください。
exec sp_who2
を実行して、データベース 'my_db'へのすべての接続を見つけます。KILL { session id }
セッションIDがsp_who2によって一覧表示されたSPIDである場合は、すべての接続を強制終了します。USE MASTER;
EXEC sp_who2
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO
注意:Windowsサービスを使用してWebサービスをホストする場合。
Webサービスが正しいログオンアカウントを使用してSQL Serverに接続していることを確認する必要があります。
私が使用したcyptusの回答に触発されました
_dbContext.Database.CreateIfNotExists();
最初のデータベース接続の前(DBシード前)のEF6。
サーバーにデータベースを作成していない場合、同じログインエラーが発生します。ログインする前に、データベースが存在することを確認してください。
asp.net mvcテンプレートで提供されるデフォルトのデータベースに書き込もうとしたときに、この問題に遭遇しました。これは、データベースがまだ作成されていないためです。
データベースを作成してアクセス可能であることを確認するには、次の手順に従います。
これにより、データベースが作成され、必要なすべての移行が実行されます。
このdbを別のsqlサーバーで開いて(たとえば、sql managment studio(SMS)を起動してこのdbを追加した場合)、このサーバーの停止を忘れると、この問題が発生することがあります。その結果、あなたはアプリが別のサーバーの下でこのデータベースに既に接続されているユーザーと接続しようとしました。これを修正するには、このサーバーを構成で停止してください。ディスパッチャーSQLサーバー。
悪い英語についての私の謝罪。よろしく、Ignat。
私の場合、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アプリケーションとデータベースよりも少し前にシャットダウンしていたため、サーバーが再起動する前の数秒間はデータベースを使用できませんでした。
私の場合、「システム」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 $」について文句を言う理由がわかりません。そのログインと対応するユーザーを削除しましたが、すべてうまくいきます。