質問者
別サーバの共有フォルダを仮想ディレクトリにしたい

質問
-
お世話になります。
IISを利用してWebサーバを構築しているのですが、アプリケーションサーバとデータベースサーバを分けることができるか調べています。
一部のフォルダはデータベースサーバに格納し、クライアントのブラウザからアクセスができるような仕組みを行わないといけないのですが
うまくいきません。
<実施した手順>
1.データベースサーバ上の対象フォルダを共有設定にする。
2.アプリケーションサーバのIISで仮想ディレクトリを追加。その際に、データベースサーバ上の共有フォルダを指定(\\データベースサーバ\対象フォルダ)
3.ブラウザ経由でアクセスしましたが、500.19のエラーになりアクセスできません。
4.データベースサーバ上の対象フォルダはIUSRのアクセス権を付けています。
対象フォルダはアプリケーションのWeb.configでフォルダ指定をしているのですが、相対パスで指定しているため、「\\データベースサーバ\対象フォルダ」のようにWeb.configでの指定は行えないと考え、ネットワーク経由で仮想ディレクトリを作ろうとしています。
なんらかの方法で実現できれば仮想ディレクトリを作る方法でなくてもよいのですが、方法をご存じの方がいらっしゃいましたらご教示頂きたくお願い致します。
すべての返信
-
回答でなく質問ですみませんが・・・
> アプリケーションサーバとデータベースサーバを分けることができるか調べています。
「アプリケーションサーバ」「データベースサーバ」と言われて、以下の記事の図2の Application Server と Database Server を想像したのですが、違いますよね?
How To: ASP.NET 2.0 でプロトコル トランジションと制約付き委任を使用する方法
https://msdn.microsoft.com/ja-jp/library/ms998355.aspx「アプリケーションサーバ」= Web サーバー、「データベースサーバ」=ファイルサーバーですよね?
Web アプリは何ですか? ファイルサーバーの当該共有フォルダのファイルは全て静的なファイルですか?
> 3.ブラウザ経由でアクセスしましたが、500.19のエラーになりアクセスできません。
どのようにアクセスしたのでしょう?
ファイルサーバーの当該共有フォルダが間違いなく仮想ディレクトリに設定できているのなら、ブラウザからは、
http://<hostname>/<仮想ディレクトリのエイリアス>/<ファイル名>
でアクセスできると思うのですが。
ひょっとして UNC でアクセスしていませんか?
> なんらかの方法で実現できれば仮想ディレクトリを作る方法でなくてもよいのですが、クライアントが直接共有フォルダ(仮想ディレクトリ)のファイルにアクセスするのではなく、まず ASP.NET などの Web アプリにアクセスして、Web アプリが共有フォルダのファイルを取得してクライアントに提供するという方法もあると思います。
- 編集済み SurferOnWww 2016年7月21日 7:20 誤記訂正
-
SurferOnWwwさん、返信いただきありがとうございます。
すみません、データベースサーバとファイルサーバを兼ねている環境ですが、今回はファイルサーバの方の質問でした。
(データベースサーバの機能はうまく分けることができています)
Webアプリは.NET Framework(ASP.NET)を使ったアプリです。
ファイルサーバの当該共有フォルダのファイルはすべて静的なファイルです。
最初は、Web.configの指定を(\\(ファイルサーバ)\(共有フォルダ))に変える方法を考えていたのですが、相対パスで指定されており、ファイルサーバ上の共有フォルダを指定することができませんでした。
アクセス方法は、ブラウザから
http://(アプリケーションサーバ)/(仮想ディレクトリ)/(ファイル名)です。
IISやOSレベルの設定変更で実現させることができるかを調べているのですが、なかなかうまくいきません。
-
IIS が返すエラーメッセージで HResult code は分かりますか? 以下の記事の中に該当するものはありませんか?
"HTTP Error 500.19" error when you open an IIS 7.0 Webpage
https://support.microsoft.com/en-us/kb/942055#/ja-jp/kb/942055 -
DBサーバのUNCの共有の、アクセス権の設定はどうなっていますか?
そして、UNCパスを仮想ディレクトリに設定するときに、どのように認証するように設定していますか?
ちなみに、それぞれのサーバはAD環境にいるでしょうか?あるいはそういう環境ではないでしょうか?
UNCパスにアクセスするには、DBサーバ(ファイルサーバ)の共有にアクセス権があるアカウントである必要があります。AD環境ならWebサーバのコンピュータアカウントに権限を与えるか、何らかのドメインアカウントにアクセス権を与える感じになると思います。
AD環境ではない場合は、DBサーバ側のアカウントでアクセスすることになりますので、アカウントの設定で、DBサーバの共有にアクセスするための、DBサーバ側のアカウントを指定する必要があります。
また、共有にIUSERのアクセス権を与えているとありますが、これはAD環境での話でしょうか?
DBサーバのローカルのIUSERアカウントにアクセス権限を与えても、意味はありません。 -
> 「Method 1」に記載されている適切なアクセス権が具体的に何をつけたらよいか分からずに
> 色々調べて試しております。Method 1 で質問者さんの問題が解決できるかどうかは分かりませんが、何を言っているかを書いておきます。試してみてダメならまた連絡ください。
始めの文 "Do not configure the Web site to use UNC Passthrough authentication to access the remote UNC share." は以下の記事の画像のように[アプリケーション ユーザー (パススルー認証)(A)]を選んではダメと言ってます。
パススルー認証
http://surferonwww.info/BlogEngine/post/2015/09/13/pass-through-authentication.aspx後の方の文 "Instead, specify a user account that has the appropriate permissions to access the remote UNC share." は、上の記事の画像で[特定のユーザー(U):]を選んで、[設定(T)...]ボタンをクリックし、そこで UNC パスに適切なアクセス権を持つユーザーアカウントを設定するように言ってます。
UNC パスに適切なアクセス権を持つユーザーアカウントというのは質問者さんの方で分かりますよね?(質問者さんの状況・環境を知らない回答者には分かりかねます)
-
なちゃさん
ご回答いただきありがとうございます。
DBサーバのUNCの共有のアクセス権は、DBサーバのAdministrator、IIS_USRS、IUSRの読み取りと書き込み権限があります。
(IIS_USRS、IUSRのアクセス権がついているのは、元々APサーバ環境だったものを使用しておりアクセス権が残っている状態です)
それぞれの環境はAD環境にはいない、WorkGroup環境です。
IISの設定をDBサーバ側のアカウントでアクセスするように設定したところ、UNCパス配下のファイルへのアクセスに成功しました。
ただ、そのフォルダにASP.NETを使用したWebアプリ経由でファイルのアップロードを行おうとしたところ、アップロードでエラーになりました。
アップロードに必要なアクセス権がないのが原因と思いますので、アップロードのアクセス権を見直したいと思います。
ご教示いただきましてありがとうございました。
-
SuferOnWwwさん
ご回答いただきありがとうございます。
Method 1の件、ありがとうございました。
「アプリケーションユーザー(パススルー認証)」を選んでいたので、特定のユーザでUNCパスにアクセス権があるユーザを指定したところ、UNCパス配下のファイルへのアクセスに成功しました。
しかし、そのフォルダにASP.NETを使用したWebアプリ経由でファイルのアップロードを行おうとしたところ、エラーになりました。
アップロードに必要なアクセス権(恐らくIUSR)がないのが原因と思いますので、アップロードのアクセス権を見直したいと思います。
ご教示いただきましてありがとうございました。
-
> しかし、そのフォルダにASP.NETを使用したWebアプリ経由でファイルのアップロードを行おうとしたところ、
> エラーになりました。ファイルアップロードも必要というのは最初の質問からは読めなかったです・・・
そういう情報は小出しにしないで(小出しにしたつもりは無かったのかもしれませんが)、最初に書いておいていただければと思います。
> アップロードに必要なアクセス権(恐らくIUSR)がないのが原因と思いますので、アップロードのアクセス権
> を見直したいと思います。IUSR は関係ありません。
FileUpload.SaveAs メソッドとかでファイルを共有フォルダに書き込んでいると想像していますが、その場合
(1) Web アプリをホストしている IIS のワーカープロセス(=ファイルを書き込もうとしているプロセス)が共有フォルダに対する書き込み権限を持っている、または
(2) ワーカープロセスが、共有フォルダに対する書き込み権限を持っているアカウントを偽装する
・・・必要があります。
WorkGroup 環境ということなので、(1) は多分ダメで、選択肢は (2) になると思います。
共有フォルダに対する書き込み権限を持っている特定のアカウントを偽装して試してみてください。偽装についての詳細は以下の記事を読んでください。
ASP.NET の偽装
https://msdn.microsoft.com/ja-jp/library/xh507fc5(VS.80).aspxHow To: ASP.NET 2.0 で偽装と委任を使用する方法
https://msdn.microsoft.com/ja-jp/library/ms998351.aspx