我正在使用neo4j 1.9.4,我想使用neo4jphp在(公共)网站上显示有关图表的一些信息。为了获取一些数据,我在neo4jphp中使用了cypher查询。那些查询显然只是从图中读取数据。
我必须确保网站的访问者无法修改图表中的任何数据。因此,我设置了authentication-extension插件并创建了两个用户(一个具有只读'RO',另一个具有读写'RW'访问权限),如此处所述。但是,neo4jphp中的密码查询仅适用于具有RW权限的用户,而不适用于具有RO权限的用户。
我知道http://docs.neo4j.org/chunked/stable/security-server.html#_security_in_depth几乎解释了如何保护neo4j,但我绝对无法弄清楚如何做到这一点。特别是“arbitrary_code_execution”部分似乎很有趣,但我不知道如何使用它。
如何实现读取cypher查询可以从Web服务器执行? BTW:Web服务器(显示一些结果)和neo4j正在另一台机器上运行。
感谢您的帮助,谢谢!
编辑:我的方案实际上并不复杂,所以我确信必须有一个解决方案:从localhost授予任何访问权限(读写),而从远程Web访问服务器仅限于从图表中读取。我怎样才能做到这一点?如果那是不可能的:我如何限制从远程Web服务器访问某些预定义(密码)查询,其中只有一些参数可以由用户提供?
答案 0 :(得分:1)
您应该使用apache代理,如http://docs.neo4j.org/chunked/stable/security-server.html#_security_in_depth
中所述您需要的信息是发布密码查询的网址:
http://localhost:7474/db/data/cypher
neo4php只是一个包装器,最终会发布到该网址。您可以在此处找到更多详细信息:http://docs.neo4j.org/chunked/milestone/rest-api-cypher.html
所以基本上这意味着你只允许使用cypher url的查询来访问neo4j服务器。
关于只读密码查询:
我没有检查neo4jphp,但是如果直接使用REST API,可以通过添加到conf / neo4j.properties将数据库设置为read_only:
read_only=true
您可以在webadmin中检查服务器确实处于read_only模式
刚测试过,服务器只接受读取查询:
并将返回以下回复
{
"message": "Expected to be in a transaction at this point",
"exception": "InternalException",
"fullname": "org.neo4j.cypher.InternalException",
"stacktrace":
[...],
"fullname" : "org.neo4j.graphdb.NotInTransactionException"
}
答案 1 :(得分:1)
另一个答案是使用Cypher-RS插件。有一个1.9分支。
这允许您创建一个单独的密码查询的端点。 (因此必须预定义查询。)
您可以使用mod代理仅限制这些预定义查询。我不确定mod代理是否允许你只限制GET请求,但如果确实如此,你可以允许访问插件的GET请求,因为它不允许修改查询成为GET请求。