App下載

在RavenDB中怎么確保數(shù)據(jù)庫安全?確保數(shù)據(jù)庫安全的方法分享!

特級不保護(hù)動物 2021-09-10 15:53:40 瀏覽數(shù) (3252)
反饋

RavenDB 如何成功保護(hù)傳輸中和靜止?fàn)顟B(tài)的數(shù)據(jù)庫?

據(jù)估計,到 2020 年,網(wǎng)絡(luò)犯罪已使全球經(jīng)濟(jì)損失超過 1 萬億美元,因此數(shù)據(jù)庫安全從未如此重要。為了正確保護(hù)數(shù)據(jù)庫,必須保護(hù)服務(wù)器和節(jié)點之間傳輸?shù)臄?shù)據(jù)以及服務(wù)器上的靜止數(shù)據(jù)。

靜態(tài)加密可保護(hù)存儲在服務(wù)器上的數(shù)據(jù),防止其被惡意查看、竊取或以其他方式訪問。例如,如果您的磁盤丟失或被盜,攻擊者將可以完全訪問您的數(shù)據(jù)。但是,加密后數(shù)據(jù)將無法讀取,攻擊者只會將其視為隨機(jī)噪聲。

RavenDB 如何處理靜態(tài)加密

數(shù)據(jù)庫安全的一個常見問題是它可能變得太復(fù)雜而難以理解和實現(xiàn)。結(jié)果,它經(jīng)常被推遲、遺忘或完全放棄。RavenDB 的解決方案是在后臺處理安全問題,只需要用戶在設(shè)置時點擊幾下即可完全保護(hù)數(shù)據(jù)庫。(當(dāng)然,與 RavenDB 中的大多數(shù)事情一樣,如果您愿意,您可以選擇獲得更多的實踐機(jī)會。)

RavenDB 使用一種名為XChaCha20Poly1305 的經(jīng)過身份驗證的加密方案,其密鑰為 256 位。XChaCha20Poly1305 的細(xì)節(jié)遠(yuǎn)遠(yuǎn)超出了本文的范圍,但重要的是它的工作非常好,已經(jīng)過行業(yè)專家的徹底審查,并由 IETF(互聯(lián)網(wǎng)工程任務(wù)組)標(biāo)準(zhǔn)化.

數(shù)據(jù)在盡可能低的層——存儲層——使用 RavenDB 自己定制的存儲引擎進(jìn)行加密;沃龍。這一層的加密對服務(wù)器的其他級別是完全透明的,這意味著您永遠(yuǎn)不必處理它的復(fù)雜性。

在這一層執(zhí)行加密的另一個優(yōu)勢是它的速度要快得多,這有助于抵消加密的固有性能成本。 

啟用加密

如果它以未加密的形式傳輸數(shù)據(jù)以供全世界查看,那么擁有加密數(shù)據(jù)庫就沒有多大意義。為避免這種失誤,RavenDB 要求您啟用身份驗證和 HTTPS 以創(chuàng)建加密數(shù)據(jù)庫。好消息是,當(dāng)您在 RavenDB 設(shè)置向?qū)е羞x擇安全模式時,會自動設(shè)置身份驗證和 HTTPS。

RavenDB 安裝向?qū)? src=

如果您希望以自己的方式設(shè)置身份驗證,可以按照此處提供的說明進(jìn)行操作。

進(jìn)入安全模式后,您可以使用工作室創(chuàng)建加密數(shù)據(jù)庫,如下圖所示,或使用 REST API 和客戶端 API 手動創(chuàng)建。

是的,它看起來很簡單。

注意:您不能在現(xiàn)有數(shù)據(jù)庫上啟用加密,必須在創(chuàng)建時完成。但是,您可以導(dǎo)出數(shù)據(jù)庫,然后將數(shù)據(jù)導(dǎo)入新的加密數(shù)據(jù)庫。

在此步驟之后,您將獲得數(shù)據(jù)庫密鑰。

RavenDB 中的密鑰

鍵是一個簡短的、看起來隨機(jī)的字符串,可用于以數(shù)學(xué)方式將您的數(shù)據(jù)轉(zhuǎn)換為無法識別的格式并返回。 

當(dāng)您在工作室中創(chuàng)建加密數(shù)據(jù)庫時,您將獲得文本形式的密鑰和可打印的二維碼。保存它非常重要,否則,您將永遠(yuǎn)不會再看到它。 

訪問 RavenDB 服務(wù)器上的數(shù)據(jù)不需要密鑰:這取決于經(jīng)過身份驗證的用戶的訪問權(quán)限。但是,您確實需要關(guān)鍵功能的密鑰,例如從備份中恢復(fù)數(shù)據(jù)庫和在服務(wù)器之間移動數(shù)據(jù)文件。

如果您使用 API 創(chuàng)建數(shù)據(jù)庫,您可以在此處找到有關(guān)密鑰的更多信息。

密鑰管理真的很重要

