App下載

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

特級(jí)不保護(hù)動(dòng)物 2021-09-10 15:53:40 瀏覽數(shù) (2965)
反饋

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

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

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

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

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

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

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

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

啟用加密

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

RavenDB 安裝向?qū)? src=

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

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

是的,它看起來(lái)很簡(jiǎn)單。

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

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

RavenDB 中的密鑰

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

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

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

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

密鑰管理真的很重要

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

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

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

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

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

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

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

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

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

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

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

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

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

加密或不加密

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

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


0 人點(diǎn)贊