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

NodeJS连接Ubuntu服务器MongoDB数据库认证失败问题

MongoDB认证失败问题排查(NodeJS连接失败但Compass正常)

问题描述

我在Ubuntu服务器上部署了MongoDB,创建了admin用户,计划通过NodeJS执行建库、建表等操作。MongoDB Compass可正常连接,但NodeJS使用Mongoose连接时返回认证失败错误。

连接代码

const mongoose = require("mongoose");
mongoose.set("strictQuery", true);
//connect to db
mongoose
    .connect("mongodb://" + process.env.DB_USER_PASS + "@2.56.247.250:27017/?authMechanism=DEFAULT")
    .then(() => console.log('Connecté a la base de donné'))
    .catch((err) => console.log("Erreur de connexion :", err));

错误信息

Erreur de connexion : MongoServerError: Authentication failed.
    at Connection.onMessage (C:\Users\arnau\Desktop\messIO\node_modules\mongodb\lib\cmap\connection.js:230:30)
    at MessageStream.<anonymous> (C:\Users\arnau\Desktop\messIO\node_modules\mongodb\lib\cmap\connection.js:61:60)
    at MessageStream.emit (node:events:513:28)
    at processIncomingData (C:\Users\arnau\Desktop\messIO\node_modules\mongodb\lib\cmap\message_stream.js:125:16)
    at MessageStream._write (C:\Users\arnau\Desktop\messIO\node_modules\mongodb\lib\cmap\message_stream.js:33:9)
    at writeOrBuffer (node:internal/streams/writable:392:12)
    at _write (node:internal/streams/writable:333:10)
    at Writable.write (node:internal/streams/writable:337:10)
    at Socket.ondata (node:internal/streams/readable:766:22)
    at Socket.emit (node:events:513:28) {
  ok: 0,
  code: 18,
  codeName: 'AuthenticationFailed',
  connectionGeneration: 0,
  [Symbol(errorLabels)]: Set(2) { 'HandshakeError', 'ResetPool' }
}

解决办法

  • 指定认证数据库:admin用户创建在admin库下,默认连接会用test库认证,导致失败。修改连接字符串,添加authSource=admin参数:
    mongoose.connect(`mongodb://${process.env.DB_USER_PASS}@2.56.247.250:27017/?authSource=admin&authMechanism=DEFAULT`)
    
  • 校验账号密码格式:确认process.env.DB_USER_PASS是用户名:密码的正确格式,若密码含特殊字符(如@、&),需进行URL编码(例如@编码为%40)。
  • 确认用户权限:登录MongoDB shell,执行以下命令给admin用户授予足够权限:
    use admin
    db.grantRolesToUser("admin", [{ role: "root", db: "admin" }])
    
  • 检查MongoDB配置:打开Ubuntu服务器上的/etc/mongod.conf,确保security.authorization设置为enabled,保存后重启服务:
    sudo systemctl restart mongod
    
  • 排查网络问题:虽然Compass能连接,仍需确认NodeJS所在机器与服务器的27017端口通信正常,无防火墙拦截认证请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:25:16