java使用“用户名+密码”连接mongodb,认证失败的问题解决

时间:2023-01-21 09:01:37

项目中,使用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数据库(增、删、查、改),可查看博主另一篇文章:


Fork me on Github:https://github.com/550690513/MongoDB-test