mLab 上的 MongoDB 身份验证失败

Posted

技术标签:

【中文标题】mLab 上的 MongoDB 身份验证失败【英文标题】:MongoDB on mLab authentication fails 【发布时间】:2018-01-19 12:29:39 【问题描述】:

按照http://docs.mlab.com/#create-sub 中的步骤创建了一个新的 mLab 帐户并创建了一个数据库。尝试使用 mongo shell 和 mongoose Node.js 模块连接到数据库,但在这两种情况下我都看到“身份验证失败”错误。

在 Mongo shell 中,命令是,我已经仔细检查了凭据

mongo ds012345.mlab.com:56789/dbname -u dbuser -p dbpassword

错误:

MongoError: authentication fail
at Function.MongoError.create (E:\Gatsby\notmongoose\node_modules\mongodb-core\lib\error.js:31:11)

使用猫鼬

var mongoose = require('mongoose')
, Admin = mongoose.mongo.Admin;

var uri = '<correct mongo uri here>';

var connection = mongoose.createConnection(uri,
    
User: '<uname>',
Password: '<pwd>'
);
connection.on('open', function() 

console.log('connection established!!!');

new Admin(connection.db).listDatabases(function(err, result) 
    console.log('listDatabases succeeded');
    console.log(err);
    console.log(result); 
);

);

错误:: MongoConnect 错误 MongoError:authentication failed

还有什么需要在 mLab 控制台上完成或我可能做错或遗漏的任何其他事情吗?

【问题讨论】:

您是否为数据库创建了新用户?或 dbuserdbpassword 是您的 mLab 帐户凭据吗? 没错,必须为其连接的数据库添加一个新用户。 【参考方案1】:

您需要在 mlab 帐户中为数据库创建一个新用户。并在 mlab 帐户上使用该创建的用户登录。然后单击特定数据库并单击用户选项卡,如下图所示:

现在填写表格并为数据库创建用户。见下图:

现在,在代码中使用以下字符串进行连接:

var mongoose = require('mongoose');

var mongoDB = "mongodb://<username>:<password>@ds241489.mlab.com:41489/<DB Name>";

mongoose.connect(mongoDB, 
    useMongoClient: true
);

var db = mongoose.connection;

db.on('error', console.error.bind(console, 'MongoDB connection error:'));

【讨论】:

【参考方案2】:

我遇到了同样的问题,就我而言,这是客户端版本兼容性的问题,正如 here 所解释的那样。

我的 mLab mongo 数据库是 3.4.9 版,但我拥有的来自官方 Ubunty Xenial 存储库的客户端命令行版本是 2.6.10 版。

即使使用的凭据(数据库凭据,而不是 mlab 用户凭据)正确,也会出现“身份验证失败”错误。

【讨论】:

事实证明这正是我的问题。我有 2.6.something,可能是由于 Linux Mint 中一个简单的 apt-get 造成的。因此,我使用docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu 的文档获得了 3.6.2,瞧,身份验证突然成功。非常感谢。 这也是我的问题。 @Ashish mongo --version @JulianCerruti mongodb 3.6 版【参考方案3】:

您可能正在为dbuserdbpassword 使用您的mLab 凭据。

您应该在使用 mLab 的 Web 界面时为数据库创建一个新用户,并尝试使用该用户登录。

以下是在 mLab 中为数据库创建用户的方法:

    选择数据库 切换到用户标签 点击add database user

【讨论】:

【参考方案4】:
 var mongoose = require('mongoose');

 var mongoDB = "mongodb://user:123456@ds114989.mlab.com:13936/brary";

 mongoose.connect(mongoDB, 
    useMongoClient: true
 );

 var db = mongoose.connection;

 db.on('error', console.error.bind(console, 'MongoDB connection error:'));

注意: 您需要在 Mlab 上为您的数据库创建一个用户。这不是您在 Mlab 上的帐户登录详细信息。 这里我的 替换为 userdbpassword 替换为 123456 如果您的密码包含像@这样的特殊字符,#你需要通过括起来'dbuser':'dbpassword'来转义它

【讨论】:

我认为 Mlab 或一般数据库的大多数新用户都错过了这一点。您的 Mlab 用户与您的数据库实例用户不同,必须为您创建的每个数据库创建一个单独的用户。 感谢您花时间在这个答案上。我浪费了整整一天的时间来解决这个问题,终于找到了解决这个问题的答案。谢谢你 【参考方案5】:

从 Robomongo / Robo 3T 连接?确保身份验证机制是 SCRAM-SHA-1

【讨论】:

【参考方案6】:

您确定使用您的数据库用户名和密码吗? 因为在大多数情况下,人们使用他们的帐户用户名。

选择您的数据库并单击用户,然后您可以找到您的数据库用户名

【讨论】:

以上是关于mLab 上的 MongoDB 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

试图从 localhost 服务器连接 mLAB DB?身份验证失败

Golang 和 MongoDb 远程访问失败(服务器在 SASL 身份验证步骤返回错误:身份验证失败。)

Golang 和 MongoDb 远程访问失败(服务器在 SASL 身份验证步骤返回错误:身份验证失败。)

尝试保存到 mongodb 时身份验证失败

(节点:32032)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):MongoError:身份验证失败

MongoError:身份验证失败。 NestJs MongoDb 图集