今天没事跑去MongoDB的官方网站逛了下,发现有新的版本,于是就决定将开发环境下的mongodb-2.4.7直接升级到最新版本2.6.5版本。升级倒是异常快速,但使用客户端登录的时候就傻眼了,账号、密码都正确,就是死活登录不了。我用的是MongoVUE 1.6.9,报错如下:
再看看mongoDb的日志,的确是报异常了:
2014-11-07T21:06:44.749+0800 [initandlisten] connection accepted from 127.0.0.1:9374 #4 (1 connection now open) 2014-11-07T21:06:44.750+0800 [conn4] authenticate db: kayo { authenticate: 1, user: "root", nonce: "xxx", key: "xxx" } 2014-11-07T21:06:44.750+0800 [conn4] Failed to authenticate root@kayo with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user root@kayo 2014-11-07T21:06:44.751+0800 [conn4] end connection 127.0.0.1:9374 (0 connections now open)
出现这个错误,在官方文档也找到了解释,原来在2.6版本做了很大的改进,其改进涉及到核心、存储、网络、查询和安全性等多方面,自然,其用户登录认证机制也发生了改变,db.system.users的schema也是是不同的,并且还增加了权限role的支持。
好吧,那么就动手解决这个问题吧!因为数据库启用了--auth,所以必须先去掉--auth参数,把数据库重启一遍,创建一个mongDB的系统管理员账号,系统管理员账号创建好后,再加上--auth参数重启。创建mongDB系统管理员账号的操作如下:
> use admin > db.createUser( { user: "admin", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
加上--auth参数重启后,以刚才创建的admin用户登录:
> mongo > use admin > db.auth("admin", "123456") 1
查看账号admin的用户信息与权限:
db.runCommand( { usersInfo:"admin", showPrivileges:true } )
接下来就是重点了,我的目标数据库是kayo,现在是该数据库无法登录,所以要为kayo数据库创建一个账号,并指定dbOwner权限,操作如下:
> use kayo > db.createUser( { "user": "root", "pwd": "123456", "roles":[ { "role": "dbOwner", "db": "kayo" } ] } )
关于mongoDB权限,可以查看官方文档:http://docs.mongodb.org/manual/reference/built-in-roles/
创建用户之后,就可以正常登录了。遇到问题,还是多看官方文档,有时候百度真的不管用