質問

ローカルコンピューターへのフォーム認証を使用して、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;身元

同じエラーが発生し、プロセスモデルを変更して修正しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top