使用Python脚本连接Neo4j时遭遇身份验证错误求助
Neo4j Python驱动身份验证失败排查方案(浏览器可正常连接)
环境信息
- Neo4j版本:4.0(社区版)
- Python版本:3.12
- Neo4j Python驱动版本:4.4
问题描述
通过Python脚本连接Neo4j创建节点和关系时,持续触发身份验证错误,错误信息:
neo4j.exceptions.AuthError: {code: Neo.ClientError.Security.Unauthorized} {message: The client is unauthorized due to authentication failure.}
但浏览器可正常通过Neo4j Browser连接数据库,且确认凭据正确。
排查步骤及原因分析
1. 版本兼容性验证
Neo4j 4.0官方推荐的Python驱动版本范围是4.0.x至4.4.x,但Python 3.12属于较新版本,4.4驱动可能存在对Python 3.12的适配问题(如加密协议、身份验证流程的兼容漏洞)。
- 验证方案:临时将Python降级到3.10/3.11版本测试,或确认驱动版本是否有针对3.12的补更新(若有则升级驱动)。
2. 脚本凭据传递检查
确认脚本中身份信息的传递格式无误,避免因格式错误导致验证失败:
- 标准正确写法示例:
from neo4j import GraphDatabase driver = GraphDatabase.driver("bolt://localhost:7687", auth=("你的用户名", "你的密码"))
- 注意:密码含特殊字符(如
@、$)时,直接传递原始字符串即可,无需额外编码;避免字符串前后带有空格。
3. Neo4j服务端配置排查
检查neo4j.conf中的身份验证相关配置:
- 确认
dbms.security.auth_enabled为true(确保身份验证功能开启); - 检查
dbms.security.authentication_providers是否仅设置为native,若启用了LDAP等其他验证方式,Python驱动需对应配置; - 若开启了
dbms.security.auth_proxy_enabled,脚本需额外配置代理头信息,而浏览器可能已自动适配该设置。
4. 连接协议与端口校验
Neo4j Browser与Python驱动默认使用的协议/端口不同,需确认脚本配置正确:
- 脚本需使用
bolt://localhost:7687(默认Bolt协议端口),而非浏览器用的http://localhost:7474; - 若Neo4j开启了强制加密(
dbms.connector.bolt.tls_level设为REQUIRED),脚本需使用bolt+s://或bolt+ssc://协议,并确保驱动能正确处理证书。
5. 用户权限与角色排查
即使浏览器能连接,也可能存在Bolt协议下的权限限制:
- 登录Neo4j Browser,执行
SHOW ROLES FOR user 你的用户名;,确认用户角色包含admin、writer或reader权限; - 排查是否存在用户仅允许通过特定客户端连接的限制(Neo4j 4.0默认无此限制,但需确认)。
内容的提问来源于stack exchange,提问作者Kritish Jaitely
相关产品推荐
相关产品推荐

