- PR -

ASP.NET で他のPCの共有ファイルにアクセスしたい

1
投稿者投稿内容
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2002-09-28 15:02
はじめまして。
ひでたつ と申します。

イントラネットで ASP.NET が稼働しているPCから、他のPCの共有ファイルを読み込みたいのですが、ファイルをオープンしようとすると下記のような例外が発生します。
"パス "\\コンピュータ名\temp\foo.txt" へのアクセスが拒否されました。"
ちなみに、共有フォルダをネットワークドライブとして割り当ててから実行すると、
"パス "Z:\foo.txt" の一部が見つかりませんでした。"
となります。

エクスプローラからは共有ファイルへのアクセスはできています。
共有ファイルがあるPCの[インターネットのプロパティ]で、ASP.NET 側のサイトを信頼済みサイトにしてみたりと色々と設定してみましたが解決できずに困っています。

machine.config の <processModel> で userName="SYSTEM" としています。

解決策をご存じの方がいらっしゃいましたら、よろしくお願いします。m(_ _)m

使用環境:
Windows XP SP1
.NET Framework v1.0.3705
C#
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-09-30 08:36
はじめまして。

引用:

ひでたつさんの書き込み (2002-09-28 15:02) より:
イントラネットで ASP.NET が稼働しているPCから、他のPCの共有ファイルを読み込みたいのですが、ファイルをオープンしようとすると下記のような例外が発生します。
"パス "\コンピュータ名tempfoo.txt" へのアクセスが拒否されました。"
ちなみに、共有フォルダをネットワークドライブとして割り当ててから実行すると、
"パス "Z:foo.txt" の一部が見つかりませんでした。"
となります。



<追記>
>>machine.config の <processModel> で userName="SYSTEM" としています。
 ログインしているユーザと、接続しようとしているユーザが違うからではないでしょうか。
</追記>

 WNetAddConnection2(Plattform SDK)を、ユーザ"SYSTEM"で呼び出してみてください。私の方では、これでいけてます。
Windows2000Svr.→Solaris2.5.1+Samba

[ メッセージ編集済み 編集者: Jitta 編集日時 2002-09-30 08:38 ]
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2002-09-30 11:39
Jitta 様
こんにちは。

引用:

<追記>
>>machine.config の <processModel> で userName="SYSTEM" としています。
 ログインしているユーザと、接続しようとしているユーザが違うからではないでしょうか。
</追記>



この一言がヒントになりました。
今まで UserName には "machine" か "SYSTEM" しか記述できないと思い込んでいました。
ここにログインしているユーザ名とパスワードを設定すると、共有ファイルにアクセス出来るようになりました。お恥ずかしい…

引用:

 WNetAddConnection2(Plattform SDK)を、ユーザ"SYSTEM"で呼び出してみてください。私の方では、これでいけてます。
Windows2000Svr.→Solaris2.5.1+Samba



こちらの方は VC++ で作成したプログラムで、ネットワークドライブとして割り当てる事が出来ました。
ひとつ気になるのは、エクスプローラではファイルにアクセスできるのに、ASP.NET からアクセスしようとすると、"パス "Z:foo.txt" の一部が見つかりませんでした。" の例外が発生する事です。(手動で割り当てても同じでした。)

今回は UNC 形式でファイルを指定していきます。
どうも、ありがとうございました。m(_ _)m

[ メッセージ編集済み 編集者: ひでたつ 編集日時 2002-09-30 11:42 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-09-30 14:47
こんにちは。

引用:

ひでたつさんの書き込み (2002-09-30 11:39) より:
ひとつ気になるのは、エクスプローラではファイルにアクセスできるのに、ASP.NET からアクセスしようとすると、"パス "Z:foo.txt" の一部が見つかりませんでした。" の例外が発生する事です。(手動で割り当てても同じでした。)


 おそらく、この記事がヒントになるのではないでしょうか。このスレッドでは、
>>Shell.Application オブジェクトを作ると、何が可能になるか調べましたか?
>>例えば任意のフォルダやファイルを列挙することができます。
>>そんな情報を、インターネットで Web ページを見ている最中に、勝手に収集されて、
>>勝手にどこ かへ送信されても良いですか? (あなたは、それを望みますか?)
とありますが、反対に、共有しているディレクトリに勝手に何かを書き加えられたらどうでしょう?あなたの共有ディレクトリに勝手に書き込まれることを望みますか?「読みたいだけなのに」と思っても、システムにとってはその気持ちはわかりません。そのため、デフォルトではすべてシャットアウトします。
 設定を変えれば、特定のアセンブリに特定のファイルに特定の方法でアクセすることを許可できます。
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2002-09-30 16:21
Jitta 様
こんにちは。

大変参考になりました。
どうも、ありがとうございました。m(_ _)m
会議室デビュー日: 2002/09/28
投稿数: 9
投稿日時: 2002-09-30 17:03
はじめまして。

ファイルアクセスができないのが、
コードベースセキュリティの制限というのが
釈然としなかったので、わたしの考えを書かせていただきます。


まず、前提として
remotemachine = 共有ディレクトリを提供しているコンピュータ
localmachine = ASP.NET が動作しているコンピュータ
と、します。

ここで、localmachine 上で動作している CLR が
保護しなければならない対象は localmachine 自体であって
remotemachine のリソースへの読み書きを制限し、
保護する理由はありません。

remotemachine に存在するプログラムの実行が制限されるのは
そのプログラムが localmachine への危険となる可能性があるからです。


仮に CLR が remotemachine のリソースを保護しているならば
CLR を通さない、win32 ネイティブアプリケーションは
好き放題できることになります。それはおかしいですよね?

remotemachine のリソースを保護する責任があるのは remotemachine 自身です。
remotemachine のセキュリティシステムが localmachine の
アクセスを拒否しているはずです。


以下、Microsoft のナレッジベースで今回の件に
該当するであろうリンクを示します。
http://support.microsoft.com/default.aspx?scid=kb;ja;JP189408
http://support.microsoft.com/default.aspx?scid=kb;ja;JP257174
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2002-09-30 17:45
鈴 様
はじめまして。

引用:

鈴さんの書き込み (2002-09-30 17:03) より:

仮に CLR が remotemachine のリソースを保護しているならば
CLR を通さない、win32 ネイティブアプリケーションは
好き放題できることになります。それはおかしいですよね?

remotemachine のリソースを保護する責任があるのは remotemachine 自身です。
remotemachine のセキュリティシステムが localmachine の
アクセスを拒否しているはずです。



そうですね。この事を頭に入れておきます。
教えて頂いたリンクの方も参考になりました。
どうも、ありがとうございました。m(_ _)m
1

スキルアップ/キャリアアップ(JOB@IT)