MongoDB只允许我在没有身份验证的情况下远程连接,即使配置文件中的auth=true也是如此

MongoDB只允许我在没有身份验证的情况下远程连接,即使配置文件中的auth=true也是如此,mongodb,authentication,Mongodb,Authentication,从主机内登录MongoDB工作正常,但如果我尝试从远程位置登录,只有在不提供用户名和密码的情况下,它才允许我进入shell。Es: $ mongo AAA.BBB.CCC.DDD/dbname MongoDB shell version: 2.4.11 connecting to: AAA.BBB.CCC.DDD/dbname Error while trying to show server startup warnings: not authorized on admin to execu

从主机内登录MongoDB工作正常,但如果我尝试从远程位置登录,只有在不提供用户名和密码的情况下,它才允许我进入shell。Es:

$ mongo AAA.BBB.CCC.DDD/dbname 
MongoDB shell version: 2.4.11
connecting to: AAA.BBB.CCC.DDD/dbname
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
> 
但是,如果我尝试提供凭据(在主机中可以完美地工作):


我的配置文件没有任何绑定IP集,auth设置为true,我唯一想到的是主机上的mongo shell版本(工作版本)是3.0.1,而远程客户端是2.4.11。有人知道发生了什么吗?

似乎您缺少mongo AAA.BBB.CCC.DDD:27017/dbname-u username-p password中的--authenticationDatabase选项。该值应该是用户所属的数据库

您似乎缺少mongo AAA.BBB.CCC.DDD:27017/dbname-u username-p password中的--authenticationDatabase选项。该值应该是用户所属的数据库

我在MongoDB shell版本2.4.9尝试连接到远程MongoDB服务器版本3.0.6时遇到了相同的问题

删除MongoDB外壳2.4.9版和安装MongoDB外壳3.0.6版完全解决了问题

我的客户端机器运行的是Ubuntu 14.04,在运行了
sudo apt get install mongo clients
之后,我最终得到了MongoDB shell版本2.4.9,这当然不是最新版本,因此我在客户端上删除了版本2.4.9并安装了版本3.0.6,如下所示:

$ sudo apt-get remove mongodb-clients
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
$ sudo apt-get install mongodb-org-shell

在此之后,连接到以前失败的远程MongoDB服务器现在工作正常(使用bash history重新执行以前引发身份验证失败的命令)

我在MongoDB shell版本:2.4.9尝试连接到远程MongoDB服务器版本:3.0.6时遇到了相同的问题

删除MongoDB外壳2.4.9版和安装MongoDB外壳3.0.6版完全解决了问题

我的客户端机器运行的是Ubuntu 14.04,在运行了
sudo apt get install mongo clients
之后,我最终得到了MongoDB shell版本2.4.9,这当然不是最新版本,因此我在客户端上删除了版本2.4.9并安装了版本3.0.6,如下所示:

$ sudo apt-get remove mongodb-clients
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
$ sudo apt-get install mongodb-org-shell

在此之后,连接到以前失败的远程MongoDB服务器现在工作正常(使用bash history重新执行以前引发身份验证失败的命令)

实际上,我只需要执行读/写操作,所以整个目的是创建一个非管理员用户,以便从节点驱动程序客户端安全地执行该操作。还有,我只是试了一下,同样的结果。我不确定引用管理员和非管理员是为了什么。我指的是您尝试登录的用户的身份验证--authenticationDatabase指定保存用户凭据的数据库。它不是特定于管理员用户或该用户可能被授予的任何角色的。这是参考资料。[link]实际上我只需要执行读/写操作,所以整个目的是创建一个非管理员用户,以便从节点驱动程序客户端安全地执行读/写操作。还有,我只是试了一下,同样的结果。我不确定引用管理员和非管理员是为了什么。我指的是您尝试登录的用户的身份验证--authenticationDatabase指定保存用户凭据的数据库。它不是特定于管理员用户或该用户可能被授予的任何角色的。这是参考资料。[链接]向我们展示您正在使用的创建用户命令的示例。我从未尝试在未启用身份验证的情况下登录,我打赌错误消息会有所不同,但无论如何都要仔细检查。我对集群使用密钥文件,因此对我隐式启用了auth。如果我不使用authenticationDatabase,我将无法登录。请向我们展示您正在使用的create user命令的示例。我从未尝试在未启用身份验证的情况下登录,我打赌错误消息会有所不同,但无论如何都要仔细检查。我对集群使用密钥文件,因此对我隐式启用了auth。如果我不使用authenticationDatabase,我将无法登录。谢谢。我从没想过要做你做的事。它解决了一些奇怪的问题。@houghtlin:你简直太棒了!;)谢谢你。我从没想过要做你做的事。它解决了一些奇怪的问题。@houghtlin:你简直太棒了!;)