OK。ここでは、Windows Server 2008 R2のIIS 7.5でクラシックASP Webサイトをセットアップしようとしています。Webサイトのルートの下にdbcという名前のフォルダーがあり、すべてのページの処理中に特定の情報の読み取りと書き込みに使用されるファイルがあります。
問題は、IUSR書き込み権限、IIS_IUSRS書き込み権限、またはDefaultAppPool書き込み権限を付与すると、「パス「E:... \ websiteroot \ dbc \ filename.txt」へのアクセスが拒否されます」
しかし、そのdbcフォルダーに対するすべてのユーザーに書き込みアクセスを許可した場合、エラーは発生しませんが、すべてが完璧に見えます。
詳細情報:Webサイトはクラシックパイプラインモードで実行され、匿名認証が有効になっています(おそらく唯一の認証が有効になっています)。そして、IUSRアカウントとアプリケーションプールIDを使用して匿名認証を試しました。私の場合、ApplicationPoolIdentityはWebサイトの認証のIDです。ファイルI / OにはCOM +を使用します。クラシックASP Server.CreateObjectを使用して、オブジェクトをインスタンス化します。COM +はネットワークサービスとして実行されます。
考え?すべての人に書き込み権限を付与したくない。何か不足していますか?
解決しよう:これが私がしたことです。
CipherDemoという名前のWebサイトは、IIS 7.5のAppPoolIdentityの下で実行されていました。これは、Identity IIS AppPool \ CipherDemoによって見つけることができました。ICACLSを使用して、そのフォルダーにRWアクセス許可を与えました。
そして、実際にファイルI / Oを実行していたCOM +は、ネットワークサービスIDで実行されていました。プロセスモニターを使用してアクセス拒否エラーをトレースしていたところ、ネットワークサービスにはそのフォルダーに対する読み取りアクセス許可しかありませんでした。
ICACLS "フォルダ名" / grant:r "NT AUTHORITY \ NETWORKSERVICE" :( OI)(CI)RXW / Tを使用して、そのフォルダへの書き込みアクセスを許可しました。
そしてそれを解決しました。
私はWebサイトがCipherDemo Identityとして実行されるため、これがCOM +経由でファイルにアクセスするために使用されるアカウントになると考えていました。しかし、COM +が独自のID境界で機能することを確認するのは恥ずかしいことです。