• 締切済み

サーバー上のファイルアクセス禁止について

ASPを用いて作成したファイルを Webに公開したくないと思っているのですが やり方がわからず困っています。 いま、アンケートを集計するようなページを メモ帳で作っています。 そのアンケートの回答結果として IIS上でASPを用いてAnswer.xlsというファイルを作成しています。 ファイルの中は データ1 タブ データ2 タブ・・・・ という風になっており、直接エクセルファイルをイジっているわけではりません。 ここでURL/Answer.xlsとブラウザに入力すると、 ファイルが表示されてしまうことに困っています。 Answer.xlsはASPで動的に作成されるので なるべく、サーバー管理者的な操作で無いほうがうれしいです。 よろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.7

1つ書き忘れていたことがありました 管理ページを実行するユーザーがAdministratorsグループに属している必要があります

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

管理用のASPファイルを置いてあるフォルダーの認証方式は変更なさいましたか? 管理対象URLが http://localhost/aaa/ 対象ファイル answer.txt set oFile = GetObject("IIS://localhost/W3SVC/1/root/aaa/answer.txt") といった具合です IIS管理ツールで 管理用ASPファイルの置いてあるフォルダーのプロパティを表示 『ディレクトリセキュリティ』タブを選択 『匿名アクセスおよび認証コントロール』の『編集』をクリック 『匿名アクセス』のチェックをはずす OKをクリックして ダイアログを閉じる IISのバージョンは何ですか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

IISを再起動でもダメなら パソコンを再起動でどうでしょう Server.MapPathで取得したパスに対して AccessReadやAccessWriteを設定するのではなく GetObject("IIS://Localhost/W3SVC/1/Root/仮想フォルダ/answer.xls") で取得したオブジェクトに対して GetまたはPutを使うのだと思います wwwrootの直下にAnswer.xlsがあるなら『/仮想フォルダ部分』は不要です dim objFile Set objFile = GetObject("IIS://localhost/W3SVC/1/root/Anser.xls") if objFile.Get("AccessRead") = True then   objFile.Put "AccressRead", False   objFIle.SetInfo end if といった具合でしょう Visual Studio などをお持ちなら付属のヘルプで Web開発  インターネット インフォメーションサーバー 5.0   Active Server Pagesガイド    IISをプログラム管理する 辺りを参照してみてください

diolab
質問者

お礼

ごめんなさい。 いろいろ試しても、GetObjectで書き込めませんというエラーになってしまいます。 ファイルの削除は出来ました。 パスですが、 URL/aaa/Answer.xlsのとき IIS://localhost/W3SVC/1/root/aaa/Anser.xls でいいのでしょうか? ちょっとめげそうです。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

すみません 訂正箇所がありました objFile.Put "AccessWrite", False でした それと objFile.SetInfo を実行しないと プロパティの変更結果が反映されませんでした m(__)m

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

# Ano2の実行権限偽装はしなくても出来そうです ASPからやるとすれば IISAdminオブジェクトを使ってやることになります IISAdminオブジェクトを使う管理サイトと 管理対象のサイトは別にします 管理サイト側は 匿名アクセスを禁止します IISマネージャで管理サイトを開いて プロパティを表示させます ディレクトリセキュリティタブの『匿名アクセスおよび認証コントロール』の『編集』ボタンをクリック 匿名アクセスのチェックを外します 認証済みアクセスの『統合 Windows認証』にチェックを入れておきます # デフォルトで付いてると思います これでOK 仮想ディレクトリタブ等で ASPアプリケーションを作成します 管理サイトの管理ページを Default.aspなどで作成します dim objFile Set objFile = GetObject("IIS//Localhost/W3SVC/1/Root/仮想ディレクトリ/管理対象ファイル") if objFile.Get("AccessRead")= True then objFile.Put "AccessRead", False End If ' 同様に 書き込みアクセスは ' objFile.Put "WruteAccess", True ' といった具合で設定可能です などといったスクリプトで属性の変更が出来ます あとはこのページに HTMLコントロールなどを作って PostBackした際に上記のコードを実行するようにしてやれば良いでしょう この管理サイトを実行するには そのホストコンピュータにローカルログオンできるユーザーでアクセスする必要があります

