文档主页
MySQL 8.4 参考手册
相关文档 下载此手册

MySQL 8.4 参考手册  /  MySQL 8.4 常见问题解答  /  MySQL 8.4 常见问题解答:InnoDB 数据静态加密

A.17 MySQL 8.4 常见问题解答:InnoDB 数据静态加密

A.17.1. 对于有权查看数据的用户,数据是否会被解密?
A.17.2. InnoDB 数据静态加密的开销是多少?
A.17.3. InnoDB 数据静态加密使用哪些加密算法?
A.17.4. 是否可以使用第三方加密算法来代替 InnoDB 数据静态加密功能提供的算法?
A.17.5. 是否可以加密索引列?
A.17.6. InnoDB 数据静态加密支持哪些数据类型和数据长度?
A.17.7. 数据在网络上是否仍然是加密的?
A.17.8. 数据库内存中包含明文数据还是加密数据?
A.17.9. 如何知道要加密哪些数据?
A.17.10. InnoDB 数据静态加密与 MySQL 已提供的加密函数有何不同?
A.17.11. 可移植表空间功能是否与 InnoDB 数据静态加密一起使用?
A.17.12. 压缩是否与 InnoDB 数据静态加密一起使用?
A.17.13. 我可以使用 mysqldump 来处理加密表吗?
A.17.14. 如何更改(轮换、重新加钥)主加密密钥?
A.17.15. 如何将数据从明文 InnoDB 表空间迁移到加密的 InnoDB 表空间?

A.17.1.

对于有权查看数据的用户,数据是否会被解密?

是的。 InnoDB 数据静态加密旨在透明地在数据库内应用加密,不会影响现有应用程序。以加密格式返回数据会破坏大多数现有应用程序。 InnoDB 数据静态加密提供了加密的好处,而不会产生与传统数据库加密解决方案相关的开销,这些解决方案通常需要对应用程序、数据库触发器和视图进行昂贵且重大的更改。

A.17.2.

InnoDB 数据静态加密的开销是多少?

没有额外的存储开销。根据内部基准测试,性能开销仅占个位数百分比的差异。

A.17.3.

InnoDB 数据静态加密使用哪些加密算法?

InnoDB 数据静态加密支持高级加密标准 (AES256) 块级加密算法。它使用电子密码本 (ECB) 块加密模式进行表空间密钥加密,并使用密码分组链接 (CBC) 块加密模式进行数据加密。

A.17.4.

是否可以使用第三方加密算法来代替 InnoDB 数据静态加密功能提供的算法?

否,不能使用其他加密算法。提供的加密算法被广泛接受。

A.17.5.

是否可以加密索引列?

InnoDB 数据静态加密透明地支持所有索引。

A.17.6.

InnoDB 数据静态加密支持哪些数据类型和数据长度?

InnoDB 数据静态加密支持所有受支持的数据类型。没有数据长度限制。

A.17.7.

数据在网络上是否仍然是加密的?

当从表空间文件读取由 InnoDB 数据静态加密功能加密的数据时,会对其进行解密。因此,如果数据在网络上,则其处于明文形式。但是,可以使用 MySQL 网络加密对网络上的数据进行加密,该加密使用 SSL/TLS 对往返数据库的数据进行加密。

A.17.8.

数据库内存中包含明文数据还是加密数据?

使用 InnoDB 数据静态加密,内存中的数据会被解密,从而提供完全的透明性。

A.17.9.

如何知道要加密哪些数据?

遵守 PCI-DSS 标准要求以加密形式存储信用卡号码(主账号,或“PAN”)。违规通知法(例如,加州 SB 1386、加州 AB 1950 以及美国 43 个以上州的类似法律)要求对姓名、姓氏、驾照号码和其他 PII 数据进行加密。2008 年初,加州 AB 1298 将医疗和健康保险信息添加到 PII 数据中。此外,行业特定的隐私和安全标准可能要求对某些资产进行加密。例如,诸如药物研究结果、油田勘探结果、金融合同或执法线人个人数据等资产可能需要加密。在医疗保健行业,患者数据、健康记录和 X 光片图像的隐私至关重要。

A.17.10.

InnoDB 数据静态加密与 MySQL 已提供的加密函数有何不同?

MySQL 中有对称和非对称加密 API,可用于在数据库内手动加密数据。但是,应用程序必须管理加密密钥并通过调用 API 函数来执行必要的加密和解密操作。 InnoDB 数据静态加密不需要应用程序更改,对最终用户是透明的,并提供自动的内置密钥管理。

A.17.11.

可移植表空间功能是否与 InnoDB 数据静态加密一起使用?

是的。它支持加密的每个表一个文件表空间。有关更多信息,请参见 导出加密表空间

A.17.12.

压缩是否与 InnoDB 数据静态加密一起使用?

使用 InnoDB 数据静态加密的客户可以充分利用压缩,因为压缩是在对数据块进行加密之前应用的。

A.17.13.

我可以使用 mysqldump 来处理加密表吗?

是的。因为这些实用程序创建逻辑备份,所以从加密表转储的数据不会被加密。

A.17.14.

如何更改(轮换、重新加钥)主加密密钥?

InnoDB 数据静态加密使用两层密钥机制。当使用数据静态加密时,各个表空间密钥将存储在底层表空间数据文件的标头中。表空间密钥使用主加密密钥进行加密。主加密密钥是在启用表空间加密时生成的,并存储在数据库外部。主加密密钥使用 ALTER INSTANCE ROTATE INNODB MASTER KEY 语句进行轮换,该语句会生成一个新的主加密密钥,存储该密钥,并将该密钥轮换为使用状态。

A.17.15.

如何将数据从明文 InnoDB 表空间迁移到加密的 InnoDB 表空间?

不需要将数据从一个表空间传输到另一个表空间。要加密 InnoDB 每个表一个文件表空间中的数据,请运行 ALTER TABLE tbl_name ENCRYPTION = 'Y'。要加密通用表空间或 mysql 表空间,请运行 ALTER TABLESPACE tablespace_name ENCRYPTION = 'Y'。MySQL 8.0.13 中引入了对通用表空间的加密支持。从 MySQL 8.0.16 开始,支持对 mysql 系统表空间进行加密。