mongo3.03开启auth认证后,会有一些以前版本没有的问题,比如3.03以后mongodb加入了SCRAM-SHA-1校验方式。

前一日我发现测试新搭建的mongo开发连接不上,我用软件测试一下是不是因为ip限制原因造成的,然后并不是,但是我注意到有个认证选择,一个是SCRAM-SHA-1 一个是mongodb-cr。我才发现是不是因为认证的原因造成的,于是我查看了mongo3.03新版的信息发现是的,

> db.system.users.find()

{ "_id" : "xxx.xxx", "user" : "xxx", "db" : "xxx", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Ixxxxxxxxxxxx", "storedKey" : "xxxxxxxxxxxxx", "serverKey" : "xxxxxxxxxxxxxxxx" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "xxxxxx" } ] }

 关闭mongo

取消认证开启mongodb

> use admin 
switched to db admin 
>  var schema = db.system.version.findOne({"_id" : "authSchema"}) 
> schema.currentVersion = 3 

> db.system.version.save(schema) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

然后删除以前创建的用户

> use userdb 
switched to db userdb 
> db.dropUser("xxxxx") 

true 

再创建用户然后查看用户会显示

{ "_id" : "xxx.xxx", "user" : "xxx", "db" : "xxx", "credentials" : { "MONGODB-CR" : { "iterationCount" : 10000, "salt" : "Ixxxxxxxxxxxx", "storedKey" : "xxxxxxxxxxxxx", "serverKey" : "xxxxxxxxxxxxxxxx" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "xxxxxx" } ] }

重启mongodb就可以用了。