Mongo“auth failed”仅用于远程连接。本地工程很好

问题描述 投票:6回答:5

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

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

也就是说,当我尝试使用远程连接重复此操作时,我反复向MongoDB发出“auth failed”错误。

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

...

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

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

显然,在生产中我希望能够进行身份验证。您是否有人建议为什么远程和本地身份验证之间存在差异?

mongodb authentication amazon-ec2 remote-access bitnami
5个回答
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
投票

在服务器和客户端上安装相同的版本为我解决了问题。正如@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的详细信息


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

0
投票

这主要是出于安全原因。

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

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

希望我帮忙。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.