3.2. Реализация модуля расшифровки картографической базы данных
PostgreSQL предоставляет возможность шифрования на разных уровнях, что позволяет защитить данные от кражи с сервера, недобросовестного администратора и небезопасной сети. Шифрование так же может использоваться для защиты конфиденциальных данных, таких как медицинская информация или финансовые транзакции. В работе были использованы лишь некоторые из имеющихся механизмов шифрования объектно-реляционной СУБД PostgreSQL.
Основу проекта составляет шифрование определённых колонок. Модуль pgcrypto позволяет шифровать определённые поля. Это полезно в случае, когда лишь некоторые данные не должны попасть в чужие руки. В нашем случае зашифрованными являются лишь столбцы типа geometry, которые представляют наибольшую ценность, так как содержат все географические данные. Клиенту предоставляется ключ для расшифровки, которым данные дешифруются и становятся «понятными» для ГИС. [4]
Таким образом, на сервере хранится таблица с преобразованным в текст и зашифрованным полем geom, которое хранит в себе все геометрические данные (см. Рис.17).

Первым делом предстоит расшифровать интересующий нас столбец. Для этого используется функция модуля pgcrypto — pgp_sym_decrypt. Для успешной расшифровки, необходимо указать тот же ключ, что использовался при зашифровке данных, поэтому для обеспечения надежной защиты данных, необходимо предотвращение попадания данного ключа посторонним лицам. В случае верного ввода ключа, произойдет расшифровка интересующего нас поля. Однако оно по-прежнему будет типа text (см. Рис.18).

Следующим шагом требуется преобразовать получившееся уже незашифрованное текстовое поле в геометрический тип данных. Это можно сделать используя геометрический конструктор PostgreSQL, а конкретно функцию ST_GeomfromEWKT.
Стоит отметить, что не следует все преобразования производить в одном столбце, так как если производить преобразование textàgeometry в столбце типа данных text, то преобразование не произойдет, поскольку для геометрического типа данных поле должно иметь тип geometry. Поэтому, используя стандартный SQL оператор ALTER TABLE ADD COLUMN, создается новое пустое поле нужного типа, в которое и записываются данные полученные при преобразовании (см. Рис.19).

Текстовое поле, после успешного проделывания всех операций можно удалить. Для этого используется стандартный SQL оператор ALTER TABLE DROP (см. Рис.20).

Блок-схема программы приведена в приложении 1. Листинг программы представлен в приложении 2.
3.3. Применение библиотеки TPL к разработанному программному проекту
Библиотека распараллеливания задач (TPL) усовершенствует многопоточное программирование двумя основными способами. Во-первых, она упрощает создание и применение многих потоков. И во-вторых, она позволяет автоматически использовать несколько процессоров. Иными словами, TPL открывает возможности для автоматического масштабирования приложений с целью эффективного использования ряда доступных процессоров.
Библиотека TPL определена в пространстве имен System.Threading.Tasks. Но для работы с ней, обычно, требуется также включать в программу класс System.Threading, поскольку он поддерживает синхронизацию и другие средства многопоточной обработки, в том числе и те, что входят в класс Interlocked.
Применяя TPL, параллелизм в программу можно ввести двумя основными способами. Первый из них называется параллелизмом данных. При таком подходе одна операция над совокупностью данных разбивается на два параллельно выполняемых потока или больше, в каждом из которых обрабатывается часть данных.
Второй способ ввода параллелизма называется параллелизмом задач. При таком подходе две операции или больше выполняются параллельно. [17]
Для удобства, предлагается возможность расшифровать сразу четыре таблицы (см. Рис.21). Ввиду того, что поля с геоданными могут быть очень громоздкими, в целях повышения производительности, а соответственно и уменьшения времени ожидания, в нашей работе было принято решение применить библиотеку TPL.

Так как при расшифровке таблицы применяются однотипные процедуры, используемый способ можно назвать своеобразным частным случаем параллелизма данных, при котором операции искусственно разделяются на четыре потока. Таким образом, при наличии у клиента четырехъядерного процессора, каждое ядро будет расшифровывать по одной таблице (при наличии иного числа ядер TPL автоматически распределит нагрузку между доступными ядрами в динамическом режиме), что должно привести к уменьшению времени работы программы.
Серия тестов программы на двухъядерном процессоре показало, что применение библиотеки TPL повышает производительность примерно в 2 раза (см. Рис.22,23).


