Mongo" auth失败"仅适用于远程连接。本地工程很好

时间:2015-06-27 07:41:41

标签: mongodb authentication amazon-ec2 remote-access bitnami

我在EC2上运行了Bitnami MEAN实例。经过大量的讨论,我已经能够使用本地shell成功连接到数据库。我创建了具有访问数据所需的所有权限的经过身份验证的用户,当我运行以下代码时 - 我可以毫无问题地访问数据库。

sudo mongo admin -u <USERNAME-p <PASSWORD>

那就是说,当我尝试使用远程连接重复此操作时,我反复给出一个&#34; auth失败&#34;来自MongoDB的错误。

mongo <HOST>:<PORT>/<DATABASE> -u <USERNAME> -p <PASSWORD>

...

这很奇怪,因为我使用与运行本地shell时完全相同的凭据。唯一的区别是我包括主机和端口信息。我已经确认,如果我在mongodb.config中禁用auth参数,我的远程连接也能正常工作。

mongo <HOST>:<PORT>/<DATABASE>

显然,在制作中我希望能够进行身份验证。你们有没有人建议为什么远程和本地认证之间存在差异?

6 个答案:

答案 0 :(得分:24)

我遇到了同样的问题。

对我来说问题是:

我的本​​地mongo shell是v2.6.10。它使用名为MONGODB-CR that has been deprecated的身份验证方法。

我的服务器版本是v3.0.4。它使用名为SCRAM-SHA-1的身份验证方法。

尝试使用以下命令检查本地shell和远程服务器版本:

mongo --version
mongod --version

如果它们不同,请将本地shell升级到v3。 (我不得不卸载并再次安装它。)

答案 1 :(得分:1)

在服务器和客户端上安装相同的版本为我解决了问题。 正如@Alexandre上面解释的那样,这可能是密码加密的问题。 MongoDB版本3.2.7

我尝试了两种方法:

mongo --host "your_host" --port "your_port" --username "your_user" --password "your_pass" --authenticationDatabase "your_admin_db"

mongo "your_host:your_port/your_db" --username "your_user" --password "your_pass" --authenticationDatabase "your_admin_db"

此外,请确保您的服务器可用于远程访问。在https://docs.mongodb.com/v3.2/reference/configuration-options/

查看有关net.bindIp的详细信息

答案 2 :(得分:1)

我以前安装了MongoDB 3.2.12版,并且能够使用以下方法连接到远程实例

mongo -u ‘<USERNAME>’ -p ‘<PASSWORD>’ --host <REPLICA_SET>/<HOST>:<PORT> admin

我正在创建一个版本为3.4.2的新集群,但无法使用相同的命令进行连接。在尝试了许多不同的选项后,我终于弄清楚我需要在admin数据库之前添加--authenticationDatabase。

mongo -u ‘<USERNAME>’ -p ‘<PASSWORD>’ --host <REPLICA_SET>/<HOST>:<PORT> --authenticationDatabase admin

答案 3 :(得分:1)

如果您使用的是MongoDB的最新版本(在我的情况下是服务器版本4.2.6 / shell版本v3.6.9),则不必像@Alexandre的示例中那样强制它们匹配。例如,如果您遇到此错误:

[thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1608:20

您可以使用以下语法进行连接:

mongo --host mongodb://username:password@IP:PORT/ --authenticationDatabase admin

答案 4 :(得分:0)

这主要是出于安全原因。

当您可以访问本地环境时,很容易认为您是系统管理员或开发人员,因为您可以访问本机。

如果您无法访问本地计算机,则无法保证这一点,并且由于数据库安全性非常重要(在大多数情况下),因此不启用远程访问是有意义的。当然,您可以禁用此功能,但不建议这样做。

希望我帮助过。

答案 5 :(得分:0)

如果有人遇到同样的问题,只有在另一个数据库中创建用户时才需要authenticationDatabase。如果在连接的数据库中创建用户,则没有问题。

所以要小心:使用然后创建用户。

如果您碰巧在admin数据库中创建了用户,那么您需要authenticationDatabase标志。