[PRB] ASP.NET から Access データベースに接続できない

この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。

  • System.Data.OleDb

現象

次の条件に該当する場合、ハンドルされない例外が発生することがあります。

  • ASP.NET ワーカー プロセス (Aspnet_wp.exe) がデフォルトの ASPNET アカウントで実行されています。


    かつ

  • アプリケーションで偽装が有効になっていません。


    かつ

  • Access データベースに対して接続または書き込みを行おうとしました。

上記の状況では、次のいずれかの例外エラーが表示されることがあります。

ファイル 'C:\Nwind.mdb' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。

更新可能なクエリであることが必要です。

原因

セキュリティ上の理由により、ASP.NET ワーカー プロセスはデフォルトの ASPNET アカウントで実行されます。アプリケーションの偽装を有効にしていない場合、そのアプリケーションに対する要求を実行するすべてのスレッドはプロセス アカウントで実行されます。


この問題は、ASPNET アカウントに、Access データベースに接続または書き込みを行うのに必要なアクセス許可がないことが原因で発生します。

解決方法

この問題を回避するには、以下のいずれかの方法を使用します。

  • Machine.config ファイルの processModel セクションで、ASP.NET ワーカー プロセスが SYSTEM アカウントで実行されるように構成します。

  • セキュリティ上の理由により、マイクロソフトでは、ASP.NET アプリケーションで偽装を有効にすることをお勧めします。この方法は、偽装ユーザーがコンピュータとアクセスするデータベースに対して十分なアクセス許可を持っている場合に機能します。

  • データベースとデータベース フォルダで Everyone グループに読み取りと書き込みのアクセス許可を与えます。この方法は安全ではないため、マイクロソフトでは、この方法を使用することはお勧めしません。

状況

この動作は仕様です。

詳細

無制限のユーザー数で、24 時間サポート、および ACID トランザクションが必要な場合、マイクロソフトでは、Microsoft インターネット インフォメーション サービス (IIS) と Microsoft SQL Server を併用することを強く推奨します。Microsoft Active Server Pages (ASP) は、任意の OLE DB および ODBC 準拠のデータベースと機能しますが、IIS は広範囲なテストが行われ、インターネットの事例で発生する大量のトランザクション トラフィックと無制限のユーザーを伴う状況で Microsoft SQL Server と連携するように設計されています。


注 : "ACID" は、トランザクションが処理するシステムの 4 つのプロパティの略語です。4 つのプロパティとは、原子性 (Atomicity)、一貫性 (Consistency)、分離性 (Isolation)、および持続性 (Durability) です。


ASP では、有効なデータ ソースとして Microsoft Jet データベース エンジンの使用がサポートされています。Microsoft ODBC Driver for Access および Microsoft OLE DB Provider for Jet は、Web アプリケーション、コマース アプリケーション、トランザクション アプリケーション、メッセージ サーバーなどの、高負荷で多くの同時実行を伴う 24 時間連続稼動のサーバー アプリケーションで使用することは意図されていません。

現象の再現手順


  1. Microsoft Visual C# .NET で新しい ASP.NET Web アプリケーション プロジェクトを作成します。

  2. 次のコードを Web フォームの宣言セクションに追加します。これはコード ウィンドウの先頭にあります。

    using System.Data.OleDb;
  3. 次のコードを Page_Load イベントに追加します。

        String myConn  ="Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\\Nwind.mdb;";
    String myQuery = "Insert into Customers(CustomerID,CompanyName) Values ('aaaaa', 'aaaaa')";

    OleDbConnection cn = new OleDbConnection(myConn);
    cn.Open();
    OleDbCommand cmd = new OleDbCommand(myQuery, cn);
    cmd.ExecuteNonQuery();
    cn.close();
  4. 使用している環境に合わせて、接続文字列を変更します。

  5. プロジェクトをコンパイルします。

  6. ブラウザで WebForm1.aspx を表示します。「現象」に記載した例外メッセージが表示されます。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

[INFO] ASP.NET のセキュリティの概要

[INFO] ASP.NET の構成の概要
processModel セクションの詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。

<processModel> Element

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID (最終更新日 2004-06-25) を基に作成したものです。


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

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

フィードバックをお送りいただきありがとうございます!

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×