你知道當(dāng)你把自己鎖在房子、汽車或酒店房間之外是什么感覺嗎?將自己鎖定在數(shù)據(jù)庫之外會更糟糕。

將加密數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)換回可讀格式的唯一方法是您知道加密密鑰。如果您丟失了它,您可能永遠(yuǎn)無法再次訪問您的數(shù)據(jù)。曾經(jīng)。

RavenDB 在內(nèi)部保存密鑰,并將使用它來存儲和檢索數(shù)據(jù)。但是,如果您需要從備份中恢復(fù)、重建服務(wù)器或從災(zāi)難中恢復(fù),您絕對需要密鑰。

保護(hù)您的密鑰安全的重要性怎么強調(diào)都不為過,這不僅是為了您不會丟失它,而且是為了防止其他人獲得它并訪問您的數(shù)據(jù)庫。

將密鑰的物理副本鎖在一個非常安全的位置是一種簡單且非常安全的存儲密鑰的方法。畢竟你不能侵入一個上鎖的柜子。這就是為什么 RavenDB 以可打印的 QR 碼的形式為您提供密鑰的原因。 

RavenDB 中的每個數(shù)據(jù)庫都有自己的密鑰,所有這些數(shù)據(jù)庫密鑰都由服務(wù)器主密鑰加密。根據(jù)您的操作系統(tǒng),此服務(wù)器主密鑰的加密方式不同。對于 Windows,它由與 Windows 密碼相關(guān)的 DPAPI 加密,而對于 Linux,它由文件系統(tǒng)權(quán)限處理。最終結(jié)果是一樣的:確保只有創(chuàng)建數(shù)據(jù)庫的用戶才能訪問密鑰。 

如果您想通過自己的方法存儲和檢索它,您還可以告訴 RavenDB 運行指定的可執(zhí)行文件來獲取服務(wù)器主密鑰。這可用于設(shè)置與 HSM、密鑰保管庫或基于云的密鑰管理系統(tǒng)的集成。

您的數(shù)據(jù)未通過數(shù)據(jù)庫密鑰加密。相反,它由從數(shù)據(jù)庫密鑰生成的派生密鑰加密。它們的創(chuàng)建方式無法對其進(jìn)行逆向工程以計算出數(shù)據(jù)庫密鑰,并且具有單獨的密鑰可確保如果攻擊者確實以某種方式找出了一個密鑰,則他們無法在其他任何地方使用它。

盡管它們很重要,但您很少需要實際使用您的密鑰。您只需要在特殊情況下使用它們,例如從備份中恢復(fù)數(shù)據(jù)庫,或者如果您想使用相同的數(shù)據(jù)庫密鑰將節(jié)點添加到數(shù)據(jù)庫中。

什么是加密的,什么不是?

啟用加密后,純文本數(shù)據(jù)永遠(yuǎn)不會寫入磁盤。數(shù)據(jù)僅在活動事務(wù)期間在內(nèi)存中解密,即便如此,也只解密事務(wù)所需的特定數(shù)據(jù)。當(dāng)操作系統(tǒng)內(nèi)存不足時,它可能會將內(nèi)存中的數(shù)據(jù)發(fā)送到磁盤,但該數(shù)據(jù)仍將以加密形式存在。事務(wù)完成后,立即擦除相關(guān)內(nèi)存。 

僅使用加密數(shù)據(jù)的例外是用于壓縮、恢復(fù)和其他此類功能的特殊臨時緩沖區(qū)。這些文件必須未加密地存儲在內(nèi)存中,但是,它們保存在鎖定的內(nèi)存區(qū)域中,以便操作系統(tǒng)不會將它們分頁到磁盤并且數(shù)據(jù)不會泄漏。如果沒有足夠的物理 RAM 可用于 RavenDB 鎖定,則鎖定內(nèi)存中的數(shù)據(jù)可能會導(dǎo)致失敗,因此如果 RAM 有限,您可能希望閱讀更多內(nèi)容并在此處了解如何更改相關(guān)設(shè)置。

默認(rèn)情況下,服務(wù)器存儲未加密。它包含服務(wù)器范圍的信息,如數(shù)據(jù)庫記錄和比較交換值。它還存儲數(shù)據(jù)庫密鑰,盡管這些密鑰是加密存儲的。如有必要,您可以按照此處說明啟用服務(wù)器存儲加密。 

加密或不加密

在設(shè)置過程中只需點擊幾下即可獲得強大而全面的加密,您可能會想在您創(chuàng)建的每個數(shù)據(jù)庫上啟用它。在大多數(shù)情況下,這是正確的選擇。然而,值得記住的是,安全總是有代價的。 

在 RavenDB 中,對于大多數(shù)典型場景,加密的性能成本僅為 15-20%,并且會使用一些額外的內(nèi)存來臨時保存解密的數(shù)據(jù)。這些是保護(hù)數(shù)據(jù)安全的小額費用,因此除非您絕對確定不需要加密,否則強烈建議您將其打開。


0 人點贊