Главная страница

Разработка онлайн-органайзера с использованием объектно-ориентированного подхода. Исследование 1 Методология проектирования информационных систем


Скачать 1.64 Mb.
НазваниеИсследование 1 Методология проектирования информационных систем
АнкорРазработка онлайн-органайзера с использованием объектно-ориентированного подхода
Дата25.05.2022
Размер1.64 Mb.
Формат файлаrtf
Имя файла132640.rtf
ТипИсследование
#550069
страница8 из 19
1   ...   4   5   6   7   8   9   10   11   ...   19


2.4 Реализация базы данных


2.4.1 Проектирование физической модели в Sybase PowerDesigner


Sybase PowerDesigner предоставляет пользователю удобный функционал для создание физических моделей данных. На основание созданной физической модели среда Sybase PowerDesigner генерирует SQL-запрос, адаптированной для выбранной СУБД. Основные компоненты физической модели:

  • Таблица (Table) – содержит описание всех полей проектируемой таблицы;

  • Связь (Reference) – описывает связи по полям между таблицами;

  • Процедуры (Procedure) – содержит описание процедур для работы с будущей БД или являются напоминанием программисту о необходимости разработать процедуру, если работа над проектированием БД и её непосредственной реализацией ведётся двумя разными специалистами. [6]

В приложении 2 представлена физическая модель базы данных программы-органайзера.

В приложении 3 приведен полученный программно SQL-запрос на создание базы данных.


2.4.2 Разработка процедур и триггеров на стороне сервера с помощью pgAdmin III


pgAdmin III – является основным средством для разработки и администрирования баз данных PostgreSQL. В данном проекте вся работа по созданию таблиц и связей базы данных была проведена с помощью пакета Sybase PowerDesigner и дополнительная разработка в этом направлении не потребовалась. Разработка хранимых процедур и тригеров велась с помощью pgAdmin III на языке PL/pgSQL.

Язык PL/pgSQL (Procedural Language/PostGres Structured Query Language) — процедурное расширение языка SQL, используемое в СУБД PostgreSQL. Этот язык предназначен для написания функций, триггеров и правил и обладает следующими особенностями:

  • добавляет управляющие конструкции к стандарту SQL;

  • допускает сложные вычисления;

  • может использовать все объекты баз данных, определенные пользователем;

  • прост в использовании.

Также PL/pgSQL обладает рядом преимуществ перед SQL, это связанно с тем, что возможно выполнять сложную обработку данных с минимальным трафиком от клиента к серверу, что, в рамках данного дипломного проекта, является неоспоримым преимуществом, так как все действия пользователя связанны с посылкой запросов к серверу. Объясняется эта особенность следующим: SQL используется в PostgreSQL и других реляционных БД как основной язык для создания запросов. Он переносим и прост, как для изучения, так и для использования. Однако слабое его место — в том, что каждая конструкция языка выполняется сервером отдельно. Это значит, что клиентское приложение должно отправлять каждый запрос серверу, получить его результат, определенным образом согласно логике приложения обработать его, посылать следующий запрос и так далее.

При использовании PL/pgSQL появляется возможность сгруппировать запросы и вычислительные блоки в единую конструкцию, которая будет размещаться и выполняться на сервере, а клиент будет отправлять запрос на её выполнение и получать результат, минуя все промежуточные пересылки данных, что в большинстве случаев очень положительно сказывается на производительности.

Программный код, разработанный на PL/pgSQL, легко читаем и для не специалиста в области PostgreSQL, что также является достоинством языка. Это связанно с тем, что любая программная конструкция (функция, триггер или правило), написанная на PL/pgSQL, имеет блочную компоновку и выглядит вот так:
[ <<метка>> ]

[ DECLARE

объявления переменных ]

BEGIN

тело программы

END [ метка ]; [5]
Разработка программного кода в среде pgAdmin III удобна для разработчика благодаря встроенному редактору с подсветкой синтаксиса.

Также, стоит отметить, что PostgreSQL позволяет вести разработку и на других языках программирования:

  • PL/Perl;

  • plPHP;

  • PL/Python;

  • C;

  • C++;

  • Java (через модуль PL/Java);

  • И некоторых других, менее популярных языках.