Стоит учесть, что в результате применения библиотеки TPL, нагрузка на центральный процессор значительно возрастает (см. Рис.24,25).


Полный листинг программы с применением библиотеки TPL приведен в приложении 3.
3.4 Импорт картографической базы данных
Существует два способа импорта картографической базы данных из ГИС QGIS в объектно-реляционный СУБД PostgreSQL.
В первом случае таблицы картографической базы данных сначала сохраняются на жесткий диск пользователя, а лишь потом открываются в СУБД. Во втором же случае, требуемые данные открываются непосредственно в рабочей области QGIS.
3.4.1 Импорт с использованием менеджера БД
Для начала создается (см. Рис.26) и настраивается подключение QGIS с объектно-реляционной СУБД PostgreSQL.

В появившемся окне выбирается «Создать» для создания нового подключения (см. Рис.27).

Далее происходит настройка подключения (см. Рис.28). Необходимо указать следующие параметры:
- Имя: имя для данного соединения. Может совпадать с именем базы данных;
- Служба: Этот параметр может использоваться в качестве альтернативы для узла и порта (и, теоретически, базы данных). Настройка выполняется в файле pg_service.conf;
- Сервер: имя узла, на котором хранится база данных. Имя узла должно быть допустимым — таким, какие используют для сетевого доступа или для пинга узла. Если база данных находится на том же компьютере, что и QGIS, просто вводится localhost;
- Порт: номер порта, который «слушает» сервер базы данных PostgreSQL. По умолчанию используется порт 5432;
- База данных: имя базы данных;
- Режим SSL: настройка SSL-режима работы с сервером. Следует отметить, что значительного прироста скорости рендеринга слоя PostGIS можно достигнуть путём отключения SSL в менеджере соединений. Можно выбрать:
- запретить: использовать только не зашифрованное SSL-соединение,
- разрешить: будет произведена попытка установки не SSL-соединения, если она не удастся, будет использовано SSL-соединение,
- предпочитать (по умолчанию): будет произведена попытка установки SSL-соединения, если она не удастся, будет использовано не SSL-соединение,
- требовать: использовать только SSL-соединение;
- Пользователь: имя пользователя, которое используется для доступа к базе данных;
- Пароль: пароль, используемый вместе с именем пользователя для подключения к базе данных. [18]

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

После подключения, закрывается окно подключений и открывается инструмент «Менеджер БД» (см. Рис.30).

Рис.30. Запуск менеджера БД
С помощью инструмента «Менеджер БД» возможно экспортировать/импортировать данные между БД и QGIS. Под «Импортом» подразумевается импорт данных из QGIS в PostgreSQL, именно эта операция необходима в данной работе (см. Рис.31).

Далее предлагается назначить каталог сохранения выбранной таблицы (см. Рис.32).

После успешного сохранения данных на жестком диске появляется соответствующее сообщение (см. Рис.33).

После этого возможно открыть сохраненную таблицу в PostgreSQL.
3.4.2 Импорт данных без предварительного сохранения на жестком диске
В ГИС QGIS так же предусмотрена возможность добавления требуемых слоев, с помощью расширения PostGIS, без предварительного сохранения на жестком диске (см. Рис.34).

Для этого требуется так же, как и в первом случае, подключиться к PostgreSQL, после чего в появившемся окне выбрать требуемую таблицу и нажать «Добавить» (см. Рис.35).

После этого, выбранный слой отобразится в рабочей области ГИС приложения (см. Рис.36).

