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

项目中,使用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
use admin
db.system.version.findOne({"_id":"authSchema"})

java使用“用户名+密码”连接mongodb,认证失败的问题解决_第1张图片

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:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

5、新建test数据库,并为test数据库设置用户及角色(权限)

use test
db.createUser({user:"tester",pwd:"123456",roles:[{role:"dbOwner",db:"test"}]})

注意:这里给test数据库的用户名为test的用户,设置的角色为:dbOwner(具有读写权限)而非dbAdmin(不具有)!

其他mongodb角色自行百度;

 

 

6、大功告成,在项目使用用户名+密码连接即可

只要用户名、密码正确,则会认证成功;

 

 

关于在java中连接并操作mongodb数据库(增、删、查、改),可查看博主另一篇文章:

java连接并操作mongodb数据库(增、删、查、改)

 

 

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

 

 

你可能感兴趣的:(数据库,Java)