本文将探讨有关innodb表空间加密技术,该技术对于保护数据非常有用。
在MySQL 5.7中,添加了一个新功能“ Innodb表空间加密 ”以保护静态数据。这是安全性中最期待的功能。此加密支持每个表的所有文件表空间,并且不支持共享表空间。这种加密技术基于旋转密钥文件而起作用。有两种类型的密钥管理插件可用于密钥管理,它们在下面给出
- keyring_file插件 –在所有MySQL版本中可用。
- keyring_okv插件 –在MySQL企业版中可用。
架构:
Innodb表空间加密使用两层加密体系结构,其中具有主加密密钥和表空间密钥。主密钥用于加密和解密表空间密钥,而表空间密钥用于加密和解密表空间数据。这里的表空间非常安全,因为任何用户都无法看到它。
用户可以看到,主密钥存储在数据库外部。表空间键存储在受主键保护的表空间头中。对于加密的表,表空间密钥由主密钥加密并存储在表空间标头中。这里,使用的加密算法是AES,加密模式是块加密模式(CBC)。
在innodb中,页面是使用表空间密钥加密的,并且是在IO层完成的。可以修改页面的时间可能在缓冲区中,然后被刷新。因此,我们避免在页面被修改时对页面数据进行加密,而是在写入磁盘之前先进行加密。加密是由后台页面清理程序线程完成的,该线程指出查询线程不会花费更多的CPU。缓冲池保持解密状态,因为没有访问页面的开销。局限性:
- 共享/系统表空间(ibdata1)未加密。
- 二进制,撤消和重做日志未加密。(MySQL 8.0支持重做日志和撤消日志加密)。
- 高级加密标准(AES)是唯一受支持的加密算法。
- 无法将加密的表从file_per_table表空间移动或复制到不受支持的innodb表空间。
- 它仅支持InnoDB Engine。
- 在复制拓扑中,应在所有节点上启用插件(keyring)。