1. 程式人生 > >java使用“使用者名稱+密碼”連線mongodb,認證失敗的問題解決

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