ЗАКЛЮЧЕНИЕ
В ходе работы поставленные цели были выполнены и решены следующие задачи:
- Раскрыта актуальность модуля импорта данных системы защиты картографических баз данных.
- Разработан алгоритм расшифровки данных.
- Организовано сетевое хранилище на базе объектно-реляционной СУБД PostgreSQL.
- Произведена установка и конфигурирование объектно-реляционной СУБД PostgreSQL для удаленного доступа к хранилищу.
- Импортирована картографическая база данных из ГИС QGIS.
- Разработан программный модуль доступа к серверу и дешифрования файлов.
- Применена библиотека TPL к разработанному программному проекту.
Для тестирования использовалась картографическая база данных Российской Федерации. Тестирование проводилось на одном узле с двумя ядрами на одном физическом процессоре.
По результатам работы я могу утверждать, что использование параллельного модуля запросов дает нам прирост в производительности. Используемая конфигурация предположительно не будет являться порогом масштабируемости для рассматриваемой системы. Следовательно, с увеличением количества процессоров и числа ядер на них предполагается дальнейшее повышение производительности.
СПИСОК ЛИТЕРАТУРЫ
- ArcGIS [Электронный ресурс] // ESRI. 2016. URL: https://www.arcgis.com/features.
- Mapinfo [Электронный ресурс] // Pitney Bowes. © 2016. URL: http://www.mapinfo.com.
- MySQL [Электронный ресурс] // Oracle Corporation. © 2016. URL: http://www.mysql.com.
- Pgcrypto [Электронный ресурс] // The PostgreSQL Global Development Group. © 1996-2016 URL: http://www.postgresql.org/docs/9.5/static/pgcrypto.
- PostgreSQL [Электронный ресурс] // The PostgreSQL Global Development Group. © 1996-2016 URL: http://www.postgresql.org.
- QGIS [Электронный ресурс] // Creative Commons Attribution-ShareAlike. © 2016. URL: http://www.qgis.org/ru/site.
- SQLite [Электронный ресурс] // SQLITE.ORG. © 2002-2014 URL: http://www.sqlite.org/docs.html.
- SQLite vs MySQL vs PostgreSQL: сравнение систем управления базами данных [Электронный ресурс] // DEVACADEMY. © 2016. URL: http://devacademy.ru/posts/sqlite-vs-mysql-vs-postgresql.
- Бабенко Л.К., Басан А.С., Журкин И.Г., Макаревич О.Б. Защита данных геоинформационных систем: учеб. Пособие для студентов вузов / Под ред. И.Г. Журкина. – М.: Гелиос АРВ, 2010. – 336 c.
- Бугаевский Л.М. Цветков В.Я. Геоинформационные системы: учебное пособие для ВУЗов. — М.: Златоуст, 2000. — 222с.
- Вершинин И.С., Гибадуллин Р.Ф., Пыстогов С.В. Использование кластерных технологий при решении задач защиты картографических данных // Высокопроизводительные параллельные вычисления на кластерных системах (НРС–2009): материалы IX Междунар. конф.; Владимир. гос. ун-т. – Владимир, 2009. – С. 68–72.
- Все о ГИС и их применении [Электронный ресурс] // GIStechnik. © 2012. URL: http://gistechnik.ru/publik.
- Географическая информационная система [Электронный ресурс] // Википедия. Дата обновления 22.04.2016. URL: http://ru.wikipedia.org/wiki/Географическая_информационная_система.
- Голубев И., Серов А. Защита цифровых карт с использованием электронных ключей HardLock [Электронный ресурс] //UcozServices. © 2016. URL: http://www.alex-serov.narod.ru/geo/articles/common/hardlock.htm.
- Дубин М. Geosample: Открытый набор геоданных для различного ПО ГИС [Электронный ресурс] // © GIS-Lab. 2002 – 2015. Дата обновления 15.05.2014. URL: http://gis-lab.info/qa/geosample.html.
- Основные сведения о типах пространственных данных [Электронный ресурс] // Microsoft Developer Network. © 2016. URL: http://msdn.microsoft.com/ru-ru/library/bb964711.aspx.
- Параллельное программирование [Электронный ресурс] // Alexandr Erohin. © 2011-2016 URL: http://professorweb.ru/my/csharp/thread_and_files/level2/2_1.php.
- Руководство пользователя QGIS [Электронный ресурс] // Creative Commons Attribution-ShareAlike. Дата обновления 04.12.2014. URL: http://docs.qgis.org/2.2/ru/docs/user_manual/index.
- Скляров Д. В. С43 Искусство защиты и взлома информации. — СПб.: БХВ-Петербург, 2004. — 288 с.
- Установка PostgreSQL [Электронный ресурс] // Виктор Вислобоков. © 2008-2010. URL: http://www.postgresql.org/docs/9.5/static/index.html.
- Цветков В.Я. Геоинформационные системы и технологии. — М.: Финансы и статистика, 1998. —288с.
- Ципилева Т.А. Геоинформационные системы: учебное пособие для студентов специальности «Государственное и муниципальное управление». — Томск.: Томский межвузовский центр дистанционного образования, 2010 — 121 с.
- Шаши Шекхар, Санжей Чаула Основы Пространственных баз данных (перевод с английского). — М.: КУДИЦ – Образ. 2004 — 330 с.
