MongoDB升级到2.6.x版本后,用户无法登录

  今天没事跑去MongoDB的官方网站逛了下,发现有新的版本,于是就决定将开发环境下的mongodb-2.4.7直接升级到最新版本2.6.5版本。升级倒是异常快速,但使用客户端登录的时候就傻眼了,账号、密码都正确,就是死活登录不了。我用的是MongoVUE 1.6.9,报错如下:

MongoDB升级到2.6.x版本后,用户无法登录_第1张图片

再看看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/

创建用户之后,就可以正常登录了。遇到问题,还是多看官方文档,有时候百度真的不管用抓狂

你可能感兴趣的:(mongodb,Mechanism,MONGODB-CR)