我在Mongodb实例上新建了一个账号,账号和密码都是test,但执行` mongo —host $myhost —port $myport -u test -p test`提示Authentication failed。
Mongodb的帐号是跟数据库(DB)关联的,鉴权时需要指定帐号所属的数据库信息,假设test帐号属于admin数据库,则可使用如下命令登录:
mongo —host $myhost —port $myport -u test -p test —authenticationDatabase admin
或者
mongo —host $myhost —port $myport
mongo> use admin
mongo> db.auth(“test”, “test”)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您遇到的问题很常见,MongoDB中的用户账户确实需要与特定的数据库关联,并且在进行身份验证时,必须指定该用户的认证数据库(即该用户被创建时所在的数据库)。在您的例子中,如果test账号是在admin数据库下创建的,那么执行mongo命令时,必须明确指定--authenticationDatabase admin
参数。
您提供的解决方案是正确的:
mongo --host $myhost --port $myport -u test -p test --authenticationDatabase admin
这条命令指定了连接的主机、端口、用户名、密码以及认证数据库(admin),这样就可以成功通过认证了。
另一种方式是先不带认证信息连接到MongoDB,然后切换到相应的数据库并执行db.auth()方法进行登录认证,如您所述:
mongo --host $myhost --port $myport
mongo> use admin
mongo> db.auth("test", "test")
这种方法在交互式使用或脚本中也很常用,先连接再认证。请确保按照您的实际情况调整 $myhost
和 $myport
为实际的主机地址和端口号。