Часто возникает необходимость закрыть доступ пользователям к окну проекта Access.
Причины могут быть разные:
- Любопытные пользователи стали «лазить» по базе и удалили макрос или «отредактировали» запрос (такое возможно ведь и в случае c .mde)
- Вы решили продать свою программу. Чем меньше покупатель будет видеть не нужных ему элементов, тем лучше (см. п. 1)
- Скрытие окна проекта позволяет сделать приложение более удобным в работе.
Как правило, одним из признаков, что разработчик «шагнул» от начинающего к «продвинутому» чаще всего является скрытие окна приложения. Простейшим вариантом решения проблемы может быть скрытие окна базы данных через стандартные настройки: Сервис – Параметры запуска – убрать галочку «окно базы данных». Однако, как уже говорилось в предыдущей статье, такую защиту столь же просто убрать, удерживая при запуске приложения Shift. В той же статье говорилось о неких «модулях», способных блокировать такую возможность. Познакомимся с одним из них. Для построения интерфейса защиты создадим два макроса: AutoExec, AutoKeys. С первым Вы уже знакомы по статье «Автолинковка и резервное копирование». Второй выполняет похожую роль – перехватывает нажатие клавиш на клавиатуре. Чтобы он их перехватывал, он должен называться AutoKeys (зарезервированное имя в Access). В макросе 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 применяют в комплексе с другими методами: привязка к компьютеру, вход по паролю, шифрование данных и т. д. Но об этом – в следующих статьях.
Как всегда, чтобы посмотреть, как все это работает, жмем на эту ссылку…
|