いくつかのデータをdbに保存するWebサービスを作成しました。しかし、私はこのエラーを受け取っています:
ログインで要求されたデータベース「test」を開けません。ログインに失敗しました。ユーザー '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コンテキストの論理的な誤解が原因で発生します。
ブラウザーでサイトにアクセスし、これらのエラーログを実際に読んでください。これにより、コードの問題(通常はモデルと競合するロジックの問題)を見つけることができます。
私の場合、コードは問題なくコンパイルされ、同じログインの問題をコンパイルしましたが、まだ管理スタジオをダウンロードしている間、エラーログを調べ、dbコンテキストの制約を修正し、サイトが正常に動作し始めました...
私はこの問題を抱えていましたが、私にとってそれを解決したのは:
エラーは、次のようなメッセージとして表示されます。
ログインで要求されたデータベース「データベース名」を開けません。ログインに失敗しました。ユーザーXYZのログインに失敗しました。
ソリューションは、次の手順で設定されます。データベース内のデータが失われることはありません。データベースファイルを削除しないでください。
前提条件:SQL Server Management Studio(FullまたはExpress)がインストールされている必要があります
ソリューションのソース:https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-リクエストされたログイン失敗
私にとっては、データベースは作成されておらず、EFコードは最初にデータベースを作成する必要がありましたが、常にこのエラーが発生しました。同じ接続文字列は、aspnetコアのデフォルトWebプロジェクトで機能していました。解決策は追加することでした
_dbContext.Database.EnsureCreated()
最初のデータベース接続の前(DBシード前)。
ユーザーを更新しようとしましたが、うまくいきました。以下のコマンドを参照してください。
USE ComparisonData// databaseName
EXEC sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';
user('ftool')
を適宜置き換えてください。
Windows認証を使用してローカルデータベースの.mdfファイルに接続し、ローカルサーバーはsql server 2014でした。この接続文字列を使用して問題を解決しました。
string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
最良のオプションは、SQL認証よりも安全であるため、Windows統合認証を使用することです。必要なアクセス許可を持つSQLサーバーで新しいWindowsユーザーを作成し、アプリケーションプールのセキュリティ設定でIISユーザーを変更します。
以前の号でこれについて言及したことはないので、別の可能性を捨てさせてください。 IFItest
に到達できないか、単に存在しない可能性があります。たとえば、それぞれに独自のデータベースを持つ多数の構成がある場合、データベース名が現在の構成の正しい名前に変更されていない可能性があります。
これは私のために働く。
このブログを読んでください。
私が使用したcyptusの答えに触発された
_dbContext.Database.CreateIfNotExists();
eF6で最初のデータベース接続の前(DBシード前)。
間違った名前のDBを入力した場合にも発生します
ex : xxx-db-dev to xxx-dev-db
いつか、それはただの愚かな間違いです。私はこれを見つけるのに約1時間以上かかります:(私は最初に難しいことをたくさん試します
サーバーにデータベースを作成していない場合は、同じログインエラーが発生します。ログインする前にデータベースが存在することを確認してください。
私の場合、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アプリケーションより少し早くシャットダウンし、サーバーが再起動する前の数秒間データベースが利用できなかったようです。
ログインをDB所有者として設定し、ログインを使用するデータベースのユーザーマッピングを設定した場合でも、実際のDBユーザー(ログインだけでなく)が「所有者」の役割を持っていることを確認してください。
新しいログインを作成するときにUserMappingオプションも設定する必要があり、これで問題が解決しました。ここで立ち往生している人にも役立つことを願っています!
編集:ログインをデータベース所有者として設定すると、次の問題も解決しました
私の場合、「システム」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 $」について文句を言う理由がわかりません。そのログインと対応するユーザーを削除しましたが、すべて機能します。
このdbを別のsqlサーバーで開き(たとえば、sql managment studio(SMS)を起動してこのdbを追加する)、このサーバーの停止を忘れると、この問題が発生することがあります。その結果、アプリは別のサーバーの下でこのデータベースに既に接続されているユーザーと接続しようとします。これを修正するには、Configでこのサーバーを停止してください。ディスパッチャSQLサーバー。
悪い英語についての私の謝罪。よろしく、イグナット。
注意:Windowsサービスを使用してWebサービスをホストする場合。
Webサービスが適切なログオンアカウントを使用してSQL Serverに接続していることを確認する必要があります。