В качестве примера функции разработанной на языке PL\PgSQL приведена функция аутентификации пользователя в системе. Работа с ней осуществляется следующим образом: клиентское приложения, после заполнения пользователем полей «Логин» и «Пароль» на форме аутентификации и подтверждения пользователем ввода, отсылает на сервер запрос: SELECT "Login_user"(‘Введенный логин’,'MD5 Hash взятый от введенного пароля'); , после чего сервер возвращает клиентскому приложению : -1 – если такой пары в системе не зарегистрировано, уникальный идентификатор пользователя – если пара обнаружена.

-- Function: "Login_user"(character varying, character varying)
CREATE OR REPLACE FUNCTION "Login_user"(character varying, character varying)

RETURNS integer AS

$BODY$DECLARE

logi ALIAS FOR $1;

passw ALIAS FOR $2;

collision users%ROWTYPE;

BEGIN

SELECT INTO collision * FROM users WHERE (logi = accountname)AND(passw = pass);

IF collision IS NULL THEN

RETURN -1;

END IF;

RETURN collision.uid;

END;$BODY$

LANGUAGE 'plpgsql' VOLATILE

SECURITY DEFINER

COST 100;

ALTER FUNCTION "Login_user"(character varying, character varying) OWNER TO postgres;

GRANT EXECUTE ON FUNCTION "Login_user"(character varying, character varying) TO public;

GRANT EXECUTE ON FUNCTION "Login_user"(character varying, character varying) TO postgres;

2.4.3 Обеспечение безопасности доступа к данным на стороне сервера


PostgreSQL позволяет регистрировать не оговоренное спецификацией число пользователей.[5] В связи с этим было бы не рационально создавать для каждого пользователя системы новую учетную запись на сервере. Возникает следующая проблема: поскольку имеет место обмен данным в незашифрованном виде по открытым каналам связи, злоумышленники могут перехватить сообщения, идущие от клиентского приложения к серверу базы данных и получить идентификаторы доступа к базе данных. В данном дипломном проекте реализовано следующее решение: по каналам связи никогда не передаются данные о учетной записи администратора базы данных, эта информация держится в секрете и известна лишь ограниченному кругу лиц. Пользователи, с помощью клиентского приложения, подключаются к базе данных через ограниченные учётные записи, у которых нет доступа к созданию/чтению/модификации/удалению таблиц/записей/функций/триггеров/пользователей. Эти учетные записи имеют доступ лишь к разработанным администратором базы данных функциям, то есть могут взаимодействовать с базой данных лишь заранее определённым образом. [6]

В качестве примера приведена учетная запись использующаяся для работы с базой данных на этапе регистрации нового пользователя или аутентификации уже существующего.
CREATE USER authreg_user WITH PASSWORD 'authreg_UsEr_paSSworD';

GRANT EXECUTE ON FUNCTION "Login_user"(character varying, character varying) TO authreg_user;

GRANT EXECUTE ON FUNCTION "Add_user"(character varying, character varying, character varying, character varying) TO authreg_user;

Если не включить в функции Login_user и Add_user параметр SECURITY DEFINER, то пользователь authreg_user не сможет исполнить эти функции, т.к. они обращаются к таблицам, на которые он не имеет прав. Параметр SECURITY DEFINER определяет, что функция будет исполняться с правами уровня создателя. Никакой угрозы безопасности это не создает.

В данном дипломном проекте реализовано 3 пользователя :

  • Admin_usr – обладает всеми правами, эта роль никогда не используется в клиентском приложении;

  • authreg_user – обладает правами на Login_user и Add_user функции;

  • defined_user - обладает правами на Get_usr_notes, Add_usr_note, Del_usr_note, Get_usr_group, Add_usr_group, Del_usr_group, Get_usr_tasks, Add_usr_tasks, Del_usr_tasks, Get_usr_cont, Add_usr_cont, Del_usr_cont, Get_usr_event, Add_usr_event, Del_usr_event.

Функция Login_user (login, md5_hash(pass)) – отвечает за аутентификацию, Add_user (login, md5_hash(pass),SMS_Number,Email) – добавляет пользователя в систему, группа функций Get_usr_ (uid) – возвращает все записи категории принадлежащие пользователю с указанным UID – уникальный идентификатор пользователя, группа функций Add_usr_ (uid,id,<информация по полям>) – добавляет (если id=0) или изменяет запись в таблице, группа функций Del_usr_ (uid,id) – удаляет запись категории принадлежащую пользователю с указанным UID и имеющую указанный ID.
1   ...   4   5   6   7   8   9   10   11   ...   19


написать администратору сайта