Запуск приложения через форму авторизации

Источник: Accessoft

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

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


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