Cypher: Условия фильтрации запроса. Часть первая
Пост получился большой поэтому разбит на две части.
В предыдущих постах уже использовалась фильтрация по меткам
User
и
Computer
и только в некоторых случаях этого будет достаточно. Для указания более точных критериев поиска используется ключевое слово
WHERE
. Ключевое слово
WHERE
может использоваться для всех свойств объекта.
Рассмотрим синтаксис условий на простых примерах.
Для точного вхождения используется оператор равно
=
. Могут приниматься булевы значения
false
и
true
. Например, найти всех членов группы администраторов домена:
MATCH (u:User)-[r:MemberOf*0..]->(g:Group) g.name = "DOMAIN ADMINS@DOMAIN.LOCAL" RETURN u.name
Оператор «не равно»
<>
- противоположен предыдущему оператору. Например, найти все компьютеры, которые не являются контроллерами домена:
MATCH (c:Computer)-[r:MemberOf]->(g:Group) WHERE g.name <> "DOMAIN CONTROLLERS@DOMAIN.LOCAL" RETURN c.name
Операторы «больше чем»
>
, «больше или равно»
>=
, «меньше чем»
<
и «меньше или равно»
<=
используются для сравнения чисел. В BloodHound, наверно, нет числовых значение, кроме результатов работы с датами или сложные запросы с использованием, но об этом в отдельной теме.
Оператор «не нулевое значение»
IS NOT NULL
проверяет наличие значения в свойстве. В качестве примера известная проверка непустого атрибута
Description
:
MATCH (u:User) WHERE u.description IS NOT NULL RETURN u.name
Оператор «нулевое значение»
IS NULL
– является противоположным предыдущему оператору. В качестве примера выполнить поиск потенциальных пресозданных машин, часто такие машины имеют пустой атрибут
operatingsystem
:
MATCH (c:Computer) WHERE c.operatingsystem IS NULL RETURN c.name
Оператор «содержит»
CONTAINS
проверяет наличие передаваемого значения в свойстве. Например, найти доменные группы в имени, которых встречается слово «DBA» (администраторы баз данных):
MATCH (g:Group) WHERE g.name CONTAINS "DBA" RETURN g.name
Оператор «начинается с»
STARTS WITH
позволяет указывать префикс для значения свойства. Имеет смысл использовать для свойств имени, например, найти все учетные записи с префиксом
ADM
:
MATCH (u:User) WHERE u.name STARTS WITH "ADM" RETURN u.name
Оператор «заканчивается на»
ENDS WITH
аналогичен предыдущему, но с указанием постфикса. Этот оператор удобно использовать для указания RID, например, вместо имени группы или если в базе есть результаты из нескольких доменов и нужны данные только из определенного. В качестве примера требуется подсчитать столько учетных записей пользователей есть в домене «CHILD.DOMAIN.LOCAL». Запрос в Cypher будет следующим:
MATCH (u:User) WHERE u.name ENDS WITH "CHILD.DOMAIN.LOCAL" RETURN count(u)
Продолжение следует…
#BloodHound #Cypher