Автор работы: Пользователь скрыл имя, 04 Сентября 2013 в 05:38, дипломная работа
Все эти проблемы позволяет решить разработанная мною система тестирования. Основное преимущество трёхзвенной структуры заключается в превосходной степени защиты (к базе данных нет прямого доступа из интернета, многоуровневая защита с различными алгоритмами шифрования).
Для проектирования и разработки базы данных использовались источники [1, 5, 6], для создания приложения тестирования [2, 3], а для обеспечения защиты данных [4, 7].
Введение 5
1 Теоретические основы 6
1.1 Постановка задачи6
1.2 Проектирование баз данных10
1.3 Среда Firebird как средство разработки СУБД14
1.4 Разработка интерфейса пользователя18
1.5 Выбор средств защиты информации22
2 Разработка и апробация проекта 26
Заключение 39
Список использованных источников 40
Приложение А (обязательное) Код программы 41
Существует единственный способ решить указанные вопросы: размещать базы данных и СУБД на собственных серверах, и предоставлять к ним доступ клиентам, например, через интернет и т.п. Возможности терминальных серверов (terminal servers) (Windows или Linux/Unix) так же можно использовать для реализации таких требований. Таким образом, есть контроль над базой данных, и можно ограничивать доступ к различным функциям и структурам баз данных, используя имеющиеся в СУБД Firebird методы обеспечения безопасности (роли, привилегии и т.д.).
В то время, как СУБД Firebird не предоставляет встроенных средств шифрования данных, существует несколько замечательных продуктов, чтобы это сделать. Можно установить программное обеспечение, которое создает защищенные тома (volumes) на компьютере, и мы разместим базы данных (и другие конфиденциальные данные) на этих томах. Когда компьютер выключен, все данные таких томов существуют в зашифрованном виде, и никто не сможете получить к ним доступ без ключа. При загрузке компьютера необходимо смонтировать (mount) защищенные тома и указать ключ для дешифрования, чтобы получить доступ к данным. Этот дополнительный, и, обязательно, собственноручный, шаг при запуске компьютера может быть неудобным, но он может обеспечить превосходную безопасность для «не сильно обслуживаемых» компьютерных систем. Непосредственно я использовал TrueCrypt, который может шифровать файлы базы данных 3 симметричными алгоритмами блочного шифрования с размером блока 128 бит и длиной ключа 256 бит: AES, Serpent и Twofish. Программным обеспечением с указанными функциями являются TrueCrypt, Bestcrypt от Jetico и PGPDisk. Альтернативой этому возможно было бы создание на клиентской стороне реализации механизма шифрования/дешифрования данных, но в таком случае у нас пропадает возможность добавлять эффективные индексы и использовать возможности поиска.
Рассмотрим TrueCrypt более детально. Все алгоритмы шифрования используют режим XTS, который более безопасен, нежели режимы CBC и LRW для шифрования «на лету», применяющиеся в предыдущих версиях (работа с уже созданными шифроконтейнерами в этих форматах также возможна).
Программа позволяет выбрать одну из трёх хеш-функций: HMAC-RIPEMD-160, HMAC-Whirlpool, HMAC-SHA-512 для генерации ключей шифрования, соли и ключа заголовка.
Для доступа к зашифрованным данным можно применять пароль (ключевую фразу), ключевые файлы (один или несколько) или их комбинации. В качестве ключевых файлов можно использовать любые доступные файлы на локальных, сетевых, съёмных дисках (при этом используются первые 1,048,576 байт) и генерировать свои собственные ключевые файлы.
Одна из примечательных возможностей TrueCrypt — обеспечение двух уровней правдоподобного отрицания наличия зашифрованных данных, необходимого в случае вынужденного открытия пароля пользователем:
Для шифрования трафика и его сжатия (в случаи больших объёмов передаваемых данных) мною была также использована программа ZeBeDee. Сжатие в которой осуществляется алгоритмами zlib или bzip2, а шифрование осуществляется алгоритмом Blowfish и Diffie-Hellman для согласования ключей. Т.к. нам нужна настоящая защита данных или метаданных базы данных, то нам необходимо сохранять контроль над файлом базы данных и над окружением, в котором происходит работа с этим файлом. Никакое другое решение не обеспечит такой же уровень безопасности.
ZeBeDee проста для понимания: сервер
ZeBeDee обрабатывает соединения от
клиентов ZeBeDee. Сервер шифрует данные,
сжимает их, и пересылает клиенту.
Клиент расшифровывает, распаковывает,
и пересылает данные программе.
ZeBeDee "вклинивается" в передачу
данных между двумя
Предполагается, что существует много удаленных клиентов, и клиент ZeBeDee будет один для всех. Это наиболее характерный случай при работе через Internet.
2. Разработка и апробация проекта
Не секрет,
что базы данных делятся на однопользовательские
и многопользовательские. В первом
варианте пользователь работает один
со своей базой данных, и может
делать с ней все что хочет.
При многопользовательском
Чтобы обеспечить
пользователей удобной работой
в многопользовательском
1. начинаем транзакцию
2. вносим изменения
3. пытаемся завершить транзакцию
a. Если завершить удалось, то все ОК
b. Если произошла ошибка, то отказываемся от всех изменений и сообщаем пользователю об обнаружении ошибки.
Этого золотого правила достаточно для написания любых клиент серверных приложений. Широко при этом используется язык SQL, конкретно нам понадобятся команды Select, Insert, Update, Delete, Drop, Add и другие.
Для администрирования
- зарегистрировать сервер;
- присоединиться к серверу;
- зарегистрировать (или создать заново) базу данных;
- присоединиться к базе данных;
На каждой машине регистрировать сервер и БД нужно только один раз. Зарегистрируем сервер и создадим базу данных утилитой FlameRobin.
Утилита FlameRobin предназначена для администрации баз данных в СУБД FireBird. Создание нового набора данных осуществляется с помощью пункта меню Database -> Create new database в соответствии с рисунком 3.
Рисунок 3 – Создание базы данных
На языке SQL создание новой базы данных осуществляется с помощью команды:
CREATE DATABASE 'E:\localhost\Курсовая2\
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251;
В IB 6 появилось несколько
В диалекте 3 не поддерживается автоматическая конвертация типов в выражениях. Например, если раньше в SQL можно было написать 1+'3' и получить ответ 4, то в диалекте 3 будет выдано сообщение об ошибке.
Поле ввода «Кодировка»
Теперь необходимо зарегистрировать базу данных в соответствии с рисунком 4.
Рисунок 4 – Регистрация базы данных.
Многие разделы формы
На языке SQL создание таблицы EXAMQUESTION описывается предложением:
CREATE TABLE EXAMQUESTION (
PK INTEGER NOT NULL,
THEME INTEGER NOT NULL,
TEXT VARCHAR(500),
PICTURE BLOB SUB_TYPE 0 SEGMENT SIZE 80,
COMMENTS VARCHAR(753));
Ввод данных выполняется с помощью INSERT языка SQL:
CREATE TABLE – команда создания запроса, дальше название таблицы, в скобках указываются параметры таблицы, потом скобка закрывается и обязательно ставится точка с запятой.
NOT NULL – означает что поле не может содержать пустых значений – если пользователь попытается сохранить значение NULL для, то произойдет ошибка на уровне СУБД, а обрабатывать вам эту ошибку в своей программе или нет, это уже ваше дело. Поле TEXT имеет текстовое значение. В Firebird оно обозначается как VARCHAR и в скобках указывается максимальное количество возможных символов.
Также здесь
мы указываем кодировку для
SET NAMES WIN1251;
Firebird автоматически определят уникальные индексы для первичных и внешних ключей таблицы. Индексы это механизм для улучшения быстродействия поиска данных. Индекс определяет столбцы которые могут быть использованы для эффективного поиска и сортировки в таблице. Таким образом создаются все таблицы нашей базы данных.
В Firebird нет такого типа как счетчик или autoincrement, выход из этой ситуации обеспечивается созданием, так называемого генератора. Генератор – это хранящаяся в базе данных программа, выдающая при каждом обращении к ней уникальное число. Для каждого автоинкрементного поля в базе данных создается свой генератор.
Пишем запрос:
CREATE GENERATOR GEN_EXAMQUESTION_ID;
Нажимаем выполнить. Мы создали генератор GEN_EXAMQUESTION_ID. Теперь нам надо установить начальное значение генератора, делается это следующим образом:
SET GENERATOR GEN_EXAMQUESTION_ID TO 0;
Теперь у нас есть генератор, с заданным начальным значением.
Теперь необходимо создать триггер
- это отдельная программа, ассоциированная
с таблицей или видом, которая
автоматически выполняет
Когда триггер вызван, он имеет
непосредвенный доступ к добавлению,
изменению или уничтожению
SET SQL DIALECT 3;
SET NAMES WIN1251;
SET TERM ^ ;
CREATE TRIGGER EXAMTR_SDTFDT FOR EXAMTR
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
New.lastdate = 'NOW';
end
SET TERM ; ^
CREATE TRIGGER – говорит, что мы хотим создать триггер – правило, далее указываем название триггера и для какой таблицы он будет предназначен (FOR EXAMTR).
Предложение ACTIVE BEFORE INSERT – указывает, когда триггер должен выполняться, в данном случае, каждый раз перед созданием новой записи. Слово AS – зарезервированное, открывает тело триггера. Тело триггера всегда (даже если триггер содержит единственный оператор – как в нашем случае) должно ограничиваться парой ключевых слов BEGIN – END.
После завершения разработки БД необходимо разработать два приложения: клиент и сервер, работающие через ориентированные на соединения сокеты:
Клиентская часть систем баз данных часто оформляется в виде прикладных программ (приложений). Для создания приложений баз данных в среде Delphi имеется набор компонентов IB.
Перейдем к созданию главной формы сервера. Напишем обработчик события OnFormCreate у основной формы приложения:
procedure TFmExamServer.FormCreate(
var Fname,tmpstr:string;
F: textfile;
begin
Stat[0]:= '';
Stat[1]:= 'ожидание ответа';
Stat[2]:= 'готово к старту';
Stat[3]:= 'идет экзамен';
Stat[4]:= 'просмотр результатов';
Stat[5]:= 'просмотр неправильных';
Stat[6]:= 'прервано администратором';
Stat[7]:= 'Завершено';
Try
IniFile:=TIniFile.Create(
Fname:=IniFile.ReadString('
tmpstr:=IniFile.ReadString('
IniFile.Free;
IBDatabase1.DatabaseName:=
IBDatabase1.Connected:=true;
IBDataSetEXAMtr.Open;
except
MessageDlg('Не удалось соединиться с базой данных', mtError, [mbOk], 0);
FmExamServer.close;
end;
ShowWorkPlases(-1);
end;
Создаваемое в среде Delphi приложения – «сервер» состоит из нескольких элементов, объединённых в проект. На главной форме в реальном времени отображаются подключенные рабочие станции. В поле «экзаменуемый» выводится ФИО – экзаменуемого. «Время» - время начала экзамена. «Статус» процесса показывает, что в данный момент происходит на рабочей станции.