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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

Защита баз данных — это комплекс мероприятий для обеспечения безопасности информации, хранимой в базах данных, а также их конфиденциальности и целостности.[9]

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

– использование строгого (strict) режима

– обфускация доступа к СУБД (запутывание кода)

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

– разграничение прав доступа к файлам (обычно это значит, что только у пользователя «root» есть права для запуска и полноценной работы с СУБД, а у пользователей со специальным уровнем доступа есть доступ к их привилегиям)

– шифрование данных (защита передаваемых данных с помощью различных протоколов шифрования (например, SSL), а также использование алгоритмов шифрования (например, AES-256) для обеспечения безопасности важных данных)

– использование хранимых процедур, триггеров, функций

Также стоит отметить некоторые способы защиты данных, проходящие на стороне клиента. Из них можно выделить следующие:

– использование метода хеширования паролей

– применение параметризированных запросов

     – установление прав доступа к объектам базы данных

– шифрование данных и программ

– применение регулярных выражений (входные данные приводятся к одному шаблону)

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

Довольно часто возникает потребность получить информацию из базы данных по некоторому заданному значению «входных» данных (параметру) запроса. Такие запросы называют параметризированными.[10] Такой способ помогает справится с нарушителями, задействующими SQL-инъекции. SQL-инъекция – это атака, направленная на приложение (как правило, веб-приложение), в ходе которой конструируется SQL-выражение из пользовательского ввода путем простой конкатенации. В случае успеха, атакующий способен изменить логику выполнения SQL-запроса так, как это ему необходимо.

Еще одним хорошим методом, который помогает справиться с взломщиком, использующим SQL-инъекцию, является хранимая процедура. Хранимая процедура — объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. Хранимые процедуры очень похожи на обыкновенные процедуры языков высокого уровня, у них могут быть входные и выходные параметры и локальные переменные, в них могут производиться числовые вычисления и операции над символьными данными, результаты которых могут присваиваться переменным и параметрам. В хранимых процедурах могут выполняться стандартные операции с базами данных (как DDL, так и DML). Кроме того, в хранимых процедурах возможны циклы и ветвления, то есть в них могут использоваться инструкции управления процессом исполнения.[11]

Но, что, если нарушитель получил доступ к базе данных. Что делать в данном случае? Во-первых, стоит узнать информацию о том, в каком виде хранятся пароли. Если они были незашифрованы, взломщику станут доступны пароли в открытом виде, и он может запросто уничтожить все данные, которые хранились в базе данных. Такого допускать нельзя! В таком случае, необходимо предусмотреть возможность хеширования паролей. Простыми словами, хэширование означает ввод информации любой длины и размера в исходной строке и выдачу результата фиксированной длины, заданной алгоритмом функции хэширования. Т.к. для реализации данного проекта была выбрана среда разработки Microsoft Visual Studio и язык программирования C#, то в стандартной библиотеке уже предусмотрен класс Cryptography для защиты данных. Чтобы обеспечить безопасность хранения паролей был использована функция SHA1 (Secure Hash Algorithm 1). Она отвечает за вычисление хэша для входных данных с помощью алгоритма криптографического хеширования. Т.е. происходит трансформация строки с паролем в хешированную строку. Например, когда пользователь будет использовать пароль «user123», то хешированная строка будет выглядеть следующим образом «95c946bf622ef93b0a211cd0fd028dfdfcf7e39e». Такую строку невозможно вернуть к исходному значению. Хотя, теоретически, существует очень низкая вероятность получить два одинаковых хешированных значения с двумя разными входными значениями. Но это редкость. Также, если взломщиком была получена сгенерированная база данных с 10 миллионами случайных паролей (наиболее часто используемые), он может легко найти в своей базе туже хешированную строку «95c946bf622ef93b0a211cd0fd028dfdfcf7e39e». К сожалению, совпадение происходит очень часто. Другая проблема при применении данного подхода, заключается в том, что два пользователя с одним и тем же паролем будут иметь одинаковый хешированный пароль. Это может стать угрозой для безопасности базы данных. К счастью, этого можно избежать. Все, что необходимо сделать для решения данной проблемы, это использовать некую уникальную строку, которая будет задействована при хешировании паролей. Часто такую строку называют «солью пароля» или «криптографической солью». В нашем случае «соль» будет статической (одна и та же для всех входных значений). В этом нам снова поможет стандартная библиотека с классом Guid (Global Unique ID). Строка, сгенерированная при помощи Guid, будет хранится в отдельном поле User_Guid, чтобы ее можно было использовать при аутентификации пользователя. Далее, когда пользователь станет регистрироваться или будет заходить в приложение, произойдет генерация пароля в хешированную строку путем ее конкатенации с уникальным глобальным идентификатором, что и будет являтся новым паролем пользователя. Теперь наши данные в безопасности.

Разработанные запросы

Во время реализации данного проекта были разработаны запросы, которые можно разделить по следующим категориям:

1) Запросы с подзапросами

Формулировка запроса:

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

SQL-скрипт запроса:

SELECT ID_Type_of_Computer_Component, Manufacturer_Country, Price FROM computer_components WHERE Price IN (SELECT max(Price) WHERE Manufacturer_Country = 'Тайвань' AND ID_Type_of_Computer_Component = '1100');

Формулировка запроса:

Выбрать заказанный комплектующий со сроком гарантии в 24 месяца.

SQL-скрипт запроса:

SELECT * FROM orders WHERE Order_ID IN (SELECT Computer_Component_ID FROM computer_components WHERE Warranty_Period = '24');

2) Запросы на добавление

Формулировка запроса:

Добавить нового сотрудника с должностью Инженер по ремонту и обслуживанию оборудования.

SQL-скрипт запроса:

INSERT employees(Employee_Full_Name, Date_of_Birth, Gender, Address, Employee_Phone_Number, Passport, ID_Employment)

VALUES('Шишкин Владимир Николаевич', '1985-05-17', 'male', 'Пушкин, ул. Маяковского 21', '89640546587', 'ВГАБД72394', '300');

Формулировка запроса:

Добавить новый комплектующий.

SQL-скрипт запроса:

INSERT computer_components(ID_Type_of_Computer_Component, Brand, Manufacturer_Company, Manufacturer_Country, Release_Date, Specifications, Warranty_Period, Computer_Component_Description, Price)

VALUES ('2200', 'Core i5 9600K', 'Intel', 'США', '2018-10-19', 'Технология производства - 14 нм. Количество ядер - 6. Количество потоков - 6. Базовая частота - 3.7 Ггц. Тепловыделение - 95 Вт.', '36', 'Совместимый только с материнскими платами на базе чипсетов 300 серии, шестиъядерный процессор с сокетом LGA 1151 Core i5-9600K и тактовой частотой 3,7 ГГц от Intel предназначен для игр, творчества и повышения производительности.', '17000');

3) Запросы на удаление

Формулировка запроса:

Уволить сотрудника «Шишкин Владимир Николаевич».

SQL-скрипт запроса:

delete from employees

where Employee_ID = 6;

Формулировка запроса:

Удалить из БД покупателя «Попова Алена Алексеевна».

SQL-скрипт запроса:

delete from customers

where Customer_ID = 3;

4) Запросы на изменение

Формулировка запроса:

Изменить название должности и зарплату сотрудника.

SQL-скрипт запроса:

update employment

set Employment_Name = 'Директор', Salary = '250000'

where ID_Employment = '100';

Формулировка запроса:

Изменить адрес сотрудника.

SQL-скрипт запроса:

update employees

set Address = 'Калининград, ул. Советская, 6'

where Employee_ID = '4';

5) Запросы с использованием статистических функций

Формулировка запроса:

Выбрать случайного покупателя.

SQL-скрипт запроса:

select * from customers

order by rand()

limit 1;

Формулировка запроса:

Вывести среднемесячную и среднегодовую зарплату.

SQL-скрипт запроса:

select avg(Salary) as 'Среднемесячная', avg(12 * Salary) as 'Среднегодовая'

from employment;

6) Запросы с использованием строковых функций.

Формулировка запроса:

Вывести адрес и фамилию сотрудников мужского пола.

SQL-скрипт запроса:

select concat_ws(',', Employee_Full_Name, Address, Gender) as 'Address', substring_index(Employee_Full_Name, ' ', 1) as 'Last Name' from employees

where Gender = 'male';

Формулировка запроса:

Вывести название компании-изготовителя комплектующих, марку.

SQL-скрипт запроса:

select concat_ws(' ', Manufacturer_Company, Brand) as 'Комплектующие' from computer_components;

7) Запросы с использованием функций работы с датой и временем.

Формулировка запроса:

Вывести дату рождения сотрудников в формате День, Месяц, Год.

SQL-скрипт запроса:

select DATE_FORMAT(Date_of_Birth, '%d.%m.%Y') as 'Дата рождения' from employees;

Формулировка запроса:

Вывести день недели из одной даты заказа как «День заказа».

SQL-скрипт запроса:

select dayname(Order_Datе) as 'День заказа' from orders

where Order_ID = '2';



Поделиться:


Последнее изменение этой страницы: 2020-11-11; просмотров: 95; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.243.184 (0.036 с.)