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

