2011-02-24 137 views
4

昨天我花了很長時間來配置我的CouchDB實例,以創建一個小應用程序,讓CouchDB爲我管理身份驗證和授權。如何安全地存儲我的CouchDB管理員密碼?

所以我結束了這樣的事情:

諸事之首我有一個服務器管理員,誰基本上是對我的CouchBD例如神。

然後,我創建了一個名爲「mydatabase」(例如)的數據庫,並添加了角色「mydatabase_dba」作爲管理員以及角色「mydatabase_user」作爲讀者。

我還創建了一個名爲「_users」的數據庫,其中包含所有數據庫管理員和用戶及其角色,以及一個名爲「_auth」的設計文檔,用於管理授權。

只有服務器管理員是該數據庫的管理員,並且我添加了具有角色「mydatabase_dba」作爲讀者的用戶。然後,對於那些瞭解它的人,我修改了「validate_doc_update」字段或「_auth」文檔,以便角色爲「mydatabase_dba」的用戶只能處理具有角色「mydatabase_user」的用戶。

所以,在這一點上總結:

  • 服務器管理仍然是神
  • 用戶角色「mydatabase_user」可以連接到「MyDatabase的」,但他們只是讀者
  • 用戶角色「 mydatabase_dba」是管理員‘MyDatabase的’
  • 用戶角色‘mydatabase_dba’可以連接到數據庫‘_users’,他們是讀者
  • 用戶角色‘mydatabase_dba’只能管理爲r的用戶在「_users」

希望這是明確的OLE「mydatabase_user」:d

我現在能做的就是創建一個不會管理用戶自己的應用程序,但讓用戶連接到CouchDB的直接(透明) 。

問題出現在它處理用戶創建/更新/刪除。

由於只有具有角色「mydatabase_dba」的用戶才能訪問「_users」數據庫並使用角色爲「mydatabase_user」的用戶,因此我需要在某些時候以此db管理員身份連接到CouchDB。

我有兩個解決方案:

  • 創建用戶界面到我的應用程序,可以讓管理員連接,做他要做

  • 使一些更多的代碼,讓應用程序自動執行,這是我更喜歡的解決方案,但問題是:我必須存儲管理員憑據...

對不起,長介紹,但我不得不描述景觀第一:)

我昨天發佈的訊息,我怎麼能保證我的應用程序和CouchDB實例之間的連接:here

我給出的解決方案是使用基於SSL的HTTP(/ TLS)來保護通信。我很好,但現在我有另一個擔心,也許我是偏執狂,但因爲我的應用程序將需要連接爲「mydatabase_dba」,我必須將其憑據存儲在某處。

但如何安全地存儲它們?正如我在以前的文章中說,即使我存儲哈希密碼,而不是明文密碼,如果攻擊者訪問我的應用程序的源代碼,他將有我的管理員憑據...

+0

請您詳細說明管理員需要執行哪些任務?如果您更詳細地解釋需求,也許可以這樣做。謝謝! – JasonSmith 2011-02-24 19:37:09

+0

理想情況下,管理員只是用來在「_users」數據庫中創建與角色管理用戶「mydatabase_user」。然後這些用戶將能夠使用「mydatabase」。我可以從「MyDatabase的」管理員列表中刪除它,這樣用戶才能訪問它,但如果攻擊者獲得了證書,即使他不能訪問「MyDatabase的」,他仍然可以搞亂所有的用戶... – Arnaud 2011-02-25 01:23:36

回答

5

應用程序應該永遠不會有一個行政權。它只應該被賦予它所需要的最小權限。如果應用程序需要一些管理權限,請確保它儘可能少。除此之外,大多數情況下,這些憑據都以純文本形式存儲在某個文件中,只有您的應用程序可以訪問該文件。

決不犯下這個文本文件到您的源代碼管理器(顛覆,Git的,等)!將文件放入正在運行的系統必須是安裝過程中的一個步驟。

+1

+1。我冒昧提醒不要在任何地方檢查那種文件。 – JasonSmith 2011-02-24 19:34:05