C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: ASP.NETで他マシンのファイルにアクセスする方法


(過去ログ 11 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■2531 / inTopicNo.1)  ASP.NETで他マシンのファイルにアクセスする方法
  
□投稿者/ ケンジ (1回)-(2007/04/11(Wed) 17:06:14)

分類:[C# (ASP.NET)] 

ASP.NETで他のマシンのファイルを読み込むプログラムを作成して実装したのですが、
アクセスに失敗してしまいます。

Machine.configの<processModel>タグの属性にuserNameとpasswordは、設定しています。
OSがWindowsXPのマシンでプログラムを実装してWindowsServer2003のマシンにあるファイルの読み込みを行った場合は正常に動作するのですが、OSがWindowsServer2003同士だと失敗してしまいます。

何か解決方法が思いつく方は教えてください。

よろしくお願いします。
引用返信 編集キー/
■2534 / inTopicNo.2)  Re[1]: ASP.NETで他マシンのファイルにアクセスする方法
□投稿者/ 中博俊 (1017回)-(2007/04/11(Wed) 20:50:07)
中博俊 さんの Web サイト
ソースコードと、その失敗するときの例外の情報(スタックも含めて)、変数の値を教えてください。

ネットワークドライブとか言わないよね?
引用返信 編集キー/
■2551 / inTopicNo.3)  Re[2]: ASP.NETで他マシンのファイルにアクセスする方法
□投稿者/ ケンジ (2回)-(2007/04/12(Thu) 09:47:42)
No2534 (中博俊 さん) に返信
> ソースコードと、その失敗するときの例外の情報(スタックも含めて)、変数の値を教えてください。
>
> ネットワークドライブとか言わないよね?

1.変数の内容
argStrPath = "\\\\Server-x\\sanjo\\environment\\ServerEnvironment.Xml";

2.ソースコード
XmlTextReader readXmlFile = new XmlTextReader(argStrPath);
readXmlFile.Read(); ← ここで落ちます。

3.例外の情報
System.IO.IOException: ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。

昨日も書いたのですが、OSがXPの場合はこのソースで問題なく処理が行われるのですがOSによってユーザー名とパスワードの指定方法もしくは指定する情報が異なるのでしょうか?




引用返信 編集キー/
■2567 / inTopicNo.4)  Re[3]: ASP.NETで他マシンのファイルにアクセスする方法
□投稿者/ 黒龍 (71回)-(2007/04/12(Thu) 12:26:30)
黒龍 さんの Web サイト
> 3.例外の情報
> System.IO.IOException: ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。
>
認証が必要ですね。
WNetAddConnection3などのAPIをP/Invokeで事前に呼び出す必要があります。

> 昨日も書いたのですが、OSがXPの場合はこのソースで問題なく処理が行われるのですがOSによってユーザー名とパスワードの指定方法もしくは指定する情報が異なるのでしょうか?
>
同一名&同一パスワードのユーザが存在する or 事前にエクスプローラなどの接続で認証が通っているなどではありませんか?
引用返信 編集キー/
■2575 / inTopicNo.5)  Re[4]: ASP.NETで他マシンのファイルにアクセスする方法
□投稿者/ ケンジ (3回)-(2007/04/12(Thu) 13:13:58)
Web.configに以下のタグを追加することで解決できました。
<identity impersonate="true" userName="%COMPUTERNAME%\USER" password="xxxxxx" />

ご迷惑おかけしました。

ありがとうございました。
解決済み
引用返信 編集キー/
■2581 / inTopicNo.6)  Re[4]: ASP.NETで他マシンのファイルにアクセスする方法
□投稿者/ 渋木宏明(ひどり) (165回)-(2007/04/12(Thu) 13:47:53)
渋木宏明(ひどり) さんの Web サイト
> 認証が必要ですね。
> WNetAddConnection3などのAPIをP/Invokeで事前に呼び出す必要があります。

ASP.NET の場合、それはあまりよい方法ではありません。

