【问题标题】:Not able to connect to the remote server of neo4j database无法连接到neo4j数据库的远程服务器
【发布时间】:2015-10-27 15:03:00
【问题描述】:

我正在尝试从位于远程位置的 neo4j 数据库中获取数据,为此我发出 ajax 请求,如下所示:

$.ajax({
    type: "POST",
//    headers: {"Access-Control-Allow-Origin": "*"},
    url: "http://<mysite>.sb04.stations.graphenedb.com:24789/browser/",
     headers: {
    "Authorization": "Basic " + btoa('email' + ":" + 'mypw')
  },
    crossDomain: true,
    accepts: { json: "application/json" },
    dataType: "json",
    data: {
        "query": "start n  = node(*) return n",
        "params": {}
    },
    success: function (data, textStatus, jqXHR) {
        alert(textStatus);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(textStatus);
    }
});

但是我收到了这个特殊的错误:

XMLHttpRequest 无法加载。没有“Access-Control-Allow-Origin”标头 存在于请求的资源上。原点'http://localhost:8383' 因此不允许访问。响应包含 HTTP 状态代码 403.

请帮忙解决这个问题...

【问题讨论】:

  • 我不确定它是否与您的问题有关,但我在我的 ajax 请求中添加了以下标头:'Accept': 'application/json', 'Content-Type': 'application/ json'
  • 另外,我相信 Neo4j 的 ajax 请求的 url 看起来不同。
  • 我是 GrapheneDB 的创始人兼首席执行官。除非您将数据库设置为只读,否则您需要使用更新的凭据移至新数据库。通过将您的凭据放在这里,您已授予整个 Internet 对您的数据库的读/写访问权限。
  • 我编辑了您的凭据(即使有足够代表的人仍然可以在编辑历史记录中看到它)。你需要尽快处理这个问题。
  • 哦,好吧,所以你放在那里的凭据看起来不像我们用于数据库级身份验证的凭据,所以 1) 你的数据库没有受到损害,但是 2) 你已经暴露了帐户级别凭据更糟糕,因为基本上任何人都可以代表您创建、删除数据库等。问题已被编辑,但凭据将永远保留在历史记录中。如果是有效帐户,我们将更改密码、重置 API 令牌并启动密码重置。

标签: neo4j


【解决方案1】:

在设置数据库服务器时,您必须将可能显式访问它的 ip 列入白名单或添加 * 以便所有 ip 都可以访问它。

【讨论】:

    【解决方案2】:

    默认情况下 Neo4j 只接受来自 localhost 的请求。

    • neo4j-server.properties 中的参数org.neo4j.server.webserver.address 是否有更改?
    • 您可以访问浏览器吗?

    此外,您没有使用好的端点:将 http://blackswantechnologiesosint.sb04.stations.graphenedb.com:24789/browser/ 更改为 http://blackswantechnologiesosint.sb04.stations.graphenedb.com:24789/db/data/transaction/commit`

    请参阅相关文档:http://neo4j.com/docs/stable/rest-api.html

    【讨论】:

    • 重要提示:您通过读写操作将您的数据库暴露在互联网上!出于安全原因,这不是一个好的选择,除非您的数据库处于只读模式