在 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 数据库 (!) ,像这样:
链接服务器配置为使用 Microsoft.ACE.OLEDB.12.0
连接到 Access 数据库
视图 view_requests
从 Access 数据库中的 table 检索数据:
SELECT *
FROM OPENQUERY(MY_LINKED_SERVER, 'SELECT * from Requests') AS Rowset_1
ASP经典页面检索数据:
Set getRequests = dbConnect.Execute("SELECT * FROM view_requests")
自从将它从 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 为我指明了正确的方向。
我有一个旧的 ASP 经典站点,它连接到 SQL 服务器数据库,该数据库使用链接服务器通过视图中的 OPENQUERY
访问 Microsoft Access 数据库 (!) ,像这样:
链接服务器配置为使用
Microsoft.ACE.OLEDB.12.0
连接到 Access 数据库
视图
view_requests
从 Access 数据库中的 table 检索数据:SELECT * FROM OPENQUERY(MY_LINKED_SERVER, 'SELECT * from Requests') AS Rowset_1
ASP经典页面检索数据:
Set getRequests = dbConnect.Execute("SELECT * FROM view_requests")
自从将它从 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 为我指明了正确的方向。