1

我创建了一个 .NET 网站,该网站使用 SQL Server 2008 R2 和一个连接到 Access 数据库 (.mdb) 的服务器。链接服务器正常工作,我可以浏览到 .mdb 表并查询 SQL Server 中的表。当网站使用 Visual Studio 运行时,可以毫无问题地访问所有表。当网站使用 IIS 运行时,当它尝试从 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 数据库所在目录的完全控制权。
  • 视图是从访问表创建的,网站访问视图
  • 这是连接字符串:

    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

在 Linked Servers -> Providers 下,Microsoft.ACE.OLEDB.12.0 提供程序在 Properties 下启用了以下项目

  • 动态参数
  • 允许进程内
  • 禁止临时访问

这是有趣的。当我通过 Visual Studio 运行网站并访问 SQL Server 数据库(不访问 Access 数据库)时,会在与 .mdb 文件相同的目录中创建一个 .ldb 文件。当我在 IIS 中浏览到同一页面时,不会创建 .lbl。当我转到访问 Access 数据库的页面时,也不会创建任何 ldb 文件。IIS 是否可以将文件放在没有为 IUSR 设置权限的不同目录中?我在哪里可以找到那个目录?

我重新启动了 SQL Server (MSSQLSERVER),但没有任何效果。

谁能看到我忽略了什么?或者让我知道下一步该往哪里看?任何帮助表示赞赏!


解决方案

使用 ProcMon,我能够判断哪些目录需要设置权限。

http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

我发现将 AppPool 帐户添加到文件夹的“组或用户名”中,以便为其授予权限有点棘手。这是一个很好的解释:

IIS7 权限概述 - ApplicationPoolIdentity

4

0 回答 0