ユーザーのデフォルトのデータベースを開けません
-
08-07-2019 - |
質問
ローカルコンピューターへのフォーム認証を使用して、ASPサイトのサーバーから ASPNETDB.MDF
ファイルを取得しました。 ASP.NET Webサイト構成ツールを使用して、データベースファイルに新しいユーザーを追加しました。 MDFファイルをサーバーにアップロードし直したところ、任意のユーザーとしてログインしようとすると次の例外が発生します。
ユーザーのデフォルトのデータベースを開けません。ログインに失敗しました。
ユーザー 'NT AUTHORITY \ NETWORK SERVICE'のログインに失敗しました
私もグーグルでこの問題に対する他のすべての解決策をSOで読みましたが、動作するものは見つかりませんでした。
サーバーにはSQL Server 2008が搭載されており、VS 2008 Professionalを使用してローカルマシンで使用しています。
接続文字列は次のとおりです(読みやすくするために改行が追加されています):
<add name="ASPNETDBConnectionString1"
connectionString="Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient"
/>
私はSQL Serverを初めて使用するので、どこかで何かを台無しにしたと確信しています。
ご協力ありがとうございます。
解決
構成についてのだれが、何を、またはなぜかについてのすべての質問はさておき...
接続文字列から問題を推測できます。これは、SQL Expressに対してローカルで機能しますが、サーバー上の適切なSQLに対しては機能しません。
最初の手がかりは、SqlExpressのみがユーザーインスタンスを有効にすることです。適切なSQLでは、mdfを添付する必要があります。
VS 2008でマシン上でその接続文字列が機能する場合、SQL EXPRESSがインストールされています。その接続文字列がサーバー上で機能する場合、サーバーにはSQL EXPRESSがインストールされています。
サーバーにSql Expressがインストールされておらず、ユーザーインスタンスを許可するように構成されていない場合、そうしないと、その接続文字列が発生するログイン失敗例外が発生します。
私もあなたとあなたのコピーについて疑問に思います。通常、コピーの場合でも、アクティブなmdfによるアクセスは拒否されます。
クライアント側とサーバー側の両方のSqlバージョンを確認し、接続文字列を比較するために両方のweb.configファイルの以前のコピーを見つけてください。
他のヒント
あなたの問題は、データベースログインとデータベースユーザーの違いを追跡していないことだと思います。ログインはSQL Serverへのアクセスを提供します(一般に)。データベースユーザーは、特定のデータベースへのアクセスが許可されたログインです。行ったようにファイルを前後にコピーすると、ログインアカウント(特にWindowsアカウント)の基になる識別子を無効にできます。
SQLアカウントを使用して(Windowsアカウントではなく)SQLサーバーにログインし、資格情報をweb.configファイルに配置することをお勧めします。これは、Windowsアカウントのログインよりも設定、使用、および変更がはるかに簡単であることがわかりました。ログインが設定されたら、使用したいサーバー上のデータベースへのユーザーアクセス権も持っていることを確認してください。転送の問題が発生する可能性はありますが( )、可能性は低くなりますが、修正はかなり簡単です。
重要な注意:他の人は同意しません-Windowsアカウントはより安全であると主張するので、この問題について自分自身を教育したいと思うかもしれません!
問題の説明が不完全であるか、エラーと一致していません。より良い回答を得るには、もう少し情報を提供する必要がありますが、ここでは予備的な回答を示します。
このエラーは、アプリケーションがSQLへの統合認証を使用していることを示しています。したがって、接続文字列を確認すると役立ちます。どこかに「SSPI」と表示されている可能性があります。これが意味するのは、アプリコンテナーが(NETWORK SERVICE)として実行されているユーザーがデータベースに接続しようとしているが、そうする権限がないために接続できないことです。
そのため、あなたがやったことの一部として接続文字列を変更したか、以前はNETWORK SERVICEがデータベースユーザーでした(いい考えではないようです)。
web.configには、その他のセキュリティ関連の設定が可能です。アプリはフォーム認証を使用しているようです。 IISが匿名アクセスを許可するように設定されており、web.configが偽装を行うように設定されている場合、ネットワークサービスがSQLに接続しようとする可能性もあります。
アプリケーションはどのように接続することになっていますか?フォーム認証で認証するすべてのユーザーがデータベース操作のために通過する必要があるサービスアカウント(単一のユーザーアカウント)がありますか?その場合、データベース接続文字列を変更して、ユーザーとパスワードを含める必要があります。
これを修正するには、接続文字列、web.configのフォーム認証関連の設定、およびIISのセキュリティ設定を確認する必要があります。これは、ユーザーを追加したという事実とは関係ないと思います。
編集: 私が疑ったように、あなたは統合セキュリティを使用しています。ユーザーがユーザーIDを使用してアプリに対して認証している間、アプリは統合された認証、つまりNETWORK SERVICEを使用してデータベースに対して認証するため、Forms Authでは機能しません。データベースサービスアカウントimoが必要です。接続文字列を変更しなかった場合、これがどのように機能するかはわかりません。
これを変更してみてください アプリケーションプール-&gt;詳細設定-&gt;プロセスモデル-&gt;身元
同じエラーが発生し、プロセスモデルを変更して修正しました。