Microsoft JET Database Engine error: "file in use"

Microsoft JET Database Engine error: "file in use"

我在 Classic ASP 中使用数据库时遇到了这种奇怪的行为。

我在 public 位置有一个数据库:/database/database.mdb(www 可浏览位置)。 这被翻译成以下物理形式:c:\Domains\mysite.com\database\database.mdb

我决定更改数据库位置并将其放在以下非 public 位置,以增加安全性:c:\Domains\Contents\database.mdb

所有 ASP 脚本都可以访问此位置并且它具有足够的权限。

有一些脚本可以处理同时打开和关闭的多个记录集,例如,在以下流程中:

|-database is opened
| |---recorset1 is opened
| | 
| | |----recorset2 is opened
| | | 
| | |----recorset2 is closed
| | 
| | |-recorset3 is opened
| | |
| |---recorset1 is closed
|   |
|   |-recorset3 is closed
|
|-database is closed

问题是这样的:当我在 public 位置使用数据库时 (c:\Domains\mysite.com\database\database.mdb) - 上面描述的记录集工作效果很好。但是当我在这个非 public 位置 (c:\Domains\Contents\database.mdb) 使用数据库时,我得到以下信息 错误:

Microsoft JET Database Engine error '80004005'
Could not use ''; file already in use.

我有两个问题:

  1. 这怎么可能? IIS 是否将 public http 文件与 'local' 文件区别对待?我该如何解决这个问题?
  2. 这真的增加了安全性吗?真的有效吗?

"You may have permission to open the database,but does the account trying to access the database have permission? Most likely it's not the logged in user but rather the anonymous user"

我们如何检查尝试访问数据库的帐户是否具有权限?

参考https://forums.iis.net/t/1147247.aspx?Microsoft+JET+Database+Engine+error+80004005+

了解更多详情

尝试同时打开多个记录集时出现以下错误的原因:

Microsoft JET Database Engine error '80004005'

Could not use ''; file already in use.

对数据库目录的权限不足。

在 plesk 中,我将这些权限添加到包含数据库的目录 (c:\Domains\Contents)

这解决了问题。

这与 IIS 在包含数据库的目录中创建新文件 (database.ldb) 的能力有关。 .LDB 文件是 Microsoft Access Lock 信息文件,当 Access 数据库被用户 opened/accessed 时创建,并包含有关哪些用户当前正在访问该文件的信息。 .ldb 文件在 Microsoft Jet 数据库引擎版本 3.0 和 3.5 的多用户方案中起着重要作用,因为它用于确定共享数据库中哪些记录被锁定以及由谁锁定。

此处有更多相关信息:Introduction to .ldb Files

...the .mdb file should be located in a folder where users have read, write, create, and delete (or full control) permissions.