【问题标题】:Neo4j - Reference a node in the properties of a relationshipNeo4j - 引用关系属性中的节点
【发布时间】:2020-04-09 18:45:23
【问题描述】:

我想知道两个节点之间的关系属性是否可以引用另一个节点。我正在尝试查看是否可以使用 Neo4j 可视化 Cisco ACL,所以我得到了一些如下所示的数据:

对象组网络 Server_Group_A

网络对象主机 1.2.3.4

网络对象主机 2.3.4.5

网络对象主机 3.4.5.6

对象组网络 Server_Group_B

网络对象主机 4.3.2.1

网络对象主机 5.4.3.2

网络对象主机 6.5.4.3

对象组服务 Port_Group_A tcp

端口对象 eq 80

端口对象 eq 443

access-list Some_Interface extended permit tcp object-group Server_Group_A object-group Server_Group_B object-group Port_Group_A

到目前为止,我一直在像这样构建 Cypher 中的所有内容:

(Server1:服务器{IP:'1.2.3.4'}),

...等等...

(Server_Group_A:ObjectGroup {Name:'Server_Group_A'}),

(Server_Group_B:ObjectGroup {Name:'Server_Group_B'}),

(Port_Group_A:PortGroup {Name:'Server_Group_B'}),

(Port_80:PortObject {Port:'80'}),

(Port_443:PortObject {Port:'443'}),

(Server1)-[:MemberOf]->(Server_Group_A)

...等等...

(Port_80)-[:MemberOf]->(Port_Group_A)

...等等...

在表达 Server_Group_A 和 Server_Group_B 之间的关系以匹配 ACL 时,我是否可以将 Port_Group_A 节点作为关系的属性之一?我已经尝试过了,但我得到了一个类型错误,这是我所期待的:

(Server_Group_A)-[:ConnectedTo {端口:[Port_Group_A]}]->(Server_Group_B)

如果这不可能以我希望的方式实现,是否有人对他们将如何处理这个问题有任何建议?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    属性值不能是节点。

    但它可能是节点的唯一标识符(例如,它的Name 属性,如果它是唯一的)。但要获得该节点需要更复杂的查询(并且可能效率较低)。

    相反,您可以通过将ConnectedTo 关系“具体化”为Connection 节点。例如:

    (Server_Group_A)-[:HAS_OUTPUT_CONNECTION]->(c:Connection)<-[:HAS_INPUT_CONNECTION]-(Server_Group_B)
    (c)-[:USES_PORT_GROUP]->(Port_Group_A])
    

    【讨论】:

    • 我也在考虑这种方法,利用一个单独的节点来连接所有东西来解决这个问题。我试一试,看看效果如何,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多