You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python pymongo连接MongoDB报Authentication failed错误如何解决

MongoDB 18号认证失败错误的诱因、排查与修复方案

核心诱因

code: 18, codeName: AuthenticationFailed是MongoDB服务端直接返回的认证拒绝响应,和Python语法本身无关,常见触发原因如下:

  • 账号密码不匹配:连接串中填写的root账号对应密码和MongoDB中存储的实际密码不一致,是占比最高的故障原因
  • 认证库配置错误:连接串中指定authSource=admin,但root账号实际并非创建在admin库下,服务端找不到对应用户自然认证失败
  • 连接目标错误:连接串中主机名写的是mongo,如果该域名解析到的不是预期的MongoDB实例(比如连到其他测试实例、别人部署的临时实例),账号密码必然不匹配
  • 账号状态异常:root账号被删除、禁用,或者没有被授予目标库的访问权限
  • 环境特殊问题:如果是Docker部署的MongoDB,容器重建且未配置数据持久化时,之前设置的账号密码会全部失效;pymongo版本过低不匹配MongoDB 4.0+的SCRAM-SHA-256认证机制时,也可能抛出该错误

排查步骤

按从易到难顺序排查,不用上来就改代码:

  1. 绕过代码直接验证账号有效性:在可以访问MongoDB的机器上用官方客户端执行连接命令
    # 用你连接串里的账号、密码、认证库参数直连
    mongo -u root -p password --authenticationDatabase admin --host mongo --port 27017
    
    如果这一步都连不上,问题和Python代码完全无关,直接查账号、认证库、连接目标的问题。
  2. 校验认证库是否正确:如果上一步连不上,把--authenticationDatabase参数的值换成database_sample再试,能连通就说明之前的authSource配置错了。
  3. 确认连接的实例正确:先不带账号密码连mongo:27017,执行show dbs看返回的库列表是不是你预期的,排除连错实例的问题。
  4. 版本校验:如果前面都没问题,执行pymongo.version看pymongo版本,MongoDB 4.0以上实例要求pymongo版本至少3.10以上,版本过低先升级。

修复方案

对应排查到的原因直接调整即可:

  • 账号密码错误:登录MongoDB后在账号所属库下执行密码重置命令,更新为正确密码
  • 认证库配置错误:修改连接串里的authSource参数为账号实际所属的库,比如账号建在database_sample下就把参数改成authSource=database_sample
  • 连错实例:把连接串里的mongo主机名替换为目标MongoDB实例的正确IP或域名
  • 环境问题:Docker部署的场景检查数据卷挂载配置,重建实例后重新创建账号;pymongo版本过低执行pip install --upgrade pymongo升级即可
  • 额外提示:你的代码里数据库名取的是database_sample,集合名取的是database虽然语法不报错,但命名辨识度低,后续容易出现操作错对象的问题,建议调整。

内容的提问来源于stack exchange,提问作者Montana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:12:22