Udostępnij za pośrednictwem


operator make-graph

Dotyczy: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Operator make-graph tworzy strukturę grafu na podstawie tabelarycznych danych wejściowych krawędzi i węzłów.

Składnia

Edges SourceNodeId TargetNodeId --> [ with Węzły1 make-graph | on NodeId1 [ , Węzły2 on NodeId2 ]]

Edges | make-graph SourceNodeId TargetNodeId --> [ with_node_id= DefaultNodeId ]

Parametry

Nazwisko Type Wymagania opis
Krawędzie string ✔️ Źródło tabelaryczne zawierające krawędzie grafu, każdy wiersz reprezentuje krawędź na grafie.
Identyfikator węzła źródłowego string ✔️ Kolumna w krawędziach z identyfikatorami węzłów źródłowych krawędzi.
TargetNodeId string ✔️ Kolumna w krawędziach z identyfikatorami węzłów docelowych krawędzi.
Węzły string Wyrażenia tabelaryczne zawierające właściwości węzłów na grafie.
Identyfikator węzłów string Kolumny z identyfikatorami węzłów w węzłach.
DefaultNodeId string Nazwa kolumny domyślnego identyfikatora węzła.

Zwraca

Operator make-graph zwraca wyrażenie grafu i musi być zgodny z operatorem grafu. Każdy wiersz w wyrażeniu krawędzi źródłowych staje się krawędzią na grafie z właściwościami, które są wartościami kolumn wiersza. Każdy wiersz w wyrażeniu tabelarycznym Węzły staje się węzłem na grafie z właściwościami, które są wartościami kolumn wiersza. Węzły, które są wyświetlane w tabeli Edges, ale nie mają odpowiedniego wiersza w tabeli Węzły, są tworzone jako węzły z odpowiednim identyfikatorem węzła i pustymi właściwościami.

Uwaga

Każdy węzeł ma unikatowy identyfikator. Jeśli ten sam identyfikator węzła pojawi się w tabelach Node1 i Nodes2 , jeden węzeł jest tworzony przez scalenie ich właściwości. Jeśli występują konflikty wartości właściwości dla tego samego węzła, jedna z wartości jest dowolnie wybierana.

Użytkownicy mogą obsługiwać informacje o węźle w następujący sposób:

  1. Brak wymaganych informacji o węźle: make-graph kończy się elementem źródłowym i docelowym.
  2. Jawne właściwości węzła: użyj maksymalnie dwóch wyrażeń tabelarycznych przy użyciu węzłów "withNodeId11 on [,Węzły2 on NodeId2]."
  3. Domyślny identyfikator węzła: użyj wartości "with_node_id=DefaultNodeId".

Przykład

Wykres krawędzi i węzłów

Poniższy przykład tworzy graf z tabel krawędzi i węzłów. Węzły reprezentują osoby i systemy, a krawędzie reprezentują różne relacje między węzłami. Operator make-graph tworzy graf. graph-match Następnie operator jest używany ze wzorcem grafu do wyszukiwania ścieżek ataku prowadzących do węzła systemowego"Trent".

let nodes = datatable(name:string, type:string, age:int) 
[ 
  "Alice", "Person", 23,  
  "Bob", "Person", 31,  
  "Eve", "Person", 17,  
  "Mallory", "Person", 29,  
  "Trent", "System", 99 
]; 
let edges = datatable(source:string, destination:string, edge_type:string) 
[ 
  "Alice", "Bob", "communicatesWith",  
  "Alice", "Trent", "trusts",  
  "Bob", "Trent", "hasPermission",  
  "Eve", "Alice", "attacks",  
  "Mallory", "Alice", "attacks",  
  "Mallory", "Bob", "attacks"  
]; 
edges 
| make-graph source --> destination with nodes on name 
| graph-match (mallory)-[attacks]->(compromised)-[hasPermission]->(trent) 
  where mallory.name == "Mallory" and trent.name == "Trent" and attacks.edge_type == "attacks" and hasPermission.edge_type == "hasPermission" 
  project Attacker = mallory.name, Compromised = compromised.name, System = trent.name

Wyjście

Osoba atakująca Zagrożone System
Mallory Robert Trent

Domyślny identyfikator węzła

Poniższy przykład tworzy graf przy użyciu tylko krawędzi z name właściwością jako domyślnym identyfikatorem węzła. Takie podejście jest przydatne podczas tworzenia grafu na podstawie tabelarycznego wyrażenia krawędzi, zapewniając, że identyfikator węzła jest dostępny dla sekcji ograniczeń kolejnego graph-match operatora.

let edges = datatable(source:string, destination:string, edge_type:string) 
[ 
  "Alice", "Bob", "communicatesWith",  
  "Alice", "Trent", "trusts",  
  "Bob", "Trent", "hasPermission",  
  "Eve", "Alice", "attacks",  
  "Mallory", "Alice", "attacks",  
  "Mallory", "Bob", "attacks"  
]; 
edges 
| make-graph source --> destination with_node_id=name
| graph-match (mallory)-[attacks]->(compromised)-[hasPermission]->(trent) 
  where mallory.name == "Mallory" and trent.name == "Trent" and attacks.edge_type == "attacks" and hasPermission.edge_type == "hasPermission" 
  project Attacker = mallory.name, Compromised = compromised.name, System = trent.name

Wyjście

Osoba atakująca Zagrożone System
Mallory Robert Trent