Общая информация о графе показывает перечень узлов с метками и связей с типами, а также общее количество узлов и связей. При нажатии на метку или тип связи появляется контекстное меню, в котором можно изменить цвет, размер и подпись к узлу или связи.
Рис. 2.46. Изменение внешнего вида узла
Масштабирование
При выводе информации в виде графа в правом нижнем углу появляется управление масштабированием графа со следующими функциями:
● увеличение;
● уменьшение;
● выравнивание и отцентровка всего графа.
Рис. 2.47. Управление масштабом графа
Neo4j имеет большое количество различных плагинов, которые позволяют улучшить работу с запросами. В книге используется только базовый APOC, поэтому рассмотрим установку плагинов на его примере.
Зайдем на официальный GitHub neo4j с плагинами[10] и скачаем двоичный jar-файл apoc-4.4.0.1-all.jar. Поместим его в папку $NEO4J_HOME/plugins. В моем случае это C: \Tools\Neo4j\plugins.
Информация
Поскольку APOC использует внутренние API neo4j, необходимо использовать правильную версию APOC для вашей установки neo4j. APOC использует согласованную схему управления версиями: <neo4j-версия>.<apoc> версия. Завершающая часть номера версии <apoc> будет увеличиваться с каждым новым выпуском APOC.
Если сейчас мы перезагрузим neo4j и попытаемся воспользоваться процедурами из плагина, то получим ошибку.
Рис. 2.48. Ошибка некорректной настройки процедур
Чтобы исправить ее, нужно открыть файл конфигурации $NEO4J_HOME/conf/neo4j.conf на редактирование. Убрать комментарий со строки dbms.directories.plugins=plugins, затем найти строку dbms.security.procedures.unrestricted=…, после нее добавить строку dbms.security.procedures.unrestricted=algo.*, apoc.* и перезапустить службу:
C: \Tools\Neo4j\bin\neo4j.bat restart
В дальнейшем мы столкнемся с процедурами из этого плагина, а пока перейдем к другой теме.
Создание резервных копий полезно при переносе базы данных с одного компьютера на другой или при сохранении результатов проекта для будущих исследований. При дальнейшем изучении книги мы будем несколько раз обращаться к резервным копиям.
Чтобы создать резервную копию, нам необходимо остановить базу данных. Для этого перейдем в директорию $NEO4J_HOME/bin и выполним команду:
.\neo4j.bat stop
Если neo4j запущен в режиме консоли, то можно нажать Сtrl+С или просто закрыть окно.
Теперь создадим резервную копию текущей базы данных, указав имя базы данных neo4j и путь до файла резервной копии:
.\neo4j-admin.bat dump -database="neo4j" -to="c: \tools\neo4j.dump"
После успешного завершения создания резервной копии запустим neo4j:
.\neo4j.bat start
Рис. 2.49. Создание резервной копии
Процедура восстановления похожа на создание копий, изменяется только команда с dump на load. Останавливаем neo4j:
.\neo4j.bat stop
Выполняем команду восстановления данных из дампа, указав полный путь до файла дампа, созданного ранее:
.\neo4j-admin.bat load -database="neo4j" -from="c: \tools\neo4j.dump" -force
Стоит обратить внимание на использование ключа -force: в случае его отсутствия neo4j сообщит, что база данных neo4j уже существует.
Рис. 2.50. Сообщение об ошибке
После успешного восстановления из резервной копии запустим neo4j:
.\neo4j.bat start
Рис. 2.51. Успешное восстановление данных
03. Дрессируем собаку. Язык запросов Cypher
SharpHound, BloodHound и neo4j – это инструменты для сбора, хранения и визуализации информации. Основная магия – это язык запросов Cypher. В интернете можно найти уже готовые запросы и использовать их, но в дополнение к этому хорошо бы разбираться, как они работают, и уметь разрабатывать их самому. В этом разделе мы рассмотрим основные принципы построения запросов и синтаксис языка запросов Cypher.
Внимание
Данный раздел содержит только необходимую для работы с BloodHound информацию. Для более глубокого изучения языка запросов Cypher стоит обратиться к официальной документации[11].
Обычно результаты запросов представляются в виде графов, что удобно для обнаружения связей между объектами. В некоторых случаях данные могут представляться в виде таблиц, что удобно для анализа данных. В BloodHound объекты домена являются вершинами (узлами) графа, а отношения (связи) между этими объектами – ребрами. Также в neo4j узлы графа маркируются меткой (label) по общему принципу. Это позволяет делать выборку только из необходимой группы объектов. Названия связей определяются по типу (type).