Как разрешить одному пользователю обновлять базу данных, а другим разрешать чтение только в Microsoft Access?

Я планирую разместить свое приложение Microsoft Access с формами и базой данных на общем диске, чтобы его могли использовать более 10 человек. Тем не менее, существует проблема параллелизма. Есть ли способ настроить его так, чтобы база данных Microsoft Access могла обновляться только одним человеком одновременно, в то время как другие могли читать, но не обновлять ее? На данный момент база данных доступа может обновляться и считываться только одним человеком, в то время как другие не могут даже открыть файл. Большое спасибо за любую помощь!

2 ответа

Я хочу, чтобы только 1 человек мог обновлять базу данных, в то время как другие будут только для чтения.

Да, это можно сделать, и вам не нужно менять код приложения для этого. Это можно сделать, настроив разрешения для общей папки и общего файла.

Разрешения на папку

Всякий раз, когда одному или нескольким пользователям требуется доступ на чтение / запись к файлу базы данных ACE/Jet (.accdb или.mdb), все пользователи должны иметь разрешение на создание файлов / запись данных в папку, в которой находится файл. Это связано с тем, что их копия ядра СУБД Access должна иметь возможность создавать файл блокировки (.laccdb или.ldb), если они являются первыми в базе данных.

Обратите внимание, что даже пользователи, которые будут иметь доступ только к файлу только для чтения, по-прежнему нуждаются в разрешении "Создать файлы" для этой папки. Это важно

Разрешения для файла (.accdb или.mdb)

Здесь вы различаете пользователей, которые могут обновлять базу данных, и пользователей с доступом только для чтения. Просто используйте разрешения Windows для файла, чтобы предоставить им права на чтение и запись или права только на чтение.

Распространенная ошибка #1: Установите права доступа пользователя / группы (чтение-запись или только чтение) для папки и дайте файлу базы данных (.accdb или.mdb) наследовать их

В этой ситуации пользователи "чтение + запись" могут создать файл блокировки, а пользователи "только для чтения" - нет.

• Сценарий A: если пользователь "чтение + запись" сначала открывает базу данных, то создается файл блокировки, и все работает как положено. Дополнительные пользователи "чтение + запись" могут открывать базу данных и вносить обновления, а дополнительные пользователи "только чтение" открывают базу данных только для чтения.

• Сценарий B: если пользователь "только для чтения" сначала открывает файл базы данных, то его копия Access открывает файл только для чтения, как и ожидалось. Однако, если пользователь "чтение + запись" (в соответствии с его правами доступа к файлу) попытается открыть файл базы данных, он также откроет его только для чтения. Каждый может войти, но никто не может внести изменения.

Распространенная ошибка № 2: Запретить "создавать файлы" в папке для всех

В этом случае никто не может создать файл блокировки, поэтому каждый открывает базу данных только для чтения, независимо от своих прав доступа к самому файлу базы данных.

Дополнительные примечания:

Вышеуказанные результаты были подтверждены сочетанием клиентов Access_2010 и Access_2013, подключающихся к общему бэкэнду.accdb в Windows Server 2012. В более ранних версиях Access, если никто не мог создать файл блокировки, то первый человек "в" открывал файл базы данных в "Эксклюзивном режиме" и получите любой доступ, который разрешен для их файлов, в то время как всем последующим пользователям будет отказано в доступе с сообщением об ошибке, гласящим, что "Файл открыт исключительно другим пользователем".

Нет. Вы могли бы сделать что-то программно, но это было довольно хрупко, блокируя всех каждый нечетный день. Доступ - хороший внешний интерфейс, но не хороший хороший для многопользовательского. Используйте другую базу данных в качестве бэк-энда. В принципе, SQL Server Express - самый простой вариант. Конечно, вам нужно разделить базу данных на переднюю и внутреннюю, не ясно, сделали ли вы это уже. Если нет, вы можете попробовать, как это работает с обеими частями в Access, но мой опыт работы с многопользовательскими сетевыми бэкэндами Access не очень хорош.

Другие вопросы по тегам