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

使用Node.js服务器调用mLab时出现认证错误代码18求助

解决MongoDB Shell 3.6连接mLab 3.4数据库时的认证错误(代码18)

我之前碰到过一模一样的问题,当时折腾了好一会儿才搞明白——MongoDB 3.6及以上版本的shell默认使用SCRAM-SHA-256作为认证机制,但mLab上运行的3.4版本(尤其是用MMAPv1存储引擎的实例)并不支持这个新的认证方式,这就是你触发错误代码18的核心原因。

下面给你几个可行的解决方案,不管是用shell连接还是在Node.js代码里操作都适用:

1. 用MongoDB Shell连接时指定认证机制

直接在连接命令里加上--authenticationMechanism SCRAM-SHA-1参数,强制使用3.4版本支持的认证方式:

mongo mongodb://你的用户名:你的密码@mlab的主机地址:端口号/数据库名 --authenticationMechanism SCRAM-SHA-1

2. Node.js代码中配置认证机制

如果你用Mongoose:

在连接选项里明确指定authMechanism为SCRAM-SHA-1:

const mongoose = require('mongoose');

// 替换成你自己的mLab连接信息
const dbURI = 'mongodb://你的用户名:你的密码@mlab的主机地址:端口号/数据库名';

mongoose.connect(dbURI, {
  auth: {
    authMechanism: 'SCRAM-SHA-1'
  },
  // 根据你的mongoose版本添加必要的兼容选项
  useNewUrlParser: true,
  useUnifiedTopology: true
})
.then(() => console.log('数据库连接成功!'))
.catch(err => console.error('连接失败:', err));

如果你用原生MongoDB驱动:

同样在连接选项里添加authMechanism配置:

const MongoClient = require('mongodb').MongoClient;

const uri = 'mongodb://你的用户名:你的密码@mlab的主机地址:端口号/数据库名';

MongoClient.connect(uri, {
  authMechanism: 'SCRAM-SHA-1',
  useNewUrlParser: true,
  useUnifiedTopology: true
}, (err, client) => {
  if (err) {
    console.error('连接出错:', err);
    return;
  }
  
  const db = client.db('数据库名');
  console.log('成功连接到数据库');
  
  // 在这里执行你的数据库操作...
  
  client.close();
});

额外需要确认的几点

  • 别搞混了!你用的应该是数据库用户的用户名和密码,不是你登录mLab官网的账户密码,很多人在这里踩坑。
  • 确保这个数据库用户被授予了对应数据库的访问权限(至少要有read或readWrite权限)。
  • 如果以上方法都不行,可以尝试把MongoDB Shell降级到3.4.x版本,不过指定认证机制的方式更简单,不用折腾降级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:41:11