项目中,使用java“用户名+密码”连接mongodb,一直认证失败!
MongoClient mongoClient = new MongoClient(HOST, PORT); DB db = mongoClient.getDB(DB_NAME); // 认证失败auth=false boolean auth = db.authenticate(USERNAME, PASSWORD.toCharArray());最后发现是 mongodb和spring-mongodb默认的认证机制不同所导致!
特别注意:
1、mongodb的认证机制有2种:SCRAM-SHA-1和MONGODB-CR。3.0之后版本默认为:SCRAM-SHA-1;
2、spring-mongodb默认为:MONGODB-CR,并不支持设置认证方式;
解决方法:
修改mongodb的认证方式即可。1、查看auth认证方式
3:MONGODB-CR
5:SCRAM-SHA-1
db.system.version.findOne({"_id":"authSchema"})
2、删除之前设置的所有用户
db.system.users.remove({})
3、删除原auth认证方式,并设置为MONGODB-CR
db.system.version.remove({}) db.system.version.insert({"_id":"authSchema","currentVersion":3})
4、重新添加admin用户(超级管理员)
use admin db.createUser({user:"admin",pwd:"1234",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
5、新建test数据库,并为test数据库设置用户及角色(权限)
use test db.createUser({user:"test",pwd:"1234",roles:[{role:"dbOwner",db:"test"}]})
注意:这里给test数据库的用户名为test的用户,设置的角色为:dbOwner(具有读写权限)而非dbAdmin(不具有)!
其他mongodb角色自行百度;
6、大功告成,在项目使用用户名+密码连接即可
只要用户名、密码正确,则会认证成功;关于在java中连接并操作mongodb数据库(增、删、查、改),可查看博主另一篇文章: