在RavenDB中怎么确保数据库安全?确保数据库安全的方法分享!

2021-09-10 15:53:40 浏览数 (3418)

RavenDB 如何成功保护传输中和静止状态的数据库?

据估计,到 2020 年,网络犯罪已使全球经济损失超过 1 万亿美元,因此数据库安全从未如此重要。为了正确保护数据库,必须保护服务器和节点之间传输的数据以及服务器上的静止数据。

静态加密可保护存储在服务器上的数据,防止其被恶意查看、窃取或以其他方式访问。例如,如果您的磁盘丢失或被盗,攻击者将可以完全访问您的数据。但是,加密后数据将无法读取,攻击者只会将其视为随机噪声。

RavenDB 如何处理静态加密

数据库安全的一个常见问题是它可能变得太复杂而难以理解和实现。结果,它经常被推迟、遗忘或完全放弃。RavenDB 的解决方案是在后台处理安全问题,只需要用户在设置时点击几下即可完全保护数据库。(当然,与 RavenDB 中的大多数事情一样,如果您愿意,您可以选择获得更多的实践机会。)

RavenDB 使用一种名为XChaCha20Poly1305 的经过身份验证的加密方案,其密钥为 256 位。XChaCha20Poly1305 的细节远远超出了本文的范围,但重要的是它的工作非常好,已经过行业专家的彻底审查,并由 IETF(互联网工程任务组)标准化.

数据在尽可能低的层——存储层——使用 RavenDB 自己定制的存储引擎进行加密沃龙。这一层的加密对服务器的其他级别是完全透明的,这意味着您永远不必处理它的复杂性。

在这一层执行加密的另一个优势是它的速度要快得多,这有助于抵消加密的固有性能成本。 

启用加密

如果它以未加密的形式传输数据以供全世界查看,那么拥有加密数据库就没有多大意义。为避免这种失误,RavenDB 要求您启用身份验证和 HTTPS 以创建加密数据库。好消息是,当您在 RavenDB 设置向导中选择安全模式时,会自动设置身份验证和 HTTPS。

RavenDB 安装向导

如果您希望以自己的方式设置身份验证,可以按照此处提供的说明进行操作。

进入安全模式后,您可以使用工作室创建加密数据库,如下图所示,或使用 REST API 和客户端 API 手动创建。

是的,它看起来很简单。

注意:您不能在现有数据库上启用加密,必须在创建时完成。但是,您可以导出数据库,然后将数据导入新的加密数据库。

在此步骤之后,您将获得数据库密钥。

RavenDB 中的密钥

键是一个简短的、看起来随机的字符串,可用于以数学方式将您的数据转换为无法识别的格式并返回。 

当您在工作室中创建加密数据库时,您将获得文本形式的密钥和可打印的二维码。保存它非常重要,否则,您将永远不会再看到它。 

访问 RavenDB 服务器上的数据不需要密钥:这取决于经过身份验证的用户的访问权限。但是,您确实需要关键功能的密钥,例如从备份中恢复数据库和在服务器之间移动数据文件。

如果您使用 API 创建数据库,您可以在此处找到有关密钥的更多信息

密钥管理真的很重要

你知道当你把自己锁在房子、汽车或酒店房间之外是什么感觉吗?将自己锁定在数据库之外会更糟糕。

将加密数据库中的数据转换回可读格式的唯一方法是您知道加密密钥。如果您丢失了它,您可能永远无法再次访问您的数据。曾经。

RavenDB 在内部保存密钥,并将使用它来存储和检索数据。但是,如果您需要从备份中恢复、重建服务器或从灾难中恢复,您绝对需要密钥。

保护您的密钥安全的重要性怎么强调都不为过,这不仅是为了您不会丢失它,而且是为了防止其他人获得它并访问您的数据库。

将密钥的物理副本锁在一个非常安全的位置是一种简单且非常安全的存储密钥的方法。毕竟你不能侵入一个上锁的柜子。这就是为什么 RavenDB 以可打印的 QR 码的形式为您提供密钥的原因。 

RavenDB 中的每个数据库都有自己的密钥,所有这些数据库密钥都由服务器主密钥加密。根据您的操作系统,此服务器主密钥的加密方式不同。对于 Windows,它由与 Windows 密码相关的 DPAPI 加密,而对于 Linux,它由文件系统权限处理。最终结果是一样的:确保只有创建数据库的用户才能访问密钥。 

如果您想通过自己的方法存储和检索它,您还可以告诉 RavenDB 运行指定的可执行文件来获取服务器主密钥。这可用于设置与 HSM、密钥保管库或基于云的密钥管理系统的集成。

您的数据未通过数据库密钥加密。相反,它由从数据库密钥生成的派生密钥加密。它们的创建方式无法对其进行逆向工程以计算出数据库密钥,并且具有单独的密钥可确保如果攻击者确实以某种方式找出了一个密钥,则他们无法在其他任何地方使用它。

尽管它们很重要,但您很少需要实际使用您的密钥。您只需要在特殊情况下使用它们,例如从备份中恢复数据库,或者如果您想使用相同的数据库密钥将节点添加到数据库中。

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

启用加密后,纯文本数据永远不会写入磁盘。数据仅在活动事务期间在内存中解密,即便如此,也只解密事务所需的特定数据。当操作系统内存不足时,它可能会将内存中的数据发送到磁盘,但该数据仍将以加密形式存在。事务完成后,立即擦除相关内存。 

仅使用加密数据的例外是用于压缩、恢复和其他此类功能的特殊临时缓冲区。这些文件必须未加密地存储在内存中,但是,它们保存在锁定的内存区域中,以便操作系统不会将它们分页到磁盘并且数据不会泄漏。如果没有足够的物理 RAM 可用于 RavenDB 锁定,则锁定内存中的数据可能会导致失败,因此如果 RAM 有限,您可能希望阅读更多内容并在此处了解如何更改相关设置。

默认情况下,服务器存储未加密。它包含服务器范围的信息,如数据库记录和比较交换值。它还存储数据库密钥,尽管这些密钥是加密存储的。如有必要,您可以按照此处说明启用服务器存储加密。 

加密或不加密

在设置过程中只需点击几下即可获得强大而全面的加密,您可能会想在您创建的每个数据库上启用它。在大多数情况下,这是正确的选择。然而,值得记住的是,安全总是有代价的。 

在 RavenDB 中,对于大多数典型场景,加密的性能成本仅为 15-20%,并且会使用一些额外的内存来临时保存解密的数据。这些是保护数据安全的小额费用,因此除非您绝对确定不需要加密,否则强烈建议您将其打开。