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