明明db.auth
返回1,可是mongo -u admin -p
就是失败,为啥呢?
andyliwr@andyliwrPC:~/文档/xiaodiFTP/nodejs/xiaodiTodoList$ mongo
MongoDB shell version: 2.6.10
connecting to: test
> use admin
switched to db admin
> db.auth("admin", "123456")
1
> db.auth("admin", "1234535")
Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 }
0
> exit
bye
andyliwr@andyliwrPC:~/文档/xiaodiFTP/nodejs/xiaodiTodoList$ mongo -u admin -p
MongoDB shell version: 2.6.10
Enter password:
connecting to: test
2016-07-31T22:41:33.520+0800 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 } at src/mongo/shell/db.js:1287
exception: login failed
和题主遇到了同样的问题,网上找了一圈靠谱的答案就一个,亲自尝试验证有效解决问题。这里说一下解决办法,帮助其他新人采坑,也为中文社区留下点又用的东西。
之所以有这个错误很大原因是因为你直接创建了一个
role
非root
的用户,然后使用这个user去做authentication登录。Mongodb
在第一次做authentication的时候,需要首先创建一个admin
user,命令如下:完成这一步操作之后,退出
Mongodb
,结束其进程,重新启动Mongodb
:mongod --auth
或者mongod -f path/to/configfile
,用之前创建的user进行authentication验证登录mongo -u admin -p password --authenticationDatabase admin
成功登录之后,再创建拥有其他
role
的其他user
, 例如这里我创建一个有读写test
数据库权限的testuser
:之后通过创建的其他
user
再去做authentication登录的时候就不会再报以上的错误了。这里的坑就在于,
mongodb
的官方文档上写着先创建一个{role: "userAdminAnyDatabase", db:""}
的user,而实际上在开启验证模式的时候第一个需要创建的user是拥有root
角色的admin
,再通过admin
去创建其他角色的用户。这个问题唯一靠谱的答案在这里,英文好的同学可以直接去看原文