現在オフラインです。再接続するためにインターネットの接続を待っています

[FIX] 偽装が有効な ASP.NET からインデックス サービスにアクセスしようとすると "アクセスが拒否されました" エラー メッセージが表示される

サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。
現象
ASP.NET ページを通して Index Server に対して検索した場合、次のエラー メッセージが表示されることがあります。
アクセスが拒否されました。説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

Exception Details: System.Data.OleDb.OleDbException: Access is denied.
この現象は、ASP.NET Web アプリケーションの偽装が有効で、かつ ASP.NET ワーカー プロセス (Aspnet_wp.exe) を実行しているセキュリティ コンテキストが ASPNET アカウントである場合にのみ発生します。
解決方法
次のいずれかの方法を実行して、この問題を回避します。
  • すべての ASP.NET Web アプリケーションの偽装を無効にします。これはデフォルトの設定です。
  • Index Server 検索を実行する特定の .aspx ページのみの偽装を無効にします。そのためには、次のように Web.config ファイルに <location> タグを追加します。
    <location path="filename.aspx"><system.web>   <identity impersonate="false" /></system.web></location>
これらの回避策を受け入れられない場合は、ASP.NET ワーカー プロセスを実行するセキュリティ コンテキストを、SYSTEM アカウントに変更することができます。ただし、SYSTEM アカウントは Web サーバー コンピュータ上で高い権限を持つ Administrator アカウントとなるため、ASP.NET ワーカー プロセスのセキュリティ コンテキストを SYSTEM アカウントに変更することは推奨されません。この回避策は、他の回避策がどれも受け入れられない場合にのみ使用してください。

ASP.NET ワーカー プロセスを実行するセキュリティ コンテキストを変更するには、Machine.config ファイルの <processModel> セクションにある userName 属性に SYSTEM を設定し、次に Password 属性に autogenerate を設定します。Machine.config ファイルは、C:\Windows ディレクトリ\Microsoft.Net\Framework\v1.0.3705\Config フォルダにあります。
状況
マイクロソフトでは、この問題をこの資料の冒頭に記載したマイクロソフト製品の問題として認識しています。

この問題を解決するためのモジュールは、Windows 2000 日本語版 Service Pack 4 以降に含まれております。
Windows 2000 日本語版の最新 Service Pack については、以下の Web サイトから入手できます。
詳細

問題の再現手順

  1. Microsoft Visual Studio .NET を起動します。
  2. ASP.NET Web アプリケーションを作成します。
  3. .aspx ページの HTML に次のコードを追加します。
    <%@ Page language="c#" %><%            System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("provider=msidxs;");            conn.Open();            string Sql = "Select DocTitle, vpath, characterization, rank from Scope(' DEEP TRAVERSAL OF \"C:\\\" ')  where FREETEXT(' \"ticket\" ') order by rank desc";            System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(Sql, conn);            System.Data.DataSet ds = new System.Data.DataSet();            da.Fill(ds, "SearchResults");            Response.Write("Search Results: <br>");            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)            {                        Response.Write("<br>" + ds.Tables[0].Rows[i]["vpath"].ToString());            }%>
  4. 次のように、Web.config ファイルを修正して偽装を有効にします。
    <identity impersonate="true" />
  5. ASP.NET ワーカー プロセスを実行しているセキュリティ コンテキストを ASPNET アカウントにします。そのためには、Machine.config ファイルの <processModel> セクションにある userName 属性に machine を設定し、次に Password 属性に autogenerate を設定します。

    : デフォルトでは、ASP.NET ワーカー プロセスは、制限された ASPNET アカウントのセキュリティ コンテキストで動作するよう設定されています。
  6. コンピュータでインデックス サービスを起動します。
  7. アプリケーションをビルドし、ブラウザで .aspx ページを開きます。「現象」に記載されたエラー メッセージが表示されることを確認します。
関連情報
ASP.NET における偽装の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
306158 INFO: Implementing Impersonation in an ASP.NET Application
306158 [INFO] ASP.NET アプリケーションに偽装を実装する
ASP.NET ワーカー プロセス ID の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
317012 INFO: Process and Request Identity in ASP.NET
317012 [INFO] ASP.NET のプロセス ID と要求 ID
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 323293 (最終更新日 2003-03-26) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:323293 - 最終更新日: 03/24/2006 13:57:50 - リビジョン: 2.5

Microsoft ASP.NET 1.0, Microsoft Index Server 2.0, Microsoft OLE DB Provider for Index Server 3.0

  • kbhotfixserver kbfix kbbug kbconfig kbnofix kbsecurity KB323293
フィードバック