2013-11-10 64 views
1

當您嘗試根據數據庫對用戶進行身份驗證時,如果mongod未使用--auth參數啓動,則會出現以下錯誤:身份驗證失敗!如何知道mongodb是否需要驗證?

那麼有沒有辦法知道數據庫是否需要認證?

類似的東西:

 DB db = moClient.getDB(moClientURI.getDatabase());       
     if (db.needsAuthentication()){ 
      db.authenticate(username, password.toCharArray()); 
      if (db.isAuthenticated()){ 
      //do something     
      } else {} // authentication failed     
     } 
+0

,但[這](HTTP:// docs.mongodb.org/ecosystem/tutorial/authenticate-with-java-driver)和[this](http://www.mkyong.com/mongodb/java-authentication-access-to-mongodb)示例可能會有幫助。 –

+0

不,已經檢查過這些鏈接。它不會告訴你如何知道mongodb是否需要認證。當然,我可以運行一個命令並檢查是否得到'認證失敗',看看它是否需要授權,但這不是一個方便的方法。 –

+1

您可以通過db.serverCmdLineOpts()或db.adminCommand('getCmdLineOpts')啓動服務器參數 –

回答

1

剛剛得到了同樣的問題,這是我解決它的辦法:我真的不知道

private void authenticateMongo(String username, String password) throws IOException, AuthenticationException 
{ 
    DB db = mongoClient.getDB("admin"); 

    if (username.equals("") && password.equals("")) 
    { 
     //As no user name and password was supplied, we consider that authentication is disabled 
     //But now we need to validate if it's really without authentication 
     try 
     { 
      mongoClient.getDatabaseNames(); 
     } 
     catch(Exception e) 
     { 
      throw new AuthenticationException("Login or password is invalid"); 
     } 

    } 
    else 
    { 
     boolean authenticationOK = db.authenticate(username, password.toCharArray()); 

     if (!authenticationOK) 
     { 
      throw new AuthenticationException("Login or password is invalid"); 
     } 
    } 
} 
+0

db.authenticate方法在較新的Java庫中已被棄用 – jugglingcats

+0

匿名如何在除管理員之外的其他數據庫上進行身份驗證 –

+0

在這種情況下,你需要對所有的數據庫執行上面的代碼 –

相關問題