尝试使用 Access 远程表运行查询时出错
Posted
技术标签:
【中文标题】尝试使用 Access 远程表运行查询时出错【英文标题】:Error when trying to run query using Access remote table 【发布时间】:2013-08-22 21:31:11 【问题描述】:我有一个带有本地和远程表的 Access 数据库。远程表通过 ODBC 连接链接到 Sql Server 数据库。
当我打开 Access 数据库时,我可以打开并查看本地和远程表的内容。所以这证明从 ASP.NET 应用程序连接到远程表应该没有问题
现在,当我在 Visual Studio 中运行我的 ASP.NET 应用程序时,我可以毫无问题地访问 Access 中的本地和远程表。
只要我将我的应用程序放入 IIS 并从 localhost 运行应用程序,我就只能使用我的代码访问 Access 文件中的本地表,但不能访问远程表!我在尝试时收到以下错误:“ODBC--连接到 'FMPOS_live' 失败。”但请记住,我直接从 Access 打开远程表没有问题,但由于某种原因,我无法从在 IIS 中运行的应用程序访问它们。
是否有某个地方的权限取决于访问 Access 文件的人员或内容来确定该进程是否可以使用远程表?
【问题讨论】:
【参考方案1】:从 Visual Studio 运行时,您使用自己的凭据连接到 SQL 服务器。
从 IIS 运行时,您使用的是 ApplicationPoolIdentity、网络服务或本地系统,具体取决于应用程序池的配置。您需要允许网站运行在哪个帐户下的登录和读取权限。
在从 VS 运行的情况下,它可能会工作,因为您可能是 SQL 服务器上的系统管理员。
尝试在任务管理器中检查正在运行“w3wp.exe”的用户。
对于 ApplicationPoolIdentity,您要查找的用户名将是 IIS APPPOOL\NameOfApplicationPool。
【讨论】:
我给了用户“Everyone”,对 Access 数据库的完全访问权限,我的 Web 应用程序仍然无法访问 Access 数据库远程表。再次访问本地表没有问题。如果这是一个 Sql Server 问题,那么 Sql Server 怎么知道哪个进程正在使用 Access 数据库来提供对其表的访问?我在完全不同的 Web 服务器上设置了这种情况,使用包含远程表的不同 Access 数据库到另一个 Sql Server 数据库,并且发生了同样的事情,所以这似乎不是仅限于一台计算机的一些模糊问题。还有想法? 表是通过access db链接的吗?伙计,这听起来很复杂!无论如何,我会想象打开访问数据库的 IIS 进程仍然是打开 SQL 连接的进程,因此需要权限。我现在意识到我的答案不清楚,您需要将权限添加到 SQL 服务器数据库而不是访问数据库。 但是我在 ODBC 中使用带有用户名和密码的 Sql Server 身份验证来连接到 Sql Server 而不是 windows 身份验证。 这是一件很容易重现的事情。如果你能找到解决方案,我会非常欣喜若狂,因为我已经花了几个小时在这上面。 1.创建一个带有一张表的Sql Server数据库。 2. 创建到该数据库的 ODBC 连接。 3. 创建一个带有本地表的 Access 数据库。 4. 使用与 Sql Server 的 ODBC 连接也在此 Access 数据库中创建一个远程表。现在在 ASP.NET 中尝试访问 Access 中的每个表。您将能够读取本地表,但不能读取远程表。 当我在 studio 中查看 web 应用程序时,我可以在其中查看远程表,连接字符串必须是 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\FMPOS\DataBase\ Local\FMPOS_Main.mdb 当我发布它时,它必须是 Provider=Microsoft.Jet.OLEDB.12.0;Data Source=C:\FMPOS\DataBase\Local\FMPOS_Main.mdb 也许第二个连接字符串不允许远程查看表?【参考方案2】:问题在于应用程序池标识。 Access 不允许通过默认进程 ApplicationPoolIdentity Identity 访问其远程表。我将身份更改为我的 Windows 用户登录名,并且成功了!
说明: 1. 转到您网站的应用程序池 2.点击它并选择高级设置 3. 在 Process Model Identity 下,选择 Custom Account 并输入您的 Windows 登录用户名和密码。
【讨论】:
以上是关于尝试使用 Access 远程表运行查询时出错的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Firebase 远程配置运行 Flutter WEB 应用程序时出错 [关闭]
为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快