2016-12-12 2 views
0

Итак, я собираюсь предисловие к этому, что я являюсь суммой базы данных. У меня есть 0 опыт работы с любыми формами баз данных, поэтому я знаю, что у меня в голове.Построить realtionships в NEO4J

Справочная информация. Я консультирую Active Directory для своей компании, поэтому регулярно просматриваю членство в группе клиентов в их активных учетных записях. В настоящее время у меня есть сценарий PowerShell, который будет запускать мою аналитику, однако я обнаружил, что в крупных организациях он слишком длительный. Я думаю: «Должен быть лучший способ», поэтому я вскочил на поиск баз данных. NEO4J, по-видимому, является хорошим возможным решением, поскольку я должен уметь связывать учетную запись пользователя или группу как член другой группы. Однако после просмотра документации и форумов я понятия не имею, как создавать эти ссылки.

У меня есть два томов CSV, что я успешно импортированы со следующей информацией:

Пользователи = DistinguishedName, SamAccountName, MemberOf

Группы = DistinguishedName, SamAccountName, MemberOf, Пользователи

что я хочу do соответствует строке от всех пользователей и групп (DistinguishedName) до строки в свойстве членов группы. Члены - это объединенная строка всех DistinguishedName (будь то пользователь или группа). Таким образом, если узел с DistinguishedName соответствует часть строки в собственности какой-либо группы в «члены», я хочу, чтобы построить один способ отношения к так:

пользователь - [memberof] -> группа

Лучшее, что я может наберешь мой мозг на это следующий код, но я понятия не имею, если я даже близко:

Match(n) 
    Match(u:user) WHERE n.Members CONTAINS u.DN 
    Create (u)-[MS:Memberof]->((match)}) 

в PowerShell, я знаю, как бы сделать это (в вольном переводе относиться к Neo4j мира):

$groups = (all-groups) 
    $AllUsersAndGroups = (all-objs) 
    foreach ($line in $groups) { 
    $line.relationship = $line | where {$_.members -contains $AllUsersAndGrups.DistinguishedName} 
    } 

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

ответ

1

Вот пример того, как вы должны быть импортированы ваши данные (уведомление о том, что избыточная Members колонна на самом деле не нужны):

  • Импорт (в партиях от 5000, чтобы избежать проблем с ресурсами) для каждого пользователя и создать уникальные отношения к своей группе:

    USING PERIODIC COMMIT 5000 
    LOAD CSV WITH HEADERS FROM "file:///users.csv" AS u 
    MERGE (u:User {DistinguishedName: u.DistinguishedName, SAMACCOUNTNAME: u.SAMACCOUNTNAME}) 
    MERGE (g:Group {DistinguishedName: u.MemberOf}) 
    MERGE (u)-[:Memberof]->(g); 
    
  • Импорт каждой группы, а также создавать уникальные отношения к своей родительской группы, если таковые имеются:

    USING PERIODIC COMMIT 5000 
    LOAD CSV WITH HEADERS FROM "file:///groups.csv" AS g1 
    MERGE (:Group {DistinguishedName: g1.DistinguishedName, SAMACCOUNTNAME: g1.SAMACCOUNTNAME}) 
    MERGE (g2:Group {DistinguishedName: g1.MemberOf}) 
    MERGE (g1)-[:Memberof]->(g2); 
    
+0

Извините, что ответила на это поздно. Это отлично поработало. Благодаря! –

Смежные вопросы