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
相关产品推荐
相关产品推荐

