我有一個基本的網絡應用程序,爲系統的每個「租戶」使用單獨但相同的DB。有一個主數據庫包含一個將每個用戶鏈接到他們的數據庫副本的表。我應該在哪裏以及如何存儲租戶數據庫密碼?
目前,我已將所有租戶數據庫連接詳細信息以明文形式存儲在主表中。我知道它不好,只是一個臨時措施,所以我可以繼續編寫功能。
我只能想到兩種方法來確保連接細節(見下文),這兩種方法似乎有缺陷,所以我希望得到一些建議,如果你不介意的話,請嗎?
使用某種形式的鹽和散列方法來存儲密碼,與存儲在應用程序的本地文件的密鑰訪問。
使用第三方服務(如Amazon KMS)加密整個主數據庫。
我認爲第二個選項是最安全的,但後來我在一個數據庫插件,我不完全理解和第三方服務,這會降低性能的依賴。
這兩個問題我的問題是,如果有人能夠將SELECT查詢插入我的代碼並訪問主表(所有查詢變量都綁定爲參數),它將始終解密密碼我用什麼方法。這是否總是這樣,我們只是接受,還是有另一層安全來阻擋潛在的攻擊者?
謝謝!
感謝您的諮詢!正如你所說,密碼哈希似乎是絕對必要的。我已經設法讓自己擺脫了完全數據庫加密的想法,因爲僅僅降低性能可能會導致這種特殊用例的問題。 我已經在數據庫服務器上使用了一個受限帳戶,它只提供SELECT,UPDATE和INSERT權限,但我喜歡將這些權限分解到兩個帳戶之間,並可能在今天晚些時候實現。 謝謝! – Andy
此外,不幸的是,2FA在這種情況下是矯枉過正的,它實際上是一個以移動爲中心的應用程序,所以用戶的IP地址將頻繁更改。儘管它確實是個不錯的主意,但考慮到它只有少量的工作,我可能會在這方面爲桌面用戶提供一個額外的障礙來幫助某人解決問題。移動API非常有限,所以這可能是我需要的額外保護!再次感謝! – Andy