diolab
質問者

お礼

返信ありがとうございます。 早速やってみて 困ったことになってしまいました。 Dim anserPath anserPath = Server.MapPath( "./Anser.xls" ) Set objFile = GetObject( anserPath ) If objFile.Get("AccessRead")=True Then objFile.put "AccessRead", False objFile.SetInfo End If objFile.close このようにやってみたところ、 ブラウザ?がフリーズしてしまいました。 結果、Anser.xlsがロック状態になってしまい、 削除もステータス変更も出来なくなってしまいました。 どうすればいいか分かりますでしょうか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

それでしたらそのサイト内の特定のフォルダにアクセス権を設定してそのフォルダーに データファイルを集めるようにしてみてはいかがでしょう ASPからアクセス権を設定することは可能ですが実行権限を偽装しないといけないのスクリプトから実行するのは結構大変です

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

IISマネージャから制御したほうが簡単ですよ IISマネージャでそのURLのフォルダを開きます 次に Answer.xlsファイルを選択して 操作 > プロパティを実行します ここの『読み取り(R)』のチェックを外し 『書き込み(W)』のチェックをつけて OKでプロパティを閉じます NTFSのアクセス権を適切に設定すればOKでしょう IUSER_コンピュータ名のユーザーに対して 変更を許可します 匿名アクセスが有効ならASPが実行されるのは このIUSER_コンピュータ名 と言うユーザー名になります この設定でブラウザで URL/Answer.xlsにアクセスしても拒否されますよ

diolab
質問者

お礼

返信ありがとうございます。 ファイルまたはフォルダに対してアクセス権限の変更による アクセス操作という風に理解しました。 実は、Answer.xlsのようなファイルはひとつではなく、 動的に生成されているので、一つ一つにアクセス権を指定するのは 現実的ではなく、頭を悩ませております。 >なるべく、サーバー管理者的な操作で無いほうがうれしいです。 というのがそういうことを意図していたのですが 読み返してみるとわからなくて当たり前ですね。 すみませんでした。 アクセス権についての手法についての知識に乏しく、 こういった質問になってしまいました。 具体的に質問しなおすと ファイルORフォルダのアクセス権をASPから変更する方法? ということになるかもしれません。 おじかんありましたらお力添え お願いいたします。

