LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)




































Выпуск 62. Материалы для начинающих (9 урок)

Подписка: "Access 2000 - программирование и готовые решения"
Дата:         02.02.2007
Автор:     Парусников Алексей
Сайт:        http://www.accessoft.ru под редакцией с http://www.leadersoft.ru/
Новые материалы: авторизация
На сайте AccesSoft публикуются статьи, посвященые вопросам, связанным с разработкой и продвижением приложений Access. Вы так же можете ознакомиться с готовыми программами, получить исходный код, купить программу, связаться с автором для решения вопроса о доработке программы под Ваши требования.



    
Данная статья ориентирована на начинающих разработчиков Access, желающих более углубленно изучить возможности программирования в Access и сделать свои приложения более профессиональными.

Вход в базу данных через форму авторизации .

     В этой статье рассмотрим один из способов защиты приложения Access. Речь пойдет о входе в базу через ввод пароля, или говоря иначе - авторизация. В Access предусмотрена возможность задать пароль на базу данных: Сервис – Защита – Задать пароль базы данных. Однако сам пароль хранится в системном реестре в незашифрованном виде, и чтобы открыть такую защищенную базу, достаточно лишь зайти в реестр и прочитать его. Мы же попробуем создать аналогичный интерфейс, но уже с зашифрованным паролем, причем сделаем так, чтобы при попытке открыть форму, если пользователю удалось войти в базу, минуя стартовую форму авторизации, база аварийно закрывалась.
Для этого нам понадобится в служебной таблице, например tAdminCop, завести поле Password, в котором будем хранить пароль, а так же модуль шифрования пароля – AdminPassword.
Схема авторизации следующая:

  1. При старте приложения запускается форма авторизации formAdmPassword, в которой вводим пароль
  2. Пароль считывается, шифруется и сравнивается с зашифрованным паролем в поле таблицы tAdminCop
  3. Если пароли совпадают, то открывается стартовая форма приложения, если нет – выход из приложения.

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

Как всегда, чтобы посмотреть, как все это работает, жмем на эту ссылку…


Ответы на вопросы
Вопрос 1. Я любитель, так что, пожалуйста, не бейте ногами. В поиске не нашел. Необходимо из одной формы вызвать SUB другой, знаю что это можно сделать, но не помню синтаксис вызова. Чтото вроде Call Forms![SubForm]!NAME_SUB, не могу ни вспомнить, ни подобрать методом тыка...
P. S. Перемещать все в модуль по определенным причинам не имеет смысла. Спасибо заранее.

Ответ. Forms![имя формы].имя процедуры Без всяких Call и т. п.

Вопрос 2. Добрый день!
Такая проблема есть подчиненная форма на основной кнопка с кодом для подчиненной формы. Код выполняется только для одной записи... как зделать чтоб для всех выбраных записей ???
  Ответ. Определить рекодсет (...Form.Recordset ) или его Clone (если не нужны зрительные эффекты) для подчиненной формы, далее пройтись по всем записям и провести для нужные изменения.
Вопрос 3. Добрый день
Подскажите пожалуста где можно подробнее почитать о выгрузке данных с Access в файл txt. Мне надо чтоб создавался фйл с данными например:
данные с поля 1 в промежутке с 1- 20 (длина столбца), Даные поля 2 в промежутке с 20-25.... и т.д.
  Ответ. Команда OutputTo выводит данные в текстовый формат

Вопрос 4. Добрый день
Подскажите как быть... Необходим запрос на выборку сумы "двойной с плавающей точкой" но он упорно отказывается выбирать !!!
Может необходимо както подругому ???
("SELECT * FROM [Oplata_MVKV_EXPORT] WHERE [SumaOplati]=" & Me.MySpisok& " ")
MySpisok - поле со списком ... в котором есть сума 100,30 и просто 100,00 где выбираем 100,00 то все работает где 100,30 ОШИБКА
Подскажите как разрешить проблему

  Ответ. Надо изменить точку: replace(Me.MySpisok,",",".") или replace(Me.MySpisok,".",",")
Вопрос 5. Как скопировать базу данных с Microsoft SQL Server 2005 на 2000
  Ответ. Когда копируются данные с 2000 сервера на 2005 проблем практически не возникает. Обратный процесс копированием невозможен, т.к. версии баз несовместимы. Вариант решения проблемы без репликаций.
1. Создайте пустую базу SQL 2000. В нее будем копировать данные из SQL 2005.
2. Откройте Microsoft SQL Server Management Studio и выберите базу данных.
3.Правой кнопкой выполните задачу создания скриптов: Tasks-Generate Scripts ...
4. Выберите флажок Script all objects in the selected database. Нажмите Next>
5. Установите в настройках скрипты версии SQL Server 2000. Нажмите Next>
6. Выберите Script to file. Нажмите Next>
7. Нажмите Finish и Close
Закройте менеджер и Microsoft Visual Studio
1. Создайте новый Business Intelligence Project - > Integration Services Project
2. Добавьте Execute T-SQL Statement Task мышкой из группы Maintence Plan Task
3. Правой кнопкой на поле Connection Managers выберите New ADO.net connection и New File Connection.
4. Выполните задачу по добавлению данных (правая кнопка)