Neo4j 子图访问控制

Neo4j 子图访问控制,neo4j,controls,subgraph,Neo4j,Controls,Subgraph,在官方文件3.1中: 据说 例如,可以允许用户读取但不写入标有Employee和REPORTS_to类型关系的节点 但这一页和其他人都没有写上怎么做。 通过调用dbms.procedures,我们可以在企业版中看到更多的功能,但没有关于定义此子图控件的内容 我们考虑更改企业版,但如果我们确信能够做到这一点。 有人能给我解释一下相关文件的地址吗 谢谢文档就在那里。注意第一句话: 通过使用用户定义的过程和自定义角色 管理员可以将用户的访问权限和后续操作限制为 图形的指定部分 这种方法似乎是,对于没有

在官方文件3.1中: 据说

例如,可以允许用户读取但不写入标有Employee和REPORTS_to类型关系的节点

但这一页和其他人都没有写上怎么做。 通过调用dbms.procedures,我们可以在企业版中看到更多的功能,但没有关于定义此子图控件的内容

我们考虑更改企业版,但如果我们确信能够做到这一点。 有人能给我解释一下相关文件的地址吗


谢谢

文档就在那里。注意第一句话:

通过使用用户定义的过程和自定义角色 管理员可以将用户的访问权限和后续操作限制为 图形的指定部分

这种方法似乎是,对于没有写权限的用户,根据需要为他们创建角色,然后创建或使用现有的用户定义过程来执行允许他们执行的操作。然后将过程的权限配置到适当的级别,并通过修改dbms.security.procedures.roles将过程的角色与以前创建的角色关联起来。这允许您创建的过程由与之关联的角色执行

例如,给定一个没有写入权限的HR用户,您可以创建一个过程来创建或删除:REPORTS\u to:Employee节点之间的关系。该过程需要设置为mode=WRITE,因为它需要写访问权限。这通常不会由该HR用户执行,因为他们没有写权限

但是,如果您创建了一个角色,比如“hr”,并将该角色添加到此用户,并将该过程设置为可由dbms.security.procedures.roles中的hr角色访问,则hr用户可以执行该过程,并且它将执行必要的写操作

总之,Neo4j的子图访问控制没有在节点或标签本身上定义,在Cypher中执行write语句时也不适用。此访问控制特定于用户定义的过程,并允许具有特定角色(该角色与这些过程关联)的用户执行这些过程,即使他们由于其访问级别通常无法执行这些过程

编辑

最后一件对您有用的事情是…Neo4j有一种注册方法,可以对正在进行的事务执行检查和逻辑,如果不满足某些条件,可以拒绝。我假设您可以在这里获取用户角色,并可能检查事务中某些标签上的writer操作。奇怪的是,在文档的“保护子图”部分中没有提到这一点。我自己还没有尝试过这种方法,稍后我会尝试自己的测试,所以我不确定它是否能满足您的需要,但值得一看

更新:

这已经有一段时间了,但我们确实有一个更全面的访问控制手段即将推出的Neo4j 4.0

4.0将包括基于模式的安全性、定义每个用户和角色的完整功能、授予或拒绝特定类型节点和关系的各级读、写、遍历等权限的功能。例如,您可以拥有各种角色,这些角色只能在某些类型的节点上可见,或者在其他节点上被明确拒绝可见。您还可以限制是否可以遍历某些节点

这应该满足所有一直在等待Neo4j提供更全面的安全和访问解决方案的人的需求


随着4.0正式发布的临近,我们将迎来更多精彩内容

文档就在那里。注意第一句话:

通过使用用户定义的过程和自定义角色 管理员可以将用户的访问权限和后续操作限制为 图形的指定部分

这种方法似乎是,对于没有写权限的用户,根据需要为他们创建角色,然后创建或使用现有的用户定义过程来执行允许他们执行的操作。然后将过程的权限配置到适当的级别,并通过修改dbms.security.procedures.roles将过程的角色与以前创建的角色关联起来。这允许您创建的过程由与之关联的角色执行

例如,给定一个没有写入权限的HR用户,您可以创建一个过程来创建或删除:REPORTS\u to:Employee节点之间的关系。该过程需要设置为mode=WRITE,因为它需要写访问权限。这通常不会由该HR用户执行,因为他们没有写权限

但是,如果您创建了一个角色,例如“hr”,并将该角色添加到此用户,并将该过程设置为可由dbms.security.procedures.roles中的hr角色访问,则hr 用户可以执行此过程,它将执行必要的写入操作

总之,Neo4j的子图访问控制没有在节点或标签本身上定义,在Cypher中执行write语句时也不适用。此访问控制特定于用户定义的过程,并允许具有特定角色(该角色与这些过程关联)的用户执行这些过程,即使他们由于其访问级别通常无法执行这些过程

编辑

最后一件对您有用的事情是…Neo4j有一种注册方法,可以对正在进行的事务执行检查和逻辑,如果不满足某些条件,可以拒绝。我假设您可以在这里获取用户角色,并可能检查事务中某些标签上的writer操作。奇怪的是,在文档的“保护子图”部分中没有提到这一点。我自己还没有尝试过这种方法,稍后我会尝试自己的测试,所以我不确定它是否能满足您的需要,但值得一看

更新:

这已经有一段时间了,但我们确实有一个更全面的访问控制手段即将推出的Neo4j 4.0

4.0将包括基于模式的安全性、定义每个用户和角色的完整功能、授予或拒绝特定类型节点和关系的各级读、写、遍历等权限的功能。例如,您可以拥有各种角色,这些角色只能在某些类型的节点上可见,或者在其他节点上被明确拒绝可见。您还可以限制是否可以遍历某些节点

这应该满足所有一直在等待Neo4j提供更全面的安全和访问解决方案的人的需求


随着4.0正式发布的临近,我们将迎来更多精彩内容

谢谢你的回答。首先,我认为这是这个程序的另一个特点。后来我把你解释的内容重述了一遍,因为这根本不是我们所期望的。创建一个如此困难的系统来编写java代码/创建jar、部署、重新启动服务器真的很奇怪。我们正在搜索更动态的东西,而不是史前的,我们可能会使用OrientDB BTW重新编写图形层,再次感谢!我为事务处理程序添加了一个可能的替代方案,这可能也适用于您。更新内容中提到了即将发布的Neo4j 4.0版本的新安全性和访问控制功能。感谢您的回答。首先,我认为这是这个程序的另一个特点。后来我把你解释的内容重述了一遍,因为这根本不是我们所期望的。创建一个如此困难的系统来编写java代码/创建jar、部署、重新启动服务器真的很奇怪。我们正在搜索更动态的东西,而不是史前的,我们可能会使用OrientDB BTW重新编写图形层,再次感谢!我为事务处理程序添加了一个可能的替代方案,该方案可能也适用于您。更新内容中提到了即将发布的Neo4j 4.0版本的新安全性和访问控制功能。