ASP,VBSでAccessデータベース操作 テキストファイルへの書き込み、エラー回避方法

ASPによりテキストファイルへデータを書き込む。
書き込みできないエラー
Microsoft VBScript 実行時エラー
(0x800A0046)が出て困ったが、IISが匿名アクセスしている
アカウント:IUSR_****の権限を変えることにより動作した。

ASPでテキストファイルにデータを書き込む。

CreateObject("Scripting.FileSystemObject")で下記書き込みプログラムを作成したが、書き込みできないエラーMicrosoft VBScript 実行時エラー (0x800A0046)が発生した。

<%
Dim objFS, objTS
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.CreateTextFile(Server.MapPath("test3.txt"),true)
objTS.Write("かきくけこ")
objTS.Close
%>

プログラムの説明は、CreateObject("Scripting.FileSystemObject")でファイル操作オブジェクトを作成して、そのオブジェクトのCreateTextFileでファイルの書き込み動作を行う。

CreateTextFileはファイルを新しく作成してデータを書き込んでくれて、trueの部分で上書きしてくれる。Falseになると上書きできなくなりエラーとなる。

Set objTS = objFS.OpenTextFile(Server.MapPath("test3.txt"),2,true)としてもよく、
2の部分を以下のようにすると、読み込み専用、書き込み専用、追記書き込みができる。

1・・・読み込み専用
2・・・書き込み専用
8・・・追記書き込み

objTS.Writeの部分で全てのデータを書き込んでいるが、objTS.WriteLineとすると1行書き込むことができる。
後で、文字列抽出して1行づつ書き込んでいく時に使うので後述する。


さて、ここからが本題だが、vbsプログラムとして動作はするのだが、aspプログラムで動かすと、書き込みできないエラーMicrosoft VBScript 実行時エラー (0x800A0046)が発生する。

だが、IISが匿名アクセスしているアカウント、ユーザ名:IUSR_*****、パスワード:*****の権限にAdministrator権限を追加することによりエラーを回避することができた。
とりあえず、自サーバーを公開しないでテスト用としてなら使えそうだ。

まずは、IISの設定だが、設定は変更しない。ただ、設定状況を見たいので、追加したエイリアス(例:既定のWebサイトの下にsampleを作成して、ドキュメントルートを設定した場所)を右クリックして、プロパティを選択するとか仮想ディレクトリやディレクトリセキュリティのタグがある画面に行く。

ここで、仮想ディレクトリにある【書き込み】にチェックしてもエラーは回避されない。セキュリティが落ちるので、書き込みのチェックははずしておいた方が良い。

ディレクトリセキュリティのタグに行くと、匿名アクセスおよび認証コントロールの欄があって、編集ボタンがあるので押す。

そうすると、匿名アクセスにチェックが入っていて、ユーザー名:IUSR_*****、パスワード:*****、IISによるパスワード管理を許可するにチェックが入っていることが分かる。

どうやら、ASPではログオンしているユーザ権限で動作しているのではなく、匿名アカウント(IUSR_*****)権限(Guest権限)で動作しているようだ。

試しに、匿名アカウントの部分に自分のユーザーアカウント(Administrator権限)、パスワードを入れると動作した。ただ、パソコンがAdministrator、パスワードなしで設定されていると、パスワードなしは許されていない画面が表示され、テキストファイルにファイルを書き込むことができなかった。

ということで、匿名アカウント(IUSR_*****)権限(Guest権限)にAdministrator権限を追加することとした。
(ドメインを組んでいれば、書き込み権限とか設定できるようだが、組んでいないので上記処置とした。公開するには危ないので、ローカルでのテスト用としてしか使用しないこととした。)

やり方は、【スタート】→【コントロールパネル】→【管理ツール】→【コンピュータの管理】を開く。

エクスプローラ画面が表示され、左のフレームに【ローカルユーザとグループ】があるので左クリックし、さらに【ユーザー】、【グループ】フォルダがあるので、ユーザーフォルダをクリックして開く。

右のフレームに、アカウント一覧が表示され、IUSR_*****があるのでダブルクリックする。

【所属するグループ】のタグをクリックすると、Guestsが書かれており、Guest権限になっているので、ここにAdministrator権限を追加する。

下に【追加】ボタンがあるので押すとグループ選択の画面となり、【詳細設定】ボタンから【今すぐ検索】ボタンを押すと、下にAdministratorがあるので選択してOKを押すと、Administrator権限が追加される。

パソコン再起動させると有効となる。

これで、テキストファイルの書き込みができるようになる。

ただ、このやり方だと、エイリアスで設定したドキュメントルートの下位フォルダ全てのファイルが書き換え可能となってしまう。

テストとして公開せずに使用するには良いと思われるが、公開するとなると危険が伴う。

ドメインを構築し、【ローカルユーザとグループ】のユーザー部分で新規ユーザーを作成して、書き込み権限を設定し、さらに、IISで書き込み専用フォルダを作成して、そのフォルダのディレクトリセキュリティのタグの部分で、認証済みアクセスの基本認証部分で、作成した新規ユーザーを選択して書き込みを行うことで、IISのドキュメントルートはGuestユーザーで読み込み専用で、書き込み専用フォルダのみ書き込み可能という方法が他のホームページや本で書かれていたのだが、私はまだこれが正しいとはまだ判断できないレベルである。

とりあえず、テスト用としては使用できるのではないか。

間違っていたら教えてください。



実践!ASPでAccess操作