子图访问控制
Subgraph access control
在官方文档中(3.1: http://neo4j.com/docs/operations-manual/current/security/authentication-authorization/subgraph-access-control/)
据说
"For example, a user can be allowed to read, but not write, nodes labelled with Employee and relationships of type REPORTS_TO"
但是此页面中没有任何地方写过如何做。
使用 "call dbms.procedures()" 我们可以在企业版中看到更多功能,但没有关于定义此 Subgraph 控件的内容
我们考虑更改企业版,但如果我们确定能够做到这一点。
谁能给我解释一下或者给我相关文档的地址
谢谢
文档就在那里。注意第一句:
Through the use of user-defined procedures and custom roles, an
administrator may restrict a user’s access and subsequent actions to
specified portions of the graph.
方法似乎是,对于没有写权限的用户,适当地为他们创建角色,然后创建(或使用现有的)user-defined 过程来执行允许他们执行的操作。然后将过程的权限配置到适当的级别,并将过程的角色(通过修改dbms.security.procedures.roles
)与您之前创建的角色相关联。这允许您创建的过程由与其关联的角色执行。
例如,给定一个没有写入权限的 HR 用户,您可以创建一个过程来创建或删除 :Employee 节点之间的 :REPORTS_TO 关系。该过程需要设置为 mode=WRITE,因为它需要写访问权。这通常不能由该 HR 用户执行,因为他们没有写权限。
但是,如果您创建了一个角色,比如 'hr',并将该角色添加到该用户,并将该过程设置为可由 dbms.security.procedures.roles
中的 hr 角色访问,则 hr 用户可以执行这个过程,它会执行必要的写操作。
总而言之,Neo4j 的子图访问控制并未在节点或标签本身上定义,也不适用于在 Cypher 中执行写语句时。此访问控制特定于 user-defined 过程,并允许具有特定角色(该角色与这些过程相关联)的用户执行这些过程,即使他们通常由于其访问级别而无法执行。
编辑
最后一件事可能对您有用...Neo4j 有一种注册方法 transaction event handlers 可以对正在进行的事务执行检查和逻辑,如果不满足某些条件则拒绝。我假设您可以在这里获得用户的角色,并可能检查某些标签上的编写器操作的事务。奇怪的是,在保护文档的子图部分中没有提到这一点。我自己还没有尝试过这种方法(我稍后会尝试自己的测试)所以我不确定它是否能满足你的需求,但值得一看。
更新:
已经有一段时间了,但在即将推出的 Neo4j 4.0 中我们确实有了更全面的访问控制方法。
4.0 将包括 schema-based 安全性、针对每个用户和角色定义的完整能力、授予或拒绝节点和关系的不同级别权限(读取、写入、遍历等)的能力具体类型。因此,例如,您可以拥有各种角色,这些角色只能在某些类型的节点上可见,或者明确拒绝在其他节点上可见。您还可以限制某些节点是否可以完全遍历。
这应该可以满足所有等待 Neo4j 中更全面的安全和访问解决方案的人的需求。
这是 Neo4j 4.0 MR2 documentation,随着官方 4.0 版本的临近,还会有更多内容!
在官方文档中(3.1: http://neo4j.com/docs/operations-manual/current/security/authentication-authorization/subgraph-access-control/) 据说
"For example, a user can be allowed to read, but not write, nodes labelled with Employee and relationships of type REPORTS_TO"
但是此页面中没有任何地方写过如何做。 使用 "call dbms.procedures()" 我们可以在企业版中看到更多功能,但没有关于定义此 Subgraph 控件的内容
我们考虑更改企业版,但如果我们确定能够做到这一点。 谁能给我解释一下或者给我相关文档的地址
谢谢
文档就在那里。注意第一句:
Through the use of user-defined procedures and custom roles, an administrator may restrict a user’s access and subsequent actions to specified portions of the graph.
方法似乎是,对于没有写权限的用户,适当地为他们创建角色,然后创建(或使用现有的)user-defined 过程来执行允许他们执行的操作。然后将过程的权限配置到适当的级别,并将过程的角色(通过修改dbms.security.procedures.roles
)与您之前创建的角色相关联。这允许您创建的过程由与其关联的角色执行。
例如,给定一个没有写入权限的 HR 用户,您可以创建一个过程来创建或删除 :Employee 节点之间的 :REPORTS_TO 关系。该过程需要设置为 mode=WRITE,因为它需要写访问权。这通常不能由该 HR 用户执行,因为他们没有写权限。
但是,如果您创建了一个角色,比如 'hr',并将该角色添加到该用户,并将该过程设置为可由 dbms.security.procedures.roles
中的 hr 角色访问,则 hr 用户可以执行这个过程,它会执行必要的写操作。
总而言之,Neo4j 的子图访问控制并未在节点或标签本身上定义,也不适用于在 Cypher 中执行写语句时。此访问控制特定于 user-defined 过程,并允许具有特定角色(该角色与这些过程相关联)的用户执行这些过程,即使他们通常由于其访问级别而无法执行。
编辑
最后一件事可能对您有用...Neo4j 有一种注册方法 transaction event handlers 可以对正在进行的事务执行检查和逻辑,如果不满足某些条件则拒绝。我假设您可以在这里获得用户的角色,并可能检查某些标签上的编写器操作的事务。奇怪的是,在保护文档的子图部分中没有提到这一点。我自己还没有尝试过这种方法(我稍后会尝试自己的测试)所以我不确定它是否能满足你的需求,但值得一看。
更新:
已经有一段时间了,但在即将推出的 Neo4j 4.0 中我们确实有了更全面的访问控制方法。
4.0 将包括 schema-based 安全性、针对每个用户和角色定义的完整能力、授予或拒绝节点和关系的不同级别权限(读取、写入、遍历等)的能力具体类型。因此,例如,您可以拥有各种角色,这些角色只能在某些类型的节点上可见,或者明确拒绝在其他节点上可见。您还可以限制某些节点是否可以完全遍历。
这应该可以满足所有等待 Neo4j 中更全面的安全和访问解决方案的人的需求。
这是 Neo4j 4.0 MR2 documentation,随着官方 4.0 版本的临近,还会有更多内容!