Однажды автору этих строк было предложено создать программное обеспечение для работы с базой данных ORACLE. У заказчика имелась база данных (БД) и был налажен процесс пополнения этой БД данными.
Нужно было разработать программное обеспечение (п.о.), которое позволяло бы пользователям (клиентам) получать информацию из этой БД по запросам. При этом нужно было учитывать следующие обстоятельства:

  • Программное обеспечение должно быть ориентировано на пользователя с квалификацией оператора ПЭВМ и не обладающего знанием языка SQL.
  • Информация в БД считается строго конфиденциальной. Несанкционированный доступ к данным недопустим;
  • Пользователи должны получать доступ только к той части БД, которая им реально необходима и не должны знать реальную структуру обьектов БД и их взаимосвязи;
  • Для доступа к БД клиенты должны будут использовать медленные модемные соединения;
В этой статье автор рассматривает основные моменты, которые были использованы при работе над конкретным проектом, который удовлетворяет выше перечисленным условиям.

Выбор архитектуры программного обеспечения

Начиная работу над проектом мы рассматривали два возможных варианта архитектуры программного обеспечения - традиционный клиент-сервер и трехзвенная архитектура с сервером приложений. Рассмотрим характерные особенности каждого варианта:

Традиционный клиент-сервер:

Клиентское п.о. непосредственно взаимодействует с сервером ORACLE. Все алгоритмы бизнес-логики реализуются на клиенте. Эта схема требует дополнительной установки необходимого п.о. используемой СУБД (в данном случае ORACLE SQL Net).


Трехзвенная архитектура с использованием сервера приложений:

Эта схема гораздо гибче предыбущей. Здесь появляется промежуточный слой (сервер приложений), в котором реализуются все необходимые алгоритмы бизнес-логики приложения и выполняется непосредственное взаимодействие с СУБД. Клиенту отводится лишь роль организации интерфейса с конечным пользователем и функциональное взаимодействие с сервером приложений.
Таким образом в этом случае программное обеспечение разделяется на 2 взаимосвязанные части, которые работают на разных хостах: тонкий клиент - устанавливается у конечного пользователя и сервер приложений - устанавливается на хосте с которого доступна БД.

Проанализировав эти две схемы мы пришли к выводу, что оптимальным выбором для реализации является трехзвенная архитектура. Приведем основные доводы в пользу этого выбора:

Защита данных от несанкционированного доступа

Безусловно, для надежной защиты данных необходимо реализовать авторизованное подключение тонкого клиента к серверу приложений. Другими словами каждый клиент должен иметь имя и пароль, которые нужно указывать всякий раз перед началом работы (сразу заметим, что эти имя и пароль являются только ключем для подключения к серверу приложений, и не являются данными авторизации для подключения к СУБД).

Но надежна ли такая защита? - Думаю что нет. Автору не раз приходилось наблюдать забавную картину, когда пользователи вместо того, чтобы хранить данные авторизации в надежном месте, просто записывали их данные карандашем на клавиатуре, либо приклеивали скотчем на дисплей (видимо для того, чтобы не забыть). В случае утечки пароля появляется потенциальная возможность несанкционированного подключения к серверу приложений и как следствие - несанкционированный доступ к данным.

Что же делать? Есть ли решение данной проблемы? Идея пришла неожиданно. А что если привязать клиента с конкретным именем и паролем к конкретному рабочему месту? В нашем случае это можно сделать так:

На клиенте ведется счетчик подключений к серверу приложений. На сервере приложений в бюджете пользователя также ведется аналогичный счетчик. Перед каждой попыткой клиента подключиться к серверу приложений, сервер проверяет равенство своего и клиентского счетчиков. Если счетчики совпадают - клиент подключается к серверу, в противном случае доступ блокируется. После успешного подключения клиента к серверу счетчики на обоих хостах синхронно инкрементируются.

Рассмотрим ситуацию, когда с одними и теми же именем и паролем выполняется подключение к серверу приложений с разных хостов. Очевидно, что в этом случае для одного из хостов неизбежно произойдет рассогласование клиентского и серверных счетчиков и доступ будет заблокирован.

Таким образом было решено для защиты данных от несанкционированного доступа использовать авторизованное подключение клиента к серверу приложений с дополнительной его привязкой к конкретному рабочему месту.

Информационная модель данных

Коль скоро перед нами была поставлена задача создать п.о. для обычного оператора ПЭВМ, то нужно было решить вопрос об организации данных (информационной модели) в представлении конечного пользователя.

Мы считаем, что чем проще пользователь представляет себе организацию данных и чем меньше он знает об реальных обьектах БД, тем лучше. Действительно, зачем ему знать где и как хранится интересующая его информация, в каких таблицах, на каких серверах и т.д.? Все что нужно - это задать критерии поиска по нужной предметной области данных и быстро получить ответ в приемлемом виде.

Поэтому было решено организовать работу клиента по заранее подготовленным моделям данным - схемам. Для пользователя схема - это упрощенное формализованное представление какой-то определенной предметной области. Пусть это будет простым списком полей, по которым могут задаваться условия поиска информации в БД по конкретной предметной области.

Если на клиенте схема выглядит очень просто, то на сервере приложений совсем наоборот. Все обьекты БД (таблицы), представляющие предметную область схемы включаются в специальное описание, которое хранится на сервере приложений и используется им при обработке запросов от клиента. Такое описание должно содержать всю информацию об обьектах БД - описание таблиц и их полей, описание взаимосвязей таблиц, форматы выдаваемых данных и т.д.

Итоги

В результате работы над проектом был создан программный продукт DB Query, в котором были воплощены все вышеизложенные идеи. Программное обеспечение полностью написано на Delphi 5. Для реализации сервера приложений использована технология MIDAS компании Inprise. Доступ к данным реализован через BDE (Borland DataBase Engine), который является универсальным средством для работы практически со всеми ныне используемыми источниками данных.

Созданный нами продукт идеально подходит для компаний и фирм, которые имеют базы данных, и которые хотели бы предоставить пользователям простой, эффективный и надежный доступ к своим информационным ресурсам.

В настоящее время DB Query активно используется в ряде организаций в качестве основного средства для работы пользователей с серверами ORACLE и InterBase.

Успешный опыт эксплуатации данного продукта дает основания полагать, что DB Query является хорошим решением для организации доступа к различным базам данных.