2016-10-06 12 views
0

Я столкнулся с этим странным поведением при работе с базой данных в классическом ASP.Ошибка Microsoft JET Database Engine: «Используемый файл»

У меня была база данных в общедоступном месте: /database/database.mdb (место просмотра в Интернете). Это переведено на следующее физическое: c: \ Domains \ mysite.com \ database \ database.mdb

Я решил изменить местоположение базы данных и поместить ее в следующее не общедоступное место для дополнительной безопасности: 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 

Проблема заключается в следующем: Когда я использую базу данных в общественном месте (в : \ Domains \ mysite.com \ database \ database.mdb) - Описанная работа с наборами записей выше отлично работает. Но когда я использую базу данных в этом неофициальном общественном месте (с: \ Domains \ Содержание \ database.mdb) Я получаю следующее сообщение об ошибке:

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

У меня 2 вопроса:

  1. Как это возможно? Является ли IIS общедоступными http-файлами, отличными от «локальных» файлов? Как я могу это исправить?
  2. Имеет ли это дополнительную безопасность? Действительно ли это эффективно?
+0

'Я имел базу данных в общественном месте: /database/database.mdb (WWW просматриваемого местоположение) .' это бедствие. проблема безопасности. – Zam

+3

'Но когда я использую базу данных в этом не общедоступном месте (c: \ Domains \ Contents \ database.mdb), я получаю следующую ошибку:' пользователь IUSR имеет READ/WRITE доступ к этой базе данных? – Zam

+1

Почему в 2016 году люди STILL пытаются использовать базы данных Access для веб-разработки? Сэкономьте себе много горя и переключитесь на [SQL Server Express] (https://www.microsoft.com/en-gb/cloud-platform/sql-server-editions-express), он бесплатный, эффективный, предназначенный для масштаб в состоянии. – Lankymart

ответ

0

Причины для получения следующего сообщения об ошибке при попытке открыть несколько наборов записей одновременно:

Microsoft JET Database Engine error '80004005'

Could not use ''; file already in use.

было недостаточно правами на каталог базы данных.

В Plesk, я добавил эти права на каталог, содержащий базу данных (C: \ Domains \ Содержание) Directory Permissions in Plesk

И это решило проблему.

Это связано с возможностью IIS создавать новые файлы (database.ldb) в каталоге, содержащем базу данных. Файл .LDB является информационным файлом блокировки доступа Microsoft Access и создается при открытии/доступе к базе данных Access и содержит информацию о том, какие пользователи в данный момент обращаются к файлу. Файл .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.

+0

Итак, что вам было предложено в первую очередь, неудивительно. – Lankymart

1

"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+

для более подробной информации