java使用“使用者名稱+密碼”連線mongodb,認證失敗的問題解決
阿新 • • 發佈:2018-11-07
專案中,使用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資料庫(增、刪、查、改),可檢視博主另一篇文章:
Fork me on Github:https://github.com/550690513/MongoDB-test