ASP.Net が共有フォルダーを認識できない
-
21-08-2019 - |
質問
これまでに使用したことのないネットワークで新しいアプリケーションを作成しましたが、問題が発生しました。
次の C# コードがあるとします。
FileStream fs = File.Create(@"\\MyServer\MyShare\testing.txt");
fs.Close();
コンソール アプリケーションでは、このコードは正しく実行されます。
ASP.Net アプリケーションで、次のエラーが発生します。 ログオン失敗:不明なユーザー名または間違ったパスワード。
ASP.Net アプリケーションで、identity impersonate="true" を追加すると、次のエラーが発生します。 パス「\MyServer\MyShare esting.txt」へのアクセスは拒否されました。
これまでそのようなログオン失敗メッセージに遭遇したことはありませんでした。これはどこから来たのですか?サーバー上にアプリケーションを作成し、物理的な場所に書き込むようにすると、正常に動作します (つまり、セキュリティは良好です)。共有に対するセキュリティが機能していないように見えます (「Everyone」が設定されているにもかかわらず)完全な書き込みまで)、またはサーバー レベルで何かが欠落しており、通常は何も表示できません。
ここで私に何が欠けているか知っている人はいますか?私は同様のことを行う他のアプリケーションを作成しましたが、この問題に遭遇したことはありません
ありがとう!
解決
アップデート:
なので、投稿するのが早すぎたような気がします...私のローカルホストで失敗した理由は、ディレクトリが匿名アクセスを許可するように設定されていたためでした (そのため、ページは偽装していませんでした)。ユーザーは '') でした。
サーバーでも同様に動作し始めました。しかし、そこでは何も変わりませんでした...アプリのダウンタイム/シャットダウン中に何かがトリガーされたかどうかはわかりませんが、すべてが期待どおりに機能しています。
コメントありがとうございます!
他のヒント
問題は、identity impersonate が false に設定されている場合、ASP.NET ワーカー プロセス アカウントが共有 (通常は NETWORK SERVICE または ASPNET アカウント) に書き込もうとしていることです。実行している Windows のバージョンによって異なります。
ユーザー名またはパスワードを指定せずに impersonate を true に設定すると、現在のユーザー認証を使用してリクエストが試行されます。
ワーカー プロセス アカウントにアクセス許可を付与する必要がありますが、これはおそらく不可能です。または、B アプリケーションが偽装できる特定のアカウントを作成し、アイデンティティ タグの web.config 内の資格情報を指定します。
デフォルトでは、ASP.NET アプリケーションは次のように実行されます。 あなたのマシン\IUSR_あなたのマシン。 共有に対するアクセス許可をEveryoneプリンシパルに公開するか(マシンが同じドメイン上にない場合は機能しない可能性があります)、共有へのアクセス権を持つユーザーとしてIISアプリケーションを実行する必要があります。
ASP.NET アプリケーションを実行するユーザーは、次の方法で変更できます。
。開ける 管理ツール -> インターネット インフォメーション サービス 次に、アプリケーションが含まれる Web サイトまたは仮想ディレクトリを右クリックし、 プロパティ. 。を選択してください ディレクトリのセキュリティ タブをクリックして 編集. 。最後に、 匿名アクセス セクションに、共有にアクセスできるユーザーのユーザー名とパスワードを入力します。
マイク