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

PyMongo连接MongoDB抛出Authentication failed认证错误排查

问题根因

核心错误是连接串的认证库配置不匹配:从你贴的db.getUsers()返回结果可以明确看到,me账号是创建在test数据库下的(返回字段"db" : "test"就是用户所属的认证库标识),但你当前URI里写的authSource=admin,指定去admin库校验账号密码,必然会触发认证失败。
另外你提到注释掉游标遍历代码后脚本无报错,这是Pymongo的正常设计逻辑:MongoClient实例化走的是懒连接机制,仅初始化对象时不会主动发起网络连接、执行鉴权流程,只有第一次触发实际数据库操作(比如查询、写入)时才会真正建连完成认证,所以之前的无报错状态不代表连接配置正确。

解决方案

直接修改连接URI的authSource参数,和用户实际所属的认证库保持一致即可,修正后的代码片段:

# 将authSource从admin改为test,对应用户实际所在的认证库
uri = "mongodb://{}:{}@{}:{}/{}?authSource=test".format(MONGO_USER, MONGO_PASS, MONGO_HOST, MONGO_PORT, MONGO_DB)
其他可选排查方向

如果修改authSource后仍然报错,可以按以下顺序逐一排查:

  • 校验账号密码准确性:如果密码包含@、:、/这类URI保留特殊字符,需要先用urllib.parse.quote()对密码部分做转义,再拼接到连接串里
  • 检查部署侧访问限制:确认mongod服务的bindIp配置没有拦截客户端所在IP,同时虚拟机、容器的防火墙规则放通了27017端口
  • 显式指定认证机制:如果用的是MongoDB 4.0及以上版本,可以在URI里追加参数authMechanism=SCRAM-SHA-256,和你用户信息里列出的支持认证算法匹配
  • 补充账号读写权限:你当前给me账号分配的userAdminAnyDatabase是用户管理类角色,默认没有业务库的读写权限,等认证通过后如果查询报权限错误,给该账号追加myDB库的readWrite角色即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:06:26