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 控制台上完成或我可能做错或遗漏的任何其他事情吗?
【问题讨论】:
您是否为数据库创建了新用户?或dbuser
和 dbpassword
是您的 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】:您可能正在为dbuser
和dbpassword
使用您的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 上的帐户登录详细信息。 这里我的 替换为 user 和 dbpassword 替换为 123456 如果您的密码包含像@这样的特殊字符,#你需要通过括起来'dbuser':'dbpassword'来转义它
【讨论】:
我认为 Mlab 或一般数据库的大多数新用户都错过了这一点。您的 Mlab 用户与您的数据库实例用户不同,必须为您创建的每个数据库创建一个单独的用户。 感谢您花时间在这个答案上。我浪费了整整一天的时间来解决这个问题,终于找到了解决这个问题的答案。谢谢你 【参考方案5】:从 Robomongo / Robo 3T 连接?确保身份验证机制是 SCRAM-SHA-1
【讨论】:
【参考方案6】:您确定使用您的数据库用户名和密码吗? 因为在大多数情况下,人们使用他们的帐户用户名。
选择您的数据库并单击用户,然后您可以找到您的数据库用户名
【讨论】:
以上是关于mLab 上的 MongoDB 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章
试图从 localhost 服务器连接 mLAB DB?身份验证失败
Golang 和 MongoDb 远程访问失败(服务器在 SASL 身份验证步骤返回错误:身份验证失败。)
Golang 和 MongoDb 远程访问失败(服务器在 SASL 身份验证步骤返回错误:身份验证失败。)
(节点:32032)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):MongoError:身份验证失败