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"})

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

 

 

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值