В данной статье хочу поделиться своим опытом по защите баз данных на уровне разграничения прав пользователей, не прибегая к созданию MDE-файла. На собственном опыте убедился, что стоит надежнее потратить лишние 20 минут на защиту "ручками", чем пользоваться мастером.
В данной статье хочу поделиться своим опытом по защите баз данных на уровне разграничения прав пользователей, не прибегая к созданию MDE-файла. На собственном опыте убедился, что стоит надежнее потратить лишние 20 минут на защиту "ручками", чем пользоваться мастером.
Шаг #1: Создаем новую системную БД.
При защите БД на уровне пользователей используется системная база данных (с расширением MDW), еще называемая файлом рабочей группы. В этом файле хранится информация о пользователях и группах БД, а также разрешения на использование всех объектов в БД. По умолчанию Access использует в качестве файла рабочей группы файл SYSTEM.MDW с пользователем Admin, который находится в системной директории Windows (WindowsSystem или WinNTSystem32). Таким образом, если Вы установили Access по стандартно-предлагаемому пути и в ярлыке на его загрузку находиться путь C:MSOfficeMSACCESS.EXE - это эквивалентно C:MSOfficeMSACCESS.EXE /WrkGrp C:WINDOWSSYSTEMSYSTEM.MDW /User Admin
1. Запускаем "Администратор рабочих групп MS Access" (C:WindowsSystemWRKGADM.EXE) 2. Создаем НОВЫЙ файл рабочей группы, допустим в C:MyProgMyMdwFile.mdw. (При этом обязательно записываем к себе в "склерозник" Имя, Организацию и Код, с которыми этот файл был создан. Это будет нужно в том случае, если вы этот файл потеряете. Или в самый ответственный момент, собираясь к заказчику, забудете его переписать. Тогда "на месте" можно будет его заново создать. (У меня такое разок уже было). 3. Присоединяем в "Администраторе..." старый файл (C:WINDOWSSYSTEMSYSTEM.MDW).
Таким образом мы получили на диске новый файл рабочей группы и при этом оставили сам Access без изменений, т.е. работающий со своим "родненьким" system.mdw (вот пусть он с ним по-умолчанию и работает, а мы ярлычек настроим).
Шаг #2: Создаем ярлык для загрузки Access с новой системной БД.
Итак, как было сказано чуть выше, мы получили новый файл рабочей группы, а Access по-умолчанию продолжает работать со старым. А мы создадим новый ярлычек, который имеет следующий вид: {Путь к файлу MSACCESS.EXE}{Путь к БД}/WrkGrp {Путь к файлу рабочей группы}/User {Имя пользователя} Поскольку ни БД, ни пользователя у нас еще нет, то ярлык быдет иметь вид: C:MSOfficeMSACCESS.EXE /WrkGrp C:MyProgMyMdwFile.mdw /User Admin
Шаг #3: Создаем SuperUser-а и модифицируем под него ярлык.
1. Запускаем Access этим ярлыком. 2. Никаких БД не открываем и не создаем. 3. Идем в меню "Сервис" -> "Защита" -> "Пользователи и группы". 4. Создаем нового пользователя, например "SuperUser". 5. Включаем его в группу "Admins" 6. Пользователя "Admin" исключаем из группы "Admins" 7. Выходим из Access. 8. Модифицируем ярлык следующим образом: C:MSOfficeMSACCESS.EXE /WrkGrp C:MyProgMyMdwFile.mdw /User SuperUser
Шаг #4: Создаем новую БД (вледелец - SuperUser) и модифицируем ярлык.
1. Запускаем Access этим ярлыком. 2. Создаем новую БД: C:MyProgMyMdbFile.mdb 3. Выходим из Access. 4. Модифицируем ярлык следующим образом: C:MSOfficeMSACCESS.EXE C:MyProgMyMdbFile.mdb /WrkGrp C:MyProgMyMdwFile.mdw /User SuperUser
Шаг #5: Разбираемся с правами доступа.
1. Запускаем Access этим ярлыком. 2. Идем в меню "Сервис" -> "Защита" -> "Разрешения" 3. СНИМАЕМ ВСЕ ПРАВА НА ВСЕ ОБЪЕКТЫ БД У ГРУПП "USERS", "ADMINS" И ПОЛЬЗОВАТЕЛЯ "ADMIN"
Таким образом мы получили, что к БД имеет доступ ТОЛЬКО пользователь SuperUser. Кстати, не мешает уже на этом этапе завести ему пароль. Теперь смело создаем новые группы пользователей и самих пользователей, включаем их в группы. Пользователям никаких прав не даем. Необходимые права выдаем группам. Рекомендую для начала следующие:
База данных - открытие/запуск Таблица - чтение макета, чтение данных, обновление данных, вставка данных, удаление данных Запрос - чтение макета, чтение данных, обновление данных, вставка данных, удаление данных Форма - открытие/запуск Отчет - открытие/запуск Макрос - открытие/запуск Модуль - НИЧЕГО
Это дает пользователям право открывать БД, читать/править/добавлять/удалять данные в таблицах и запросах, открывать формы и отчеты в режиме просмотра (но не конструктора) и запускать макросы. В последствие, когда вы создадите (или импортируете) таблицы и запросы в БД, можно с каких-либо из них снять некоторые права (если, допустим, какую-то таблицу пользователи должны только просматривать).
Осталось создать для каждого пользователя ярлык, где в ключе /User бедет стоять соответствующее значение.
Полезные советы по защите
1. Не забудьте записывать все имена и коды, с которыми создаете пользователей и группы. Пригодиться, если придется восстанавливать файл рабочей группы. 2. Отключите использование клавиши "SHIFT" при загрузке. (см. свойство AllowBypassKey в Help-е) 3. При загрузке БД пусть стартовая форма будет "модальное - Да, всплывающая - Да, Тип границы - Отсутствует" и при загрузке разворачивается на весь экран. (DoCmd.Maximize на событие Form_Open) 4. На закрытие стартовой формы - закрывайте Access в том случае, если текущий пользователе не SuperUser: Private Sub Form_Close() If CurrentUser() <> "SuperUser" Then DoCmd.Quit End If End Sub 5. Не забывайте писать процедуры обработки ошибок.