在 Server 2012 中通过 ASP Classic / SQL Server 链接服务器访问 MS Access 数据库时出现问题

Issue accessing MS Access database via ASP Classic / SQL Server linked server in Server 2012

我有一个旧的 ASP 经典站点,它连接到 SQL 服务器数据库,该数据库使用链接服务器通过视图中的 OPENQUERY 访问 Microsoft Access 数据库 (!) ,像这样:

自从将它从 Server 2003 移动到 Server 2012 机器后,它就不再工作了。

ASP页面给出的错误是:

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "MY_LINKED_SERVER" returned message "Cannot start your application. The workgroup information file is missing or opened exclusively by another user.

但我觉得这是误导,原因有几个。该错误似乎发生在许多不同的场景中,我发现 none 的帖子完全代表我的。要注意的主要事情是视图工作正常,因此我可以通过 SQL 服务器访问数据,这对我来说表明这不是用户映射等问题,但我可能是错的。通过 ASP 经典页面连接时会出现问题。我们已经尝试使用 .mdb.accdb 格式。

任何关于我可以尝试的建议都将不胜感激。谢谢!

这听起来可能是权限问题(我本来想说 'access' 但结果令人困惑!)。

您如何控制对 SQL 数据库的访问?是 Windows 身份验证还是使用 SQL 登录?如果它是 Windows 身份验证,那么您需要提供调用用户的(如果在网站上使用模拟)或 Windows 身份,即 ASP.NET 是 运行 的访问权限Access 数据库文件。如果使用 SQL 登录,则需要提供 Windows 身份,即 SQL 服务器在该访问权限下 运行。

错误不一定准确,根据我的经验,它可能不准确。 SQL 服务器在 运行 下的帐户(不是 SQL 登录名)必须对访问文件所在的文件夹具有完全权限。另一种可能是链接服务器未使用正确的 ACE 驱动程序,或者未安装。如果使用 SQL 服务器 64 位,您将需要 64 位 ACE 驱动程序。

问题似乎是我们错误地将 SQL 用户映射到远程服务器(链接服务器 > 属性 > 安全),尽管我们似乎已经尝试了所有可能的设置组合太阳!所以看起来最初的误导性错误试图告诉我们用户没有权限。

它目前正在使用映射到 Admin 的本地登录名,默认的 Access 数据库用户密码为空。在 For a login no defined in the list above, connections will: 下,我们选择了 Be made using the login's current security context

感谢 AVG 为我指明了正确的方向。