Защита от Shift в MS Access

Источник: Acessoft

Часто возникает необходимость закрыть доступ пользователям к окну проекта Access. Причины могут быть разные:

  1. Любопытные пользователи стали «лазить» по базе и удалили макрос или «отредактировали» запрос (такое возможно ведь и в случае c .mde)
  2. Вы решили продать свою программу. Чем меньше покупатель будет видеть не нужных ему элементов, тем лучше (см. п. 1)
  3.  Скрытие окна проекта позволяет сделать приложение более удобным в работе.

Как правило, одним из признаков, что разработчик «шагнул» от начинающего к «продвинутому» чаще всего является скрытие окна приложения.
Простейшим вариантом решения проблемы может быть скрытие окна базы данных через стандартные настройки: Сервис - Параметры запуска - убрать галочку «окно базы данных» . Однако, как уже говорилось в предыдущей статье, такую защиту столь же просто убрать, удерживая при запуске приложения 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, они с удивлением обнаружат, что какой то формы или таблицы там нет, хотя при работе она видна. Но на профессионалов, конечно, такая уловка не подействует - разумеется, они знают о свойствах объектов базы данных. Но, если учесть, что большинство любопытных чаще всего бросают попытки «ковыряться», если у них не получилось с первого раза, то такая «защита» заслуживает внимания.
Выводы:

  1. Защиту от Shift можно применять только при условии, что база преобразована в .mde. В противном случае ее легко обойти, сделав простой импорт всех объектов в новую базу. В .mde как известно без декомпиляции (взлома) невозможно сделать импорт общих модулей, форм и отчетов - самого ценного содержимого базы.
  2. Если вы разрабатываете приложения на своей работе, то обычно лучший способ защиты - поговорить «по душам» с пользователями (и с начальством). Защита от Shift будет служить подобно реечному замку на гараже - при желании легко вскрывается, но не будь его, гараж обокрали бы еще быстрее.
  3. Обычно защиту от Shift применяют в комплексе с другими методами: привязка к компьютеру, вход по паролю, шифрование данных  и т. д.

Пример, как это все работает, Вы можете скачать ниже.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=7710