В этой статье рассмотрим один из способов защиты приложения Access. Речь пойдет о входе в базу через ввод пароля, или говоря иначе - авторизация. В Access предусмотрена возможность задать пароль на базу данных: Сервис – Защита – Задать пароль базы данных. Однако сам пароль хранится в системном реестре в незашифрованном виде, и чтобы открыть такую защищенную базу, достаточно лишь зайти в реестр и прочитать его. Мы же попробуем создать аналогичный интерфейс, но уже с зашифрованным паролем, причем сделаем так, чтобы при попытке открыть форму, если пользователю удалось войти в базу, минуя стартовую форму авторизации, база аварийно закрывалась. Для этого нам понадобится в служебной таблице, например tAdminCop, завести поле Password, в котором будем хранить пароль, а так же модуль шифрования пароля – AdminPassword. Схема авторизации следующая:
- При старте приложения запускается форма авторизации formAdmPassword, в которой вводим пароль
- Пароль считывается, шифруется и сравнивается с зашифрованным паролем в поле таблицы tAdminCop
- Если пароли совпадают, то открывается стартовая форма приложения, если нет – выход из приложения.
В модуле Constants задана константа логического типа. При правильном пароле она принимает значение True, при ложном (по умолчанию) – соответственно False. В событие формы frmStart есть такая процедура:
Private Sub Form_Open(Cancel As Integer) If flgEnabled = False Then DoCmd.Quit acPrompt End If End Sub
Как видно, если flgEnabled = False, то, стало быть, выход из приложения. Таким образом, и делается невозможность открытия формы без ввода пароля. Если аналогичные процедуры повесить на остальные формы, отчеты, то единственной лазейкой для "врагов" останутся только таблицы, у которых, к сожалению, нет никаких событий, которые можно бы было перехватить. Единственной защитой для них будет скрытие окна приложения и установка защиты от Shift. Очевидно, что такая авторизация эффективна лишь в том случае, когда "врагам" нет хода к исходному коду модулей, иными словами база преобразована в формат .mde. Вообще, основа любой защиты приложений Access – это .mde формат. Действительно, вздумай Вы защищать подобным образом .mdb, любой мог бы просто открыть модуль Constants и прописать там
Public Const flgEnabled = True
И все, никакой защиты. Защита шифрованием пароля будет зависеть от сложности шифрования. Я показал лишь простейший пример (модуль AdminPassword). Вообще, стоит поискать в Интернете, или попытаться придумать самому более хитрый (стойкий) алгоритм шифрования. Итак, проведем испытание: Запускаем приложение. Появляется форма авторизации. Вводим 123456, жмем ввод – открывается стартовая форма. Теперь попробуем открыть форму frmStart без ввода пароля. Запускаем приложение, удерживая Shift – открывается окно проекта Access. Пытаемся запустить frmStart – приложение закрывается. Если теперь добавить в нашу программу защиту от Shift, то приложение станет еще более «неприступным».
Используя защиту от Shift и вход через форму авторизации, можно здорово попортить нервы всем любителям лазить куда не следует. Но допустим, Вы решите установить (продать) свою программу кому - либо. Как сделать так, чтобы он не смог распространять ее без Вашего ведома? Иными словами, как организовать сервис регистрации программы? Об этом в следующей статье...
|