Разработка онлайн-органайзера с использованием объектно-ориентированного подхода. Исследование 1 Методология проектирования информационных систем
Скачать 1.64 Mb.
|
2.4 Реализация базы данных2.4.1 Проектирование физической модели в Sybase PowerDesignerSybase PowerDesigner предоставляет пользователю удобный функционал для создание физических моделей данных. На основание созданной физической модели среда Sybase PowerDesigner генерирует SQL-запрос, адаптированной для выбранной СУБД. Основные компоненты физической модели: Таблица (Table) – содержит описание всех полей проектируемой таблицы; Связь (Reference) – описывает связи по полям между таблицами; Процедуры (Procedure) – содержит описание процедур для работы с будущей БД или являются напоминанием программисту о необходимости разработать процедуру, если работа над проектированием БД и её непосредственной реализацией ведётся двумя разными специалистами. [6] В приложении 2 представлена физическая модель базы данных программы-органайзера. В приложении 3 приведен полученный программно SQL-запрос на создание базы данных. 2.4.2 Разработка процедур и триггеров на стороне сервера с помощью pgAdmin IIIpgAdmin 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. |