2011-06-25 77 views
1

我爲我的Java客戶端應用程序使用了Mongodb Java驅動程序。它需要連接到遠程運行的mongodb服務器。Mongodb:客戶端用戶認證安全問題

我擔心有人可以反編譯jar並找到mongodb服務器的IP地址並訪問它。但用戶需要具有讀寫權限。我應該爲每個用戶創建一個數據庫並驗證它們嗎?或者自己創建一個用戶集合?

mongo = new Mongo("mongodb.server", 27017); 
       db = mongo.getDB("mydatabase"); 
       db.authenticate("test", "password"); 

順便說一句,該db.authenticate需要炭[]作爲密碼....使得db.authenticate()不工作。

我想到的另一個解決方案是使用中間人服務器,它只能連接到mongodb。應用程序將通過HTTP POST連接到中間人服務器。

但是,我需要直接存儲在MongoDB上序列化爲JSON的Java對象,因此使用中間人服務器會讓事情變得困難。

回答

2

如果您正在將代碼部署到客戶端,那麼您可以創建每個數據庫的用戶並讓他們輸入或將其作爲資源包含在您的應用程序中(每個用戶下載都是唯一的)。

通常人們不會直接將數據庫直接暴露給他們的(不信任的)客戶端。爲了這個目的,人們可以創建REST/Remote-API,其中每個應用程序功能需要認證並且可以被授權。

0

驗證應該用「admin」db完成。請改爲使用以下內容:

mongo = new Mongo("mongodb.server", 27017); 
db = mongo.getDB("admin"); 
db.authenticate("test", "password"); 
db=mongo.getDB("mydatabase"); 
0

對硬編碼憑證進行編碼是違反安全最佳實踐的,只是不這樣做。像Scott提到的那樣,Web服務層是最好的方式。

我去了一個MongoDB用戶會議,被告知他們正在開發第三方認證系統(活動目錄/ ldap等)。一旦可用,您可以使用諸如Windows集成身份驗證等的東西(假設驅動程序支持它),或者至少使用LDAP的密碼驗證