WNetAddConnectionX() を単純に実行すると、API 呼び出しを行ったプロセス全体が共有資源へのアクセス権を持ってしまいます。

IIS の設定によっては、複数の ASP.NET アプリケーションが同一プロセスで実行されるため、共有資源にアクセスする必要のない ASP.NET アプリケーションまでもがアクセス権を持ってしまうため、セキュリティ的によろしくありません。

なので、ASP.NET の場合は web.config での設定によるアカウントの偽装が好ましい解決方法と思います。

偽装を使う場合は、要件や運用に応じて

・ASP.NET アプリケーションに接続してきたユーザのアカウントを偽装
・共有資源にアクセスすためだけに作成した専用のユーザアカウントを偽装

のどちらかを選択することになります。

引用返信 編集キー/
■2585 / inTopicNo.7)  Re[5]: ASP.NETで他マシンのファイルにアクセスする方法
□投稿者/ 黒龍 (72回)-(2007/04/12(Thu) 14:39:07)
黒龍 さんの Web サイト
No2581 (渋木宏明(ひどり) さん) に返信
>>認証が必要ですね。
>>WNetAddConnection3などのAPIをP/Invokeで事前に呼び出す必要があります。
>
> ASP.NET の場合、それはあまりよい方法ではありません。
>
> WNetAddConnectionX() を単純に実行すると、API 呼び出しを行ったプロセス全体が共有資源へのアクセス権を持ってしまいます。
>
> IIS の設定によっては、複数の ASP.NET アプリケーションが同一プロセスで実行されるため、共有資源にアクセスする必要のない ASP.NET アプリケーションまでもがアクセス権を持ってしまうため、セキュリティ的によろしくありません。
>
> なので、ASP.NET の場合は web.config での設定によるアカウントの偽装が好ましい解決方法と思います。
>
> 偽装を使う場合は、要件や運用に応じて
>
> ・ASP.NET アプリケーションに接続してきたユーザのアカウントを偽装
> ・共有資源にアクセスすためだけに作成した専用のユーザアカウントを偽装
>
> のどちらかを選択することになります。
>
お恥ずかしい。WNetAddConnectionXでASP.NET用の権限で認証するのがいいかなと思っていました・・・。
確かにweb.configで偽装すればスレッド単位になりそうですね。勉強になりました。

引用返信 編集キー/
■2601 / inTopicNo.8)  Re[6]: ASP.NETで他マシンのファイルにアクセスする方法
□投稿者/ 渋木宏明(ひどり) (167回)-(2007/04/12(Thu) 16:02:32)
渋木宏明(ひどり) さんの Web サイト
> お恥ずかしい。WNetAddConnectionXでASP.NET用の権限で認証するのがいいかなと思っていました・・・。

僕も、.NET 1.0 のリリース当初に数回そう回答してしまったことがあります。
でも、よくよく考えてみると危ないので、ASP.NET であることが明確な場合は偽装を進めることにしました。

> 確かにweb.configで偽装すればスレッド単位になりそうですね。勉強になりました。

ある瞬間で見ればそうですが。。。

ASP.NET の内部動作(のしかも詳細)なので実際のところどうなのかは不明ですが、ASP.NET が(と言うよりは .NET ランタイムが)、同一プロセスにホストされた複数の ASP.NET 間でスレッドを使いまわしていることは大いに考えられます。

非常に簡易化して言うと ASP.NET はおそらく

・IIS からリクエストを受けたらスレッドプールから暇そうなスレッドを見繕ってくる
・スレッドに必要な権限(を表すトークン)を与えて、リクエストの処理を委任する
・スレッドはページを処理したら、もらったものをすべて廃棄してスレッドプールに帰る

というようなことを延々と繰り返しているはずです。

スレッドと権限(この場合は evidence かな?)の結びつきは一時的なもの(のはず)なので、「web.config の影響範囲(および対象)は「ASP.NET アプリケーション」である」と考えた方がいいんじゃないかと思います。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -