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