Mongo "auth failed" 仅适用于远程连接。本地工作正常
Mongo "auth failed" Only for Remote Connections. Local Works fine
我在 EC2 上有一个 Bitnami MEAN 实例 运行ning。经过多次努力,我已经能够使用本地 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>
显然,在生产中我希望能够进行身份验证。对于为什么远程和本地身份验证之间存在差异,你们有什么建议吗?
这主要是出于安全考虑。
当您可以访问本地环境时,很容易假设您是系统管理员或开发人员,因为您可以访问机器本身。
如果您无法访问本地计算机,则无法保证这一点,并且由于数据库安全性非常重要(在大多数情况下),因此不启用远程访问是有道理的。当然,您可以禁用此功能,但不建议这样做。
希望我有所帮助。
我遇到了同样的问题。
我的问题:
我的本地 mongo shell 是 v2.6.10。它使用一种名为 MONGODB-CR that has been deprecated.
的身份验证方法
我的服务器版本是v3.0.4。它使用称为 SCRAM-SHA-1 的身份验证方法。
尝试检查您的本地 shell 和远程服务器版本:
mongo --version
mongod --version
如果它们不同,请将您的本地 shell 升级到 v3。 (我不得不卸载并重新安装它。)
在服务器端和客户端安装相同的版本解决了我的问题。
正如@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 的详细信息
我之前安装了 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
以防万一有人遇到同样的问题,仅当您在另一个数据库中创建用户时才需要 authenticationDatabase。如果您在连接的数据库中创建用户,则没有问题。
所以要小心:使用然后创建用户。
如果您碰巧在管理数据库中创建了您的用户,那么是的,您需要 authenticationDatabase 标志。
如果您使用的是 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
我在 EC2 上有一个 Bitnami MEAN 实例 运行ning。经过多次努力,我已经能够使用本地 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>
显然,在生产中我希望能够进行身份验证。对于为什么远程和本地身份验证之间存在差异,你们有什么建议吗?
这主要是出于安全考虑。
当您可以访问本地环境时,很容易假设您是系统管理员或开发人员,因为您可以访问机器本身。
如果您无法访问本地计算机,则无法保证这一点,并且由于数据库安全性非常重要(在大多数情况下),因此不启用远程访问是有道理的。当然,您可以禁用此功能,但不建议这样做。
希望我有所帮助。
我遇到了同样的问题。
我的问题:
我的本地 mongo shell 是 v2.6.10。它使用一种名为 MONGODB-CR that has been deprecated.
的身份验证方法我的服务器版本是v3.0.4。它使用称为 SCRAM-SHA-1 的身份验证方法。
尝试检查您的本地 shell 和远程服务器版本:
mongo --version
mongod --version
如果它们不同,请将您的本地 shell 升级到 v3。 (我不得不卸载并重新安装它。)
在服务器端和客户端安装相同的版本解决了我的问题。 正如@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 的详细信息我之前安装了 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
以防万一有人遇到同样的问题,仅当您在另一个数据库中创建用户时才需要 authenticationDatabase。如果您在连接的数据库中创建用户,则没有问题。
所以要小心:使用然后创建用户。
如果您碰巧在管理数据库中创建了您的用户,那么是的,您需要 authenticationDatabase 标志。
如果您使用的是 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