関連するQ&A

  • 複数のエクセルファイルの集計

    VBAを使って複数のエクセルファイルをあるひとつのファイルにコピーをするにはどうすればよいのですか? アンケート集計をしてます。同じフォルダー(C:\Test)にある回収した1000件分のアンケートを全てData.xlsに集計したいと思っております。具体的にはアンケート表の「1アンケート.xls」のセルS84:S94,S102:S115,S123:S131,S139:S154を]集計表.xls]のA1:AX1に行列を入れ替えて値貼り付けし、「2ンケート.xls」も同じセル番号を、「集計表.xls」のA2:AX2に、・・・・・・(繰り返し)・・・・・「1000アンケート.xls」を「、「集計表.xls」のA1000:AX1000という具合に集計したいと考えております。 似たような質問もあり、自分なりに調べてカスタマイズしてみましたが、VBAを全くやったことない私にはどうしても出来ません。どなたかご教授していただけると幸いです。

  • サーバ内ファイルの読み取り

    ASPでデータベース更新HPを作成しているのですが、ASPを用いてWeb共有をとってないフォルダ(IIS配下にないフォルダ)のファイルを確認することはできないでしょうか? アクセスしたいのは画像ファイルで、必要なのはファイル名の一覧です。 環境はWin2000サーバ,IIS5.0です。 どなたかご存知の方がいらっしゃったら、教えていただけたらと思います。よろしくお願いします。

  • ASPでファイルアクセス失敗

    ASPでファイルシステムオブジェクトを作成して、 相対パスでホームディレクトリ内のテキストファイルにアクセス しようしてるのですが、ファイルの読み込みができません。 なにかIIS側に設定などがあるのでしょうか? とりあえずアクセス許可関係は全部許可してます。 状態としてはファイル読み込みの処理あたりで停止? しているようで、ブラウザのステータスバーの処理状況ゲージ?が 中間ぐらいでとまってます。 パスの取得、パスからファイルシステムオブジェクトの作成までは うまくいっている模様です。 ファイルの存在チェックはできました。 よろしくお願いします。

  • IIS+ASPで実行可能なサーバと不可能なサーバがある

    現在、IISとASPを使用してアプリケーションを動かしています。 データベースにMDBファイルを使用し、データの 登録・参照・削除をASPで行っています。 都合によりIISサーバを違うPCに移し変えることになりました。 ファイルをコピーして、IISの設定を同じにしましたが、 クライアントからデータの書き込みをすると「ページを表示できません」 と出てしまいます。エラーの理由としてデータの追加を行っている ASPファイルの「(レコードセット).AddNew」の行で 「データベースまたはオブジェクトは読み取り専用なので、更新できません」 ということなのですが、今までのサーバでは動いていたファイルを そのままネットワーク経由でコピーしただけなので 修正方法がわかりませんでした。 IISの設定はあまり詳しくないので、不足している情報が あれば追記いたします。 OSは新PC・旧PCともにWindowsXP Pro(SP1)です。 ご指導よろしくお願いいたします。

  • HTTPでファイルをアップロード

    ASPとHTMLで、ブラウザからファイルを選択してアップロードするページを作成しているのですが、以下の条件を満たすページは作成可能でしょうか。 【FTPではなく、HTTPでファイルを転送する】 【CGIは使わない】 ※サーバーはIISです。 いろいろと試行錯誤しながら試してみたのですが、うまくいきません。 何かご存知の方いらっしゃいましたら、教えてください。

  • ACCESSのファイルを一本化したい!

    各支店でアンケート集計をしてもらい、入力データが.mdb or .accdbで送られてきます。 それを VBAで”1ファイル”にまとめたいのですが、お知恵をお貸しください。 送られてくる元ファイルの構造は1ファイル1テーブル(table名 table_01)、テーブルの構造は統一されてます。 アンケート日ごとにファイルをフォルダーにまとめてあります。 ex. C:\Users\AD\20111101\001.mdb C:\Users\AD\20111101\002.mdb ・     ・ C:\Users\AD\20111102\001.mdb C:\Users\AD\20111102\002.mdb ・     ・ 各フォルダー内ごとに、まとめたファイルを作成したいのです。 (毎日 100fileほどたまります。どうしても自動化したくて・・・) よろしくお願いします。

  • VBAでたくさんのファイルを一つにまとめる

    いつもお世話になっています。VBAでファイルを順番に起動、処理を行いたいと思っています。 集計001.xls~集計100.xlsというファイルがあります。1ファイルにそれぞれの支店と数値があって、それを総合.xlsファイルに支店シートを作って貼り付けます。 つまり、集計001.xlsには 東京 大阪 福岡 100 100  100 200 300  500 100 400  600 400 500  100 とあり他ファイルも同じように入っています。(数値は適当です) それを総合.xlsでは東京シートに 集計001 集計002 集計003 100   400   500  200   300   400 100   400   300 400   200   400 と各支店にシートを貼付します。他に大阪シートや福岡シートもできます。 今、「総合.xlsの各支店シート作成」と「集計001.xlsの支店数値→総合ファイル支店シート貼付」はできています。即興で作ったのでかなりいい加減ですが。 問題は「数あるファイルを順番に開いては閉じること」と「ファイル名を取得して各列の1行目にその名前を代入」です。 総合.xlsは常に起動していますが、集計ファイルは途中なかったりします。 そのために、いちいち手動で集計ファイルを起動して、コピペマクロを動かし、手動で集計ファイルを閉じています。 かなりわかりにくい説明だとは思いますが(やっている私もたまに勘違いしています)、ファイルを順番に動かすいい方法ってないでしょうか?できれば001 → 100の順番でいきたいんです。手動だとある時順番を間違えそうだし、ファイル名を1行目に入力するのも面倒なので。 すごくわかりにくいですよね。どうやったら文字列のファイル名をカウントする感じで動かしていくのかわからなくて・・・。どうかお知恵を貸してください。よろしくお願いします。

  • VBA マクロ付きExcelファイルを無効で開く

    タイトルの通り、マクロを含むExcelファイルを、マクロ無効でオープンしたいのですが、そういうことは出来るでしょうか? 新規ファイル作成.xlsというマクロがあって、temp.xlsというマクロを含んだファイルをnew.xlsというファイル名でコピーし、それをオープンしてデータを追加して終了。 次にそのnew.xlsをオープンした時にはtemp.xlsに含まれるマクロが実行される・・・ というようなことをしたいと思っています。 もしくは新規ファイル作成.xlsのマクロから、直接new.xlsのファイルにコーディングが可能であれば、それでも良いのですが・・・ データベースから表を作成し、作成後の変更データを再度データベースへ戻す、ということがやりたいのですが、上記の方法しか思いつきません。 もし上記の方法が出来ない場合は、別の方法がありますでしょうか? どなたかアドバイス、よろしくお願いします。

  • Windows2000ServerでASPファイルが公開できません

    Windows2000Serverから、2003Serverにアップグレードしました。 IISでサイトを公開(Webで共有)しています。 Webで共有したフォルダー名&エイリアス名:ABC で、このフォルダーに index.htmlとindex.asp があります。 プロパティ→ドキュメント で、index.htmlを一番上に指定した場合、何も問題なくブラウザから見られますが、 index.aspを一番上に指定した場合、IEで開くと「ページが見つかりません」 と表示されます。 また、http://www.***.jp/abc/index.asp としてIEから開こうとしても、、「ページが見つかりません」と表示されます。 どなたかご存知の方おられましたら、ご教授の程、よろしくお願いします。

  • 【2003】VBA 別ファイル特定シートへのコピペ

    下に書いてあるようなことをしたいのですが、勉強するのも初めてで 現段階の自分の知識ではどうにもなりません。 一応、自力でできたのはフォルダ内の.xlsファイルがなくなるまですべて開くというとこだけでしょうか・・・ お手数かけますが、ご教授お願いします。 参照するシートやファイルは既に存在しているものとします。 <固定値> C:\blue\red\ 'ここをカレントディレクトリと呼ぶ C:\yellow         '集計ファイルはこのディレクトリに置いてある' C:\yellow\集計_2011.xls <ファイル配置> カレントディレクトリ配下にはデータファイルがn個入っている。 1_data.xls 2_data.xls 3_data.xls ・ ・ <数字>_data.xls ◆マクロの動作内容 (1)C:\yellow\集計_2011.xlsが開かれていない場合はファイルを開き 既に開いている場合は(2)へ進む。 (2)カレントディレクトリ配下の*_data.xlsファイルを開く (3)開いたファイルのシート名「Second」を開き、セルC5を参照する (4)下記の通り分岐する((3)の結果) C5=one ならば yellow\集計_2011.xlsのシート名「English」を選択 C5=eins ならば yellow\集計_2011.xlsのシート名「German」を選択 C5=un ならば yellow\集計_2011.xlsのシート名「French」を選択 (5)dataファイルのA6を起点とし、下記の範囲をコピーする 行:A6~(上から数えて最後に空白でないセルA*) 列:A列からZ列まで →A6:Z*の範囲をコピー(これを#とする) (6) #をyellow\集計_2011.xlsに追記形式でコピペする →(4)で選択したシートに貼り付ける →貼り付けるセルは、B10を上から数えて最初に空白のセルを起点として、#を貼り付ける (7)開いていたdataファイルを閉じる (8) カレントディレクトリのdataファイルがすべてに(2)から(7)を繰り返す

専門家に質問してみよう