如何在没有 REST API 的情况下为 neo4j 集群配置用户和密码

Posted

技术标签:

【中文标题】如何在没有 REST API 的情况下为 neo4j 集群配置用户和密码【英文标题】:How to configure user and password for neo4j cluster without REST API 【发布时间】:2015-02-23 02:32:38 【问题描述】:

我使用的版本是neo4j-enterprise-2.2.0-M02

我的问题是: 如何在后端或浏览器中配置用户(如添加新用户、更改密码等),而不是 REST API?我可以通过 neo4j-shell 来实现吗?假设我是一个 DBA,用 REST API 来做这件事不是很方便。

任何帮助将不胜感激!

【问题讨论】:

您应该标记以下答案之一以结束问题。 【参考方案1】:

您可以使用浏览器代替 API。只需转到http://localhost:7474(或Web 控制台绑定的任何IP),系统将提示您更改密码。验证通过后,使用命令:server change-password再次修改密码。

目前还不能在系统中创建多个用户帐户。

您可以使用命令:help server 查看可用的身份验证命令。

【讨论】:

谢谢@subvertallchirs:是的,但是我只能在第一次更改密码(从默认的noe4j/noe4j更改为新密码),然后我找不到我应该在哪里更改它,对吗? @subvertallchris 如果您忘记了密码会怎样? @NumenorForLife 这将是一个单独的问题,但答案是在这里寻找boopathi.me/blog/reset-neo4j-graph-database-password的amyone@ 命令:something叫什么?我在The Neo4j Cypher Manual v4.3 中找不到它【参考方案2】:

尽管仍在使用 REST API,但我会将 cURL 选项提供给无法访问 Web 浏览器(例如 AWS 实例)的任何人:

$ curl -H "Content-Type: application/json" -X POST -d '"password":"WHATEVER THE PASSWORD IS"' -u neo4j:neo4j http://localhost:7474/user/neo4j/password

【讨论】:

这就是我要说的。您可以从ssh 终端执行此操作! 这是实际答案:)【参考方案3】:

另一种选择是直接修改auth文件并重启neo。这样做,您甚至可以更改用户名!

运行

find / -name dbms

对我来说,这给了我一击:

/var/lib/neo4j/data/dbms/auth

将此代码另存为 build_auth_string.sh:

#!/bin/bash

DEFAULT_IFS="$IFS"
SALT_LEN=32

# either read from stdin or use the argument
if [ -z "$1" ]; then
  read INPUT
else
  INPUT="$1"
fi

if [ -z "$INPUT" ]; then
 echo "correct format <uname:pass>"
 exit
fi

IFS=':'
read -a UNAME_PASS <<< "$INPUT"

UNAME="$UNAME_PASS[0]"
PASS="$UNAME_PASS[1]"

# representing the password in hex format like \xAB\x0C etc
# HEX_PASS=$(echo -n $PASS | xxd -p | awk 'print toupper($1);' | sed -r 's/(.2)/\\x\1/g')
HEX_PASS=$(echo -n $PASS | hexdump -v -e '"\\\x" 1/1 "%02X"')
# echo $HEX_PASS


# create the salt and store it in hex format
SALT=$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w $SALT_LEN | head -n 1)
# SALT="28FD26AD92D6D2D8820E969F3F3732B4"
HEX_SALT=$(echo -n $SALT | sed -r 's/(.2)/\\x\1/g')


# calculate the sha256 sum of the salt and password value
# need to split the output because the output ends with a hyphen
IFS=' '
read -a PASSWORD_HASH_ARRAY <<< $(printf $HEX_SALT$HEX_PASS | sha256sum)
PASSWORD_HASH="$PASSWORD_HASH_ARRAY[0]"

# echo "$UNAME;$PASS;$SALT"
# echo "$PASSWORD_HASH"

# and print out the auth string
COMBINED=$(echo -n "$PASSWORD_HASH,$SALT" | awk 'print toupper($1);')
echo "$UNAME:SHA-256,$COMBINED:"

IFS="$DEFAULT_IFS"

上面的代码来自https://github.com/artsince/docker-neo4j-auth/blob/master/build_auth_string.sh - 我把它贴在这里只是封装..

然后像

一样运行上面的脚本

build_auth_string.sh myUsername:myP@ssw0rd

将其复制/粘贴到您的身份验证文件中,替换之前的任何内容,然后重新启动 neo4j :)

【讨论】:

【参考方案4】:

全新安装的 Neo4j 2.2.x 有一个用户“neo4j”,初始密码为“neo4j”。您必须先更改密码,然后才能执行任何操作。

通过调用httpie 与 REST API 进行交互,从命令行很容易做到这一点。例如,要设置新密码“foobar”,请运行以下命令:

http -a neo4j:neo4j POST http://localhost:7474/user/neo4j/password password=foobar

【讨论】:

【参考方案5】:

如果您想重设密码但不知道旧密码: 然后对于 Windows 用户 走这条路:

C:\Users\xyz\Documents\Neo4j\default.graphdb\dbms

并删除该 auth 文件。 重启neo4j,他们会再次要求设置用户名和密码!! 默认 用户名:neo4j 密码:neo4j

【讨论】:

【参考方案6】:

目前无法使用neo4j-shell 配置授权。正如您所提到的,REST API 是要走的路。使用方便的 REST 客户端,这非常容易。

我选择的工具是postman(chrome 浏览器的插件)或httpie 用于命令行。例如。使用 httpie 更改用户密码非常简单:

 http localhost:7474/user/neo4j/password password=neo4j new_password=mypass

请注意,密码(和其他授权设置)不会自动分布在集群中,请参阅manual how to copy over settings between instances。

【讨论】:

好的,我明白了,再次感谢 Stefan! 请注意,2.2.0-M02 是一个里程碑版本,旨在测试一些功能并获得反馈。在 2.2.0 版本之前,身份验证的工作方式可能会发生变化。【参考方案7】:

对于 Mac 用户,Neo4J 版本 2.3.1,重置凭据的最佳方法是删除包含凭据信息的文件并重新启动服务。

要遵循的步骤

    从浏览器控制台 (localhost:7474) 查找包含凭据的文件所在的位置。转到星标(收藏夹)->系统->服务器配置 搜索 dbms.security.auth_store.location 属性以查看它指向的位置。就我而言,它是 /Users/felipe/Documents/Neo4j/default.graphdb/./dbms/auth 删除该文件。 再次启动服务并再次进入控制台(localhost:7474)。

默认情况下,系统会要求您设置用户 neo4j 的密码。

希望对你有帮助。

【讨论】:

【参考方案8】:

详细说明费利佩的回应(因为我没有足够的代表点来评论): 我停止了服务器,我删除了 BOTH 中的身份验证文件:

DBROOT\data\auth DBROOT\dbms\auth

重新启动服务器,并通过 localhost:7474 连接到它,使用默认用户名/密码(neo4j/neo4j),然后提示我输入新密码。

【讨论】:

【参考方案9】:

在 Neo4j 4.0+ 上,您可以运行:

$ cypher-shell

如果是第一次连接,可以输入neo4j作为用户名和密码,系统会提示你设置新密码。

如果以后想修改密码,可以在 Cypher shell 中写:

:server change-password

【讨论】:

以上是关于如何在没有 REST API 的情况下为 neo4j 集群配置用户和密码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring-boot 中不模拟服务类的情况下为 REST 控制器端点编写单元测试

使用 Spring Boot 和 Neo4j 通过 REST API 插入实体时出错

在没有 OAuth 的情况下为自己的帐户使用 Google API

如何在没有 http 的情况下为 graphql apis 编写健康检查

如何在没有弹簧安全的情况下使用 api 密钥保护 rest api

r 直接从Neo4j REST API获取图形数据到R.对于R igraph用户有用。