Часто возникает необходимость закрыть доступ пользователям к окну проекта Access. Причины могут быть разные:
- Любопытные
пользователи стали «лазить» по базе и удалили макрос или
«отредактировали» запрос (такое возможно ведь и в случае c .mde)
- Вы решили продать свою программу. Чем меньше покупатель будет видеть не нужных ему элементов, тем лучше (см. п. 1)
- Скрытие окна проекта позволяет сделать приложение более удобным в работе.
Как
правило, одним из признаков, что разработчик «шагнул» от начинающего к
«продвинутому» чаще всего является скрытие окна приложения.
Простейшим вариантом решения проблемы может быть скрытие окна базы данных через стандартные настройки: Сервис – Параметры запуска – убрать галочку «окно базы данных». Однако, как уже говорилось в предыдущей статье, такую защиту столь же просто убрать, удерживая при запуске приложения Shift. В той же статье говорилось о неких «модулях», способных блокировать такую возможность. Познакомимся с одним из них.
Для построения интерфейса защиты создадим два макроса: AutoExec, AutoKeys. С первым Вы уже знакомы по статье «Автолинковка и резервное копирование».
Второй выполняет похожую роль – перехватывает нажатие клавиш на
клавиатуре. Чтобы он их перехватывал, он должен называться AutoKeys
(зарезервированное имя в Access). Еще один важный момент - в меню Сервис – Параметры запуска уберем все галочки, иначе обойти защиту от Shift станет весьма просто: Окно - Отобразить - Окно БД. Если же отключить все меню, то в пункте меню "Окно" будут выводится только
режимы расположения окон, а окно базы выводится не будет.
В макросе AutoExec дадим команду на запуск формы FrmStart, в макросе AutoKeys – формы ВклОткШифт. Причем форма ВклОткШифт будет запускаться при нажатии комбинации клавиш Ctrl + Q. Для этого в конструкторе зададим имя макроса - ^Q.
Зачем
так мудрено? Дело в том, что если мы просто зададим запуск формы в
Сервис – Параметры запуска, то при включении защиты от Shift будет
открываться пустое окно Access. Мы закроем базу вообще для всех, в том
числе и от себя! Для всякого замка должен быть ключ: им и выступает
форма ВклОткШифт - через нее устанавливается и
снимается защита. А если ее сделать скрытой (см. ниже) и запускать
через макрос (комбинацию клавиш) – мы еще больше запутаем любопытных
юзеров. Само включение происходит через свойство базы
DBS.Properties("AllowBypassKey") = True (или False)
В
зависимости от значения пароля, введенного в поле формы «ВклОткШифт»
этому свойству присваивается True или False. Затем база закрывается
(чтобы изменения вступили в силу)
DoCmd.Quit acPrompt
Итак, проведем испытание:
Запускаем
наше приложение, удерживая Shift – открывается стартовая форма, окно
проекта закрыто. Жмем Ctrl + Q, вводим 1234, жмем «Ввод». База
закрывается. Снова щелкаем по базе, удерживая Shift – открывается
стартовая форма, окно проекта открыто! И так делаем, пока не надоест.
А
теперь по поводу «скрытый объект». Есть еще одна возможность заморочить
пользователя. Дело в том, что в Access есть три варианта отображения
объектов:
Нормальный режим (в окне базы данных не отображаются скрытые и системные объекты) установлен по умолчанию
Режим отображения скрытых объектов (в окне базы дынных не отображаются системные объекты)
Режим отображения системных объектов (отображаются все объекты)
Системный объект
– это встроенный объект базы данных, определенный как системный,
например таблица "MSysIndexes", или системные объекты, определенные
пользователем. Для определения системного объекта необходимо, что бы
его имя начиналось с символов USys. Например, добавьте к названию
формы, таблицы, отчета USys – и они тут же «исчезнут», станут скрытыми,
но обращаться к ним из приложения можно так же, как обычно.
Чтобы увидеть их, нужно сделать следующее:
Сервис – Параметры – Вкладка вид. В группе Отображать выберите требуемый вариант – поставьте (уберите) галочку «Скрытые объекты», «Системные объекты» и т. д.
Многих пользователей такая «защита» способна будет сбить с толку: даже
сумев открыть приложение через Shift, они с удивлением обнаружат, что
какой то формы или таблицы там нет, хотя при работе она видна. Но на
профессионалов, конечно, такая уловка не подействует – разумеется, они
знают о свойствах объектов базы данных. Но, если учесть, что
большинство любопытных чаще всего бросают попытки «ковыряться», если у
них не получилось с первого раза, то такая «защита» заслуживает
внимания.
Выводы:
- Защиту
от Shift можно применять только при условии, что база преобразована в
.mde. В противном случае ее легко обойти, сделав простой импорт всех
объектов в новую базу. В .mde как известно без декомпиляции (взлома)
невозможно сделать импорт общих модулей, форм и отчетов – самого
ценного содержимого базы.
- Если вы
разрабатываете приложения на своей работе, то обычно лучший способ
защиты – поговорить «по душам» с пользователями (и с начальством).
Защита от Shift будет служить подобно реечному замку на гараже – при
желании легко вскрывается, но не будь его, гараж обокрали бы еще
быстрее.
- Обычно защиту от Shift
применяют в комплексе с другими методами: привязка к компьютеру, вход
по паролю, шифрование данных и т. д.
|