教程:使用Memgraph可视化身份和访问管理数据集#

本笔记本展示了如何使用Graphistry来可视化Memgraph中的数据,以公司身份和访问管理记录的样本数据集为例。我们将演示Graphistry如何简化Cypher查询的可视化,使得分析Memgraph中丰富且可能庞大的数据变得更加容易和有效。

关于数据集#

身份和访问管理(IAM)概述了谁可以访问什么、为什么以及何时访问。每个组织的独特身份和结构决定了访问管理的方式,形成了公司的IAM。如果当前的IAM系统变得缓慢且无响应——无法处理团队角色和权限的变化——图数据库是一个领先的解决方案。

关于Graphistry#

Graphistry 是一个视觉图AI平台,具有丰富的点击式视觉分析和端到端GPU加速功能,用于探索和分析多种关系。OSS PyGraphistry 库能够快速可视化来自Memgraph的大数据,并提供了一个丰富且易于使用的以数据框为中心的库,用于中间图处理步骤,如数据塑形、图算法、图布局、自动机器学习、自动AI和数据驱动的可视化配置。如果您的PyGraphistry客户端运行的设备上有GPU,它支持对本地执行步骤的自动GPU加速。PyGraphistry通常直接在数据科学笔记本中使用,并作为构建自定义仪表板和Web应用程序的Python工具包。

关于Memgraph#

Memgraph 是一个开源的内存图数据库。它与 Neo4j 的 Bolt 协议兼容,并支持广泛使用的 Cypher 查询语言,用于与数据库进行交互。Cypher 提供了一种强大且富有表现力的方式来处理图结构,并在图数据库中对节点和关系执行各种操作。

一个便捷的起点是通过Docker开始你的Memgraph之旅。只需在终端中输入以下命令,你就可以在Docker容器中设置Memgraph平台:

docker run -it -p 7687:7687 -p 7444:7444 -p 3000:3000 -e MEMGRAPH=" --bolt-server-name-for-init=Neo4j/" memgraph/memgraph-platform

如果一切顺利,几秒钟后你应该会看到一条消息,显示Memgraph Lab正在localhost:3000上运行。你可以通过你的网页浏览器访问它并开始探索!

配置和安装#

首先,确保安装Graphistry Python客户端和Neo4j Bolt驱动程序。您可以通过移除提供代码片段中前两行的注释符号(#)来实现这一点。

[7]:
#!pip install --user graphistry
#!pip install --user graphistry[bolt]

接下来,导入必要的依赖项,包括pandas、graphistry和GraphDatabase。这些库将用于加载和处理数据。

[1]:
import pandas as pd
import graphistry
from neo4j import GraphDatabase

最后,与您的Graphistry GPU服务器账户建立连接。请确保将连接字符串和密码替换为您的个人凭证。您可以在此处创建您的账户here。有关其他配置选项,请参考GitHub

[2]:
# To specify Graphistry account & server, use:
# graphistry.register(api=3, username='...', password='...', protocol='https', server='hub.graphistry.com')
# graphistry.register(..., personal_key_id='pkey_id', personal_key_secret='pkey_secret') # Key instead of username+password+org_name

连接到Graphistry和Memgraph#

我们将使用Bolt协议建立与Memgraph数据库的连接。Bolt协议是一种二进制通信协议,它促进了Python代码与Memgraph数据库之间的交互。

URI 包括主机名(localhost)和端口号(7687),Memgraph 数据库在此监听 Bolt 连接。认证部分包括一个包含用户名和密码的元组,您可以使用这些信息进行认证并访问 Memgraph 数据库。

[3]:
MEMGRAPH = {
    'uri': "bolt://localhost:7687",
    'auth': (" ", " ")
}

之后,我们可以使用Graphistry库通过Bolt协议和提供的配置来注册与数据库的连接。

[4]:
graphistry.register(bolt=MEMGRAPH)

上传数据集#

我们现在可以初始化一个Memgraph驱动实例。随后,我们将能够使用session.run()方法来执行Cypher查询。

[11]:
driver = GraphDatabase.driver(**MEMGRAPH)

with driver.session() as session:
    session.run(""" CREATE (per1:Person {id: 1, name: "Julie"})
CREATE (per2:Person {id: 2, name: "Peter"})
CREATE (per3:Person {id: 3, name: "Anna"})
CREATE (per4:Person {id: 4, name: "Carl"})
CREATE (tea1:Team {id: 1, name: "Engineering"})
CREATE (tea2:Team {id: 2, name: "Operations"})
CREATE (tea3:Team {id: 3, name: "Marketing"})
CREATE (rep1:Repository {id: 1, name: "Memgraph"})
CREATE (rep2:Repository {id: 2, name: "MAGE"})
CREATE (rep3:Repository {id: 3, name: "Marketing"})
CREATE (com1:Company {id: 1, name: "Memgraph"})
CREATE (sto1:Storage {id: 1, name: "Google Drive"})
CREATE (sto2:Storage {id: 2, name: "Notion"})
CREATE (fol1:Folder {id: 1, name: "engineering_folder"})
CREATE (fol2:Folder {id: 2, name: "operations_folder"})
CREATE (acc1:Account {id: 1, name: "Facebook"})
CREATE (acc2:Account {id: 2, name: "LinkedIn"})
CREATE (acc3:Account {id: 3, name: "HackerNews"})
CREATE (fil1:File {id: 1, name: "welcome_to_engineering.txt"})
CREATE (fil2:File {id: 2, name: "welcome_to_memgraph.txt"})
CREATE (fil3:File {id: 3, name: "operations101.txt"})
CREATE (fil4:File {id: 4, name: "expenses2022.csv"})
CREATE (fil5:File {id: 5, name: "salaries2022.csv"})
CREATE (fil6:File {id: 6, name: "engineering101.txt"})
CREATE (fil7:File {id: 7, name: "working_with_github.txt"})
CREATE (fil8:File {id: 8, name: "working_with_notion.txt"})
CREATE (fil9:File {id: 9, name: "welcome_to_marketing.txt"})
CREATE (per1)-[:HAS_ACCESS_TO]->(fil2)
CREATE (per2)-[:HAS_ACCESS_TO]->(fil2)
CREATE (per2)-[:IS_PART_OF]->(tea1)
CREATE (per2)-[:IS_PART_OF]->(com1)
CREATE (per2)-[:IS_PART_OF]->(tea2)
CREATE (per3)-[:IS_PART_OF]->(tea2)
CREATE (per3)-[:IS_PART_OF]->(tea3)
CREATE (per3)-[:IS_PART_OF]->(com1)
CREATE (per4)-[:IS_PART_OF]->(tea1)
CREATE (per4)-[:IS_PART_OF]->(com1)
CREATE (per4)-[:HAS_ACCESS_TO]->(fil2)
CREATE (com1)-[:HAS_TEAM]->(tea1)
CREATE (com1)-[:HAS_TEAM]->(tea3)
CREATE (com1)-[:HAS_TEAM]->(tea2)
CREATE (fil1)-[:IS_STORED_IN]->(sto1)
CREATE (fil1)-[:IS_STORED_IN]->(sto2)
CREATE (fol2)-[:IS_STORED_IN]->(sto1)
CREATE (fil9)-[:IS_STORED_IN]->(sto1)
CREATE (fil9)-[:IS_STORED_IN]->(sto2)
CREATE (fol1)-[:IS_STORED_IN]->(sto1)
CREATE (fil2)-[:CREATED_BY]->(per3)
CREATE (fol1)-[:HAS_ACCESS_TO]->(fil6)
CREATE (fol1)-[:HAS_ACCESS_TO]->(fil7)
CREATE (fol1)-[:HAS_ACCESS_TO]->(fil8)
CREATE (fol2)-[:HAS_ACCESS_TO]->(fil3)
CREATE (fol2)-[:HAS_ACCESS_TO]->(fil4)
CREATE (fol2)-[:HAS_ACCESS_TO]->(fil5)
CREATE (tea2)-[:HAS_ACCESS_TO]->(fol2)
CREATE (rep3)-[:HAS_ACCESS_TO]->(acc1)
CREATE (rep3)-[:HAS_ACCESS_TO]->(acc2)
CREATE (rep3)-[:HAS_ACCESS_TO]->(acc3)
CREATE (rep3)-[:HAS_ACCESS_TO]->(fil9)
CREATE (tea1)-[:HAS_ACCESS_TO]->(rep1)
CREATE (tea1)-[:HAS_ACCESS_TO]->(rep2)
CREATE (tea1)-[:HAS_ACCESS_TO]->(rep3)
CREATE (tea1)-[:HAS_ACCESS_TO]->(fil1)
CREATE (tea1)-[:HAS_ACCESS_TO]->(fol1)
                """)
[12]:
g = graphistry.cypher(""" MATCH (node1)-[connection]-(node2) RETURN node1, connection, node2;
  """)

数据可视化#

在填充您的Memgraph实例后,是时候使用Graphistry可视化数据集了。但首先,让我们在Memgraph Lab中查看图模式。它定义了数据的结构及其关系,提供了数据元素在图数据库中如何连接和组织的蓝图,并提供交互式图可视化。

截图

使用grapistry进行绘图是通过以下简单命令完成的:

[13]:
g.plot()
[13]:

截图:

截图

我们可以轻松调查Carl可以访问哪些文件。

[14]:
direct_file_access_Carl = graphistry.cypher("""  MATCH (j:Person {name:"Carl"})-[r:HAS_ACCESS_TO]->(n)
RETURN *;  """)
direct_file_access_Carl.plot()
[14]:

截图:

截图

Carl 可以直接访问一个文件。但是,由于团队节点可以访问特定的文件夹,如果 Carl 是一个团队的一部分,他间接地可以访问该文件夹中的所有文件。通过下一个查询,我们可以看到如何从标签为 Person 且名称为 Carl 的节点执行深度优先搜索到标签为 File 的节点。它找到了一条从 Carl 到文件的路径,无论是直接还是通过其他节点。符号 * 表示深度优先搜索,数字 3 是最大深度(最大跳跃次数)。

[15]:
all_file_access_Carl = graphistry.cypher("""
MATCH p=(:Person {name:"Carl"})-[* ..3]->(:File)
RETURN p;
 """)
all_file_access_Carl.plot()
[15]:

截图:

截图

这也可以通过执行以下查询为所有Person节点完成。这是一个例子,说明为什么图数据库非常适合身份和访问管理。

[16]:
all_file_access = graphistry.cypher("""
MATCH p=(:Person)-[* ..3]->(:File)
RETURN p;
 """)
all_file_access.plot()
[16]:

截图:

截图

要点和进一步阅读#

PyGraphistry 通过提供一个专门工具来补充 Memgraph,用于创建存储在 Memgraph 中的图数据的丰富且交互式的可视化。它允许用户通过利用 Graphistry 平台的高级可视化功能,尤其是在处理复杂且广泛的图数据集时,更深入地了解他们的图数据。

随时获取Graphistry和Memgraph,并在Memgraph DiscordGraphistry社区Slack上与我们分享您的见解或问题!

您可以了解更多关于使用Memgraph构建和扩展现代IAM系统的信息这里以及博客文章Memgraph在IAM系统中实时性能的优势, 图数据库为身份和访问管理带来的好处图如何解决传统IAM系统的两大问题.

PyGraphistry README.md 分享了如何获取您的Memgraph查询结果并执行诸如过滤、Pandas数据框分析、图算法增强、自动机器学习(autoML)和自动人工智能(autoAI)分析、新布局以及配置数据驱动可视化等即时步骤的示例。PyGraphistry演示文件夹中有更多关于安全操作和安全数据科学团队如何使用Graphistry的示例,包括来自Nvidia GTC 2022的免费GPU图可视化和AI安全分析培训。您可能还想探索Louie.AI如何使分析师团队能够以自然语言直接与他们的数据孤岛对话,并获得分析和可视化,包括Graphistry图和AI可视化。最后,您可以考虑graph-app-kit作为维护的OSS Streamlit分发和参考,用于使用Graphistry和您的Memgraph数据构建PyData仪表板。