你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

make-graph 运算符

适用于:✅✅Azure 数据资源管理器Azure Monitor✅ Sentinel

make-graph 运算符根据边和节点的表格输入生成图形结构。

语法

Edges|make-graphSourceNodeId-->TargetNodeId [ withNodes1onNodeId1 [,Nodes2onNodeId2 ]]

Edges|make-graphSourceNodeId-->TargetNodeId [ with_node_id=DefaultNodeId ]

参数

客户 类型​​ 必需 说明
Edges string ✔️ 包含图形边的表格源,每一行表示图形中的边。
SourceNodeId string ✔️ Edges 中包含边的源节点 ID 的列。
TargetNodeId string ✔️ Edges 中包含边的目标节点 ID 的列。
节点 string 包含图形中节点属性的表格表达式。
NodesId string Nodes 中包含节点 ID 的列。
DefaultNodeId string 默认节点 ID 的列的名称。

返回

make-graph 运算符返回图形表达式,并且必须后跟图形运算符。 源 Edges 表达式中的每一行都会成为图形的一个边,其中包含作为行的列值的属性。 节点表格表达式中的每一行都会成为图形中的一个节点,其中包含作为行的列值的属性。 出现在 Edges 表中但在节点表中没有相应行的节点将被创建为具有相应节点 ID 和空属性的节点。

注意

每个节点都有唯一标识符。 如果 Nodes1Nodes2 表中都显示相同的节点 ID,则通过合并其属性来创建单个节点。 如果同一节点的属性值存在冲突,则任意选择其中一个值。

用户可以通过以下方式处理节点信息:

  1. 不需要节点信息:make-graph 使用源和目标完成。
  2. 显式节点属性:最多使用两个表格表达式,使用“withNodes1onNodeId1 [,Nodes2onNodeId2 ]”。
  3. 默认节点标识符:使用“with_node_id=DefaultNodeId”。

示例

边缘和节点图形

以下示例从边和节点表生成图形。 节点表示人员和系统,边表示节点之间的不同关系。 make-graph 运算符生成图形。 然后,graph-match 运算符与图形模式一起使用,以搜索导致 "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

输出

攻击者 已泄露 系统
Mallory Bob Trent

默认节点标识符

以下示例仅使用边生成图形,并将 name 属性用作默认节点标识符。 从边的表格表达式创建图形时,这种方法很有用,可以确保节点标识符对后续 graph-match 运算符的约束部分可用。

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

输出

攻击者 已泄露 系统
Mallory Bob Trent