Access データベース (.mdb) にリンクされたサーバーで SQL Server 2008 R2 を使用する .NET Web サイトを作成しました。リンク サーバーが動作し、.mdb テーブルを参照して、SQL Server のテーブルに対してクエリを実行できます。Visual Studio を使用して Web サイトを実行すると、すべてのテーブルに問題なくアクセスできます。IIS を使用して Web サイトを実行すると、Access データベースからレコードを選択しようとするとエラーが発生します。SQL サーバー テーブルは問題ありません。エラーは、「リンク サーバー "[リンク サーバーの名前] の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" のデータ ソース オブジェクトを初期化できません。(これはデータベースの名前でもあります。)
以下に詳細を順不同で示します。
- Windows Server 2008 エンタープライズ 64 ビット
- SQL Server 2008 R2 64 – ビット
- IIS7
- Access データベースには「Access 2000 ファイル形式」があります (
ファイルを Access 2010 で開いたときに表示されます)。 - Office がサーバーにインストールされていない (Access を含む)
- IIS は、IUSR アカウントを使用した匿名認証でセットアップされます。
- IUSR アカウントには、.mdb データベースが存在するディレクトリに対する完全な制御が与えられています。
- ビューは Access テーブルから作成され、Web サイトはビューにアクセスします。
これは接続文字列です。
add name="ApplicationServices" connectionString="data source=[server]; Integrated Security=SSPI; Initial Catalog=[SQL server db];" providerName="System.Data.SqlClient"
SQL Server では、これはリンク サーバーのセットアップに使用されたコードです。
EXEC sp_addlinkedserver
@server = N'LinkedServer',
@provider = N'Microsoft.ACE.OLEDB.12.0',
@srvproduct = N'OLE DB Provider for ACE',
@datasrc = N'C:\RTS_NEW\RTS\App_Data\Data\AccessDatase.mdb';
GO
[リンクされたサーバー] -> [プロバイダー] の下で、Microsoft.ACE.OLEDB.12.0 プロバイダーの [プロパティ] で次の項目が有効になっています。
- 動的パラメータ
- 処理中を許可
- アドホック アクセスを許可しない
これは面白い。Visual Studio を使用して Web サイトを実行し、(Access データベースにはアクセスせずに) SQL Server データベースにアクセスすると、.mdb ファイルと同じディレクトリに .ldb ファイルが作成されます。IIS で同じページを参照すると、.lbl が作成されません。Access データベースにアクセスするページに移動しても、ldb ファイルが作成されません。IIS が、IUSR のアクセス許可が設定されていない別のディレクトリにファイルを置いている可能性はありますか? そのディレクトリはどこにありますか?
SQL Server (MSSQLSERVER) を再起動しましたが、効果はありません。
誰かが私が見落としているものを見ることができますか? または、次にどこを見るべきか教えてください。どんな助けでも大歓迎です!
解決
ProcMon を使用して、アクセス許可を設定する必要があるディレクトリを特定できました。
http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
AppPool アカウントをフォルダーの「グループまたはユーザー名」に追加して、アクセス許可を与えるのは少し難しいことがわかりました。ここに良い説明があります: