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

能获取MongoDB集合信息,但调用find()查询文档时认证失败

MongoDB 5.0 + PyMongo 查询文档时认证失败的解决思路

问题还原

能通过PyMongo获取MongoDB 5.0服务器的集合列表,但调用find()查询集合文档时触发认证失败错误:

OperationFailure: 认证失败。完整错误信息: {'ok': 0.0, 'errmsg': '认证失败。', 'code': 18, 'codeName': 'AuthenticationFailed', ......}

可能的原因及解决方法

  • 账号权限不足
    即使能连接服务器并查看集合列表,也不代表账号拥有目标数据库的读写权限。登录MongoDB Shell执行以下操作:

    1. 切换到admin数据库:use admin
    2. 查看账号权限:db.getUser("你的用户名")
    3. 如果缺少目标数据库的权限,执行授权命令:
      db.grantRolesToUser("你的用户名", [{role: "readWrite", db: "mydatabase"}])
      
  • 认证机制不匹配
    MongoDB 5.0默认使用SCRAM-SHA-256认证机制,而你的连接字符串指定了SCRAM-SHA-1,可能导致认证失败。尝试两种修改方式:

    • 去掉authMechanism参数,让PyMongo自动协商匹配的机制:
      import pymongo
      myclient = pymongo.MongoClient("mongodb+srv://username:password@hostname/?ssl=false&serverSelectionTimeoutMS=50000&connectTimeoutMS=10000&authSource=admin")
      mydb = myclient["mydatabase"]
      mycol = mydb["customers"]
      for x in mycol.find():
          print(x)
      
    • 显式指定SCRAM-SHA-256:
      import pymongo
      myclient = pymongo.MongoClient("mongodb+srv://username:password@hostname/?ssl=false&serverSelectionTimeoutMS=50000&connectTimeoutMS=10000&authSource=admin&authMechanism=SCRAM-SHA-256")
      mydb = myclient["mydatabase"]
      mycol = mydb["customers"]
      for x in mycol.find():
          print(x)
      
  • authSource配置错误
    如果你的账号是在mydatabase而非admin数据库下创建的,需要将authSource修改为目标数据库名称:

    myclient = pymongo.MongoClient("mongodb+srv://username:password@hostname/?ssl=false&serverSelectionTimeoutMS=50000&connectTimeoutMS=10000&authSource=mydatabase&authMechanism=SCRAM-SHA-256")
    
  • 账号密码存在URL特殊字符
    如果用户名或密码包含@、:、/等特殊字符,需要进行URL编码后再填入连接字符串。比如密码是pass@123,要转成pass%40123。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:50:08