Mongo“身份验证失败”仅适用于远程连接。本地工作正常

Posted

技术标签:

【中文标题】Mongo“身份验证失败”仅适用于远程连接。本地工作正常【英文标题】:Mongo "auth failed" Only for Remote Connections. Local Works fine 【发布时间】:2015-09-14 04:28:05 【问题描述】:

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

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

也就是说,当我尝试使用远程连接重复此操作时,我反复收到来自 MongoDB 的“身份验证失败”错误。

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

...

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

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

显然,在生产中我希望能够进行身份验证。对于远程和本地身份验证之间存在差异的原因,你们有什么建议吗?

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题。

我的问题:

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

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

尝试检查您的本地 shell 和远程服务器版本:

mongo --version
mongod --version

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

【讨论】:

谢谢!我忘记了我发布过这个。但这确实是问题所在。很高兴我不是唯一一个因此而挂断电话的人。 你节省了我的时间【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

如果您使用的是 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】:

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

【讨论】:

【参考方案5】:

这主要是出于安全原因。

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

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

希望我能帮上忙。

【讨论】:

那我该如何启用远程访问? wiki中有记载(只需要将绑定地址改为0.0.0.0):wiki.bitnami.com/Components/mongoDB#section_6 是的。试过了。它没有解决身份验证问题。仅当我完全禁用 mongodb.config 中的 auth 参数时,更改绑定地址才允许我访问远程 mongohost。但它没有解决有关远程访问的问题。 您是否允许通过 Amazon EC2 中的安全组通过端口进行连接?如果您不这样做,那么您使用 MongoDB 的端口很可能会被阻止。您可以查看此页面以获取更多信息:docs.aws.amazon.com/AWSEC2/latest/UserGuide/… 是的。我也这样做了。而且我知道该端口是可访问的,因为当我在 mongoconfig 中禁用该 auth 参数时,我可以正常连接。问题似乎以 mongodb 为中心?【参考方案6】:

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

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

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

【讨论】:

以上是关于Mongo“身份验证失败”仅适用于远程连接。本地工作正常的主要内容,如果未能解决你的问题,请参考以下文章

远程调试:目标计算机无法连接回此计算机。身份验证失败

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

Docker mongo 身份验证失败,带有 URI

Android Geocoder 是不是仅适用于互联网连接?

身份验证失败,因为远程方已关闭传输流

HTML5 Websocket HTTP身份验证失败;没有有效的凭据可用