MongoDB shell命令行身份验证失败

23

我使用这个教程设置了带认证的副本集。我设置了密钥文件、管理员用户和其他用户。一切都很顺利 - 匿名访问已禁用,我可以登录。

$ mongo
MongoDB shell version: 2.6.1
connecting to: test
Error while trying to show server startup warnings: not authorized on admin to execute     command { getLog: "startupWarnings" }
rs0:PRIMARY> use admin
switched to db admin
rs0:PRIMARY> db.auth("USERNAME","PASSWORD")
1
rs0:PRIMARY> 

使用我创建的用户凭证。

但我无法从命令行登录。

$ mongo -u 'USERNAME' -p 'PASSWORD'
MongoDB shell version: 2.6.1
connecting to: test
2014-05-18T14:23:47.324+0200 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 } at   src/mongo/shell/db.js:1210
exception: login failed

使用相同的凭据。我在文档或这里的SO上没有找到任何有用的内容。

2个回答

59

你示例中执行的内部验证是针对 admin 数据库进行的。上述命令行未指定数据库,因此正在针对默认数据库 test 进行身份验证。请改用以下方式通过命令行对 admin db 进行身份验证:

```bash mongo --authenticationDatabase admin -u username -p password ```
mongo admin -u 'USERNAME' -p 'PASSWORD'

如果服务器不在本地主机上,则可以使用以下方法:

mongo your_host_name:your_port/admin -u 'USERNAME' -p 'PASSWORD'

1
是的,我不会想到那个...谢谢,它有效 :-) - Michal Artazov
2
这个问题和答案值得得到很多赞,因为在Mongo文档中没有明确定义。 - Thomas Browne
难道不应该是:mongo your_host_name:your_PORT/admin -u 'USERNAME' -p 'PASSWORD' - sweisgerber.dev
1
很好的发现 @sebweisgerber - 我会修复它。 - James Wahlin

1
也许因为更新,现在与最初回答这个问题时不同,只有将用户名/密码用双引号括起来才能成功进行身份验证。例如,
mongo admin -u "myName" -p "myPassword"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接