mysql TDE 数据透明加密步骤_MySQL

 

如果创建需要存储和检索数据的软件应用,则很可能必须使用数据库。除非是内存数据库,否则数据库会将数据作为文件存储在磁盘上。您的应用程序可能正在远程服务器上运行,而数据库也位于远程服务器上。您的应用程序可能会收集敏感数据,例如密码、银行帐户数据和健康数据等。想象一下,黑客以某种方式登录到数据库服务器并窃取了数据库文件。现在,不幸的是,黑客能够通过读取该文件来访问您的所有信息。那么,您如何克服这个问题呢?

加密来拯救

日常网络通信中通常使用的加密,目的都是对第三方隐藏数据。加密一般通过给定密钥对数据进行加密,只有知道正确密钥的人才能阅读真实信息。加密可以是对称的也可以是非对称的。在这种情况下,我们只需要对称加密,因为用户不需要生成共享密钥。

克服此问题的最简单解决方案是存储加密的数据,而不是将其存储为普通文件。但是,加密整个文件不是一个可行的解决方案,因为它需要解密整个数据库文件以执行每个SQL查询。这基本上是不可行的。当然,我们无需加密整个文件,可以基于数据库页面将数据库数据作为块进行加密。页面是数据库中最小的事务单位。页面大小一般为4KB,用于存储数据库中的Btree节点。这些节点可以是表行的集合或用于索引的键。

透明数据加密如何工作?

现在,将数据保存在远程文件上已不是问题,因为现在我们知道我们可以以加密形式存储数据。接下来,我们将讨论所有内容如何组合在一起。为此,让我们看看MySQL如何实现此功能。

mysql TDE 数据透明加密步骤_数据库_02

在这里,应用程序需要在MySQL服务器中存储表。它将SQL查询发送到MySQL服务器。MySQL服务器读取数据库页面以评估SQL表达式。但是,Page是加密格式。现在数据库需要找到要解密页面的相关密钥。显然,您需要将此密钥保存在安全的地方。密钥保管库用于存储此类密钥、证书和密码。MySQL可以从Oracle Key Vault中读取密钥并解密页面,然后执行SQL查询。如果对Pages进行了任何修改,它将对页面进行加密并将其保存在文件中。这里,AES算法使用CBC模式用于加密和解密数据。

Key Vault

mysql TDE 数据透明加密步骤_mysql TDE 数据透明加密步骤_03

TDE集中管理示例

密钥库提供集中存储,即使在分布式数据库中也可以存储密钥。不必为多个TDE要求使用单独的密钥,而是可以维护一个主密钥。除存储密钥外,密钥库还提供了一种管理角色的功能。以下是Oracle Key Vault中使用的角色。

  1. 系统管理员:有权创建,修改和删除用户。它可以向系统添加新的端点。此外,该角色还负责计划备份和设置高可用性。
  2. 密钥管理员:控制用户和端点对虚拟钱包的访问。它可以管理用户组和端点组。
  3. 审计员:具有对所有安全对象的读取访问权限。它负责管理审核记录。

 

优缺点

似乎TDE是一种防范黑客攻击数据的好方法。但是,当在生产中使用TDE时,它既有优点也有缺点。

优点

  1. 易于实施
  2. 应用程序无需更改
  3. 镜像库、Alayws On和日志传送等功能都可以与TDE一起使用

缺点

  1. 数据仅在静止状态下受保护。数据库服务器仍然可以读取您的数据和密钥。
  2. 不需要隐藏的数据也以加密形式存储。
  3. 加密开销对性能有一定影响。
  4. 数据库备份时的压缩可能会比较繁琐

 

其他数据库加密方法

除了使用TDE隐藏页面级别的数据外,还可以使用列级别加密。在这种情况下,数据库将加密列而不是页面。与TDE相比,这使列级加密更加灵活。此外,数据库可以使用单独的密钥来加密每个列。使用多个密钥加密数据库,会对数据库的性能造成一定影响。

结论

TDE通过使用加密来保护远程数据库服务器中的数据。TDE的目的是在数据库文件级别(静止时)提供安全数据。几乎所有的商业数据库都可以使用TDE保护数据。即使您使用TDE来保护数据库免受黑客攻击,您仍然需要采取措施从其他可能的手段(例如XSS攻击,SQL注入、重放攻击等)中保护数据。运行在网络上的软件需要更高的安全性,而不是当作单个桌面应用一样运行。因此,整个软件的设计上应该考虑更严格的安全防护,以便为最终用户提供完全安全的平台。