2012-05-14 50 views
4

我試圖使用身份驗證連接到我的MongoDB連接到MongoDB數據庫。 我這樣做我蒙戈服務器上:Grails的 - 使用認證

use admin 
db.addUser('adminLogin','adminPassword') 
db.shutdownServer() 
exit 

然後,我開始我的服務器再次發出mongod --auth

我設置DataSource.groovy中我的數據庫配置如下:

grails { 
    mongo { 
     host = "localhost" 
     port = 27017 
     username = "adminLogin" 
     password = "adminPassword" 
     databaseName = "my DB name" 
     options { 
      autoConnectRetry = true 
      connectTimeout = 300 
     } 
    } 
} 

我得到的以下錯誤消息,當我開始我的應用程序:

ERROR context.GrailsContextLoader - Error executing bootstraps: Error creating bean 
with name 'mongoDatastore': FactoryBean threw exception on object creation; nested 
exception is org.springframework.data.mongodb.CannotGetMongoDbConnectionException: 
Failed to authenticate to database 

任何建議是最受歡迎的。 在此先感謝。

回答

13

我遇到了同樣的問題,所以我可以幫助解釋蒙戈如何做認證。你看到你做了什麼是你在管理數據庫中創建了一個管理員用戶,這很棒。但是,您嘗試直接使用不允許的管理員用戶連接到「mydb」。聲音混亂?這是因爲它。爲了更好地說明這一點,這裏有一個簡單的練習:

  1. 像上面那樣爲管理數據庫創建一個用戶。
  2. 退出蒙戈外殼
  3. 運行以下
mongo 
use myDBname 
db.auth("adminlogin", "adminpwd") 

這將失敗。但試試這個。

mongo 
use admin 
db.auth("adminlogin", "adminpwd") 
use myDBname 

這工作,因爲你切換到這個數據庫與管理背景,並沒有嘗試直接連接到它。

因此,所有你需要做的,使這項工作是直接連接到你想要的數據庫,並創建一個用戶權限在DB類似如下:

mongo 
use myDBname 
db.addUser("dblogin", "dbpwd") 

更新你的Grails與配置文件這個,我敢打賭你會工作。

注意,只是最後一部分是你的答案和解決您的問題,但因爲我這個掙扎着,想通了硬盤的方式,我認爲情況下確實有助於理解蒙戈AUTH更好。

保重

+0

感謝您的解答和詳細的解釋。非常感謝。 –

+0

確實很高興它幫助 –

+0

謝謝您花時間解釋。欣賞它。我的挫折節省了幾個小時。 –