## A.17 MySQL 8.0 常见问题解答：InnoDB 静态数据加密

[](<>)

[](<>)A.17.1. [是否为有权查看的用户解密数据？](faqs-tablespace-encryption.html#faq-tablespace-encryption-access)A.17.2. [与 InnoDB 静态数据加密相关的开销是多少？](faqs-tablespace-encryption.html#faq-tablespace-encryption-overhead)A.17.3. [InnoDB 静态数据加密使用哪些加密算法？](faqs-tablespace-encryption.html#faq-tablespace-encryption-algorithm)A.17.4。[是否可以使用第 3 方加密算法来代替 InnoDB 静态数据加密功能提供的算法？](faqs-tablespace-encryption.html#faq-tablespace-encryption-other-algorithms)A.17.5。[索引列可以加密吗？](faqs-tablespace-encryption.html#faq-tablespace-encryption-indexed-columns)A.17.6。[InnoDB 静态数据加密支持哪些数据类型和数据长度？](faqs-tablespace-encryption.html#faq-tablespace-encryption-data-types)A.17.7. [数据在网络上是否保持加密状态？](faqs-tablespace-encryption.html#faq-tablespace-encryption-network)A.17.8。[数据库内存是否包含明文或加密数据？](faqs-tablespace-encryption.html#faq-tablespace-encryption-database-memory)A.17.9。[我如何知道要加密哪些数据？](faqs-tablespace-encryption.html#faq-tablespace-encryption-data-to-encrypt)A.17.10。[InnoDB 静态数据加密与 MySQL 已经提供的加密功能有何不同？](faqs-tablespace-encryption.html#faq-tablespace-encryption-mysql-encryption)A.17.11。[可传输表空间功能是否适用于 InnoDB 静态数据加密？](faqs-tablespace-encryption.html#faq-tablespace-encryption-transportable-tablespaces)A.17.12。[压缩是否适用于 InnoDB 静态数据加密？](faqs-tablespace-encryption.html#faq-tablespace-encryption-compression)A.17.13。[我可以对加密表使用 mysqlpump 或 mysqldump 吗？](faqs-tablespace-encryption.html#faq-tablespace-encryption-mysqldump)A.17.14。[如何更改（轮换、重新加密）主加密密钥？](faqs-tablespace-encryption.html#faq-tablespace-encryption-key-rotation)A.17.15。[如何将数据从明文 InnoDB 表空间迁移到加密的 InnoDB 表空间？](faqs-tablespace-encryption.html#faq-tablespace-encryption-data-migration)

| [](<>)[](<>)<br/><br/>**A.17.1.** | 是否为有权查看的用户解密数据？ |
| :-------------------------------- | :-------------- |
|  | 是的。`InnoDB`静态数据加密旨在透明地在数据库中应用加密，而不会影响现有应用程序。以加密格式返回数据会破坏大多数现有应用程序。`InnoDB`静态数据加密提供了加密的好处，而不会产生与传统数据库加密解决方案相关的开销，传统数据库加密解决方案通常需要对应用程序、数据库触发器和视图进行昂贵且大量的更改。 |
| [](<>)[](<>)<br/><br/>**A.17.2.** | 什么是相关的开销`InnoDB`静态数据加密？ |
|  | 没有额外的存储开销。根据内部基准，性能开销相当于个位数的百分比差异。 |
| [](<>)[](<>)<br/><br/>**A.17.3.** | 使用的加密算法有哪些`InnoDB`静态数据加密？ |
|  | `InnoDB`静态数据加密支持高级加密标准 (AES256) 基于块的加密算法。它使用电子密码本 (ECB) 块加密模式进行表空间密钥加密，使用密码块链接 (CBC) 块加密模式进行数据加密。 |
| [](<>)[](<>)<br/><br/>**A.17.4。** | 是否可以使用第 3 方加密算法代替由`InnoDB`静态数据加密功能？ |
|  | 不，不能使用其他加密算法。提供的加密算法被广泛接受。 |
| [](<>)[](<>)<br/><br/>**A.17.5。** | 索引列可以加密吗？ |
|  | `InnoDB`静态数据加密透明地支持所有索引。 |
| [](<>)[](<>)<br/><br/>**A.17.6。** | 什么数据类型和数据长度`InnoDB`静态数据加密支持？ |
|  | `InnoDB`静态数据加密支持所有支持的数据类型。没有数据长度限制。 |
| [](<>)[](<>)<br/><br/>**A.17.7.** | 数据在网络上是否保持加密状态？ |
|  | 数据被加密`InnoDB`从表空间文件中读取静态数据功能时会对其进行解密。因此，如果数据在网络上，它就是明文形式。但是，可以使用 MySQL 网络加密对网络上的数据进行加密，该加密使用 SSL/TLS 对往返于数据库的数据进行加密。 |
| [](<>)[](<>)<br/><br/>**A.17.8。** | 数据库内存是否包含明文或加密数据？ |
|  | 和`InnoDB`静态数据加密，内存中的数据被解密，这提供了完全的透明度。 |
| [](<>)[](<>)<br/><br/>**A.17.9。** | 我如何知道要加密哪些数据？ |
|  | 符合 PCI-DSS 标准要求信用卡号（主帐号或“PAN”）以加密形式存储。违反通知法（例如，CA SB 1386、CA AB 1950 和美国 43 多个州的类似法律）要求对名字、姓氏、驾驶执照号码和其他 PII 数据进行加密。2008 年初，CA AB 1298 将医疗和健康保险信息添加到 PII 数据中。此外，行业特定的隐私和安全标准可能需要对某些资产进行加密。例如，药物研究结果、油田勘探结果、金融合同或执法线人的个人数据等资产可能需要加密。在医疗保健行业，患者数据、健康记录和 X 射线图像的隐私至关重要。 |
| [](<>)[](<>)<br/><br/>**A.17.10。** | 怎么`InnoDB`与 MySQL 已经提供的加密功能不同的静态数据加密？ |
|  | MySQL 中有对称和非对称加密 API，可用于手动加密数据库中的数据。但是，应用程序必须通过调用 API 函数来管理加密密钥并执行所需的加密和解密操作。`InnoDB`静态数据加密不需要更改应用程序，对最终用户透明，并提供自动化的内置密钥管理。 |
| [](<>)[](<>)<br/><br/>**A.17.11。** | 可传输表空间功能是否适用`InnoDB`静态数据加密？ |
|  | 是的。它支持加密的 file-per-table 表空间。有关详细信息，请参阅[导出加密表空间](innodb-data-encryption.html#innodb-data-encryption-exporting). |
| [](<>)[](<>)<br/><br/>**A.17.12。** | 压缩是否适用`InnoDB`静态数据加密？ |
|  | 客户使用`InnoDB`静态数据加密获得了压缩的全部好处，因为压缩是在数据块加密之前应用的。 |
| [](<>)[](<>)<br/><br/>**A.17.13。** | 我可以用吗[**mysql泵**](mysqlpump.html)要么`mysql转储`使用加密表？ |
|  | 是的。因为这些实用程序会创建逻辑备份，所以从加密表中转储的数据不会被加密。 |
| [](<>)[](<>)<br/><br/>**A.17.14。** | 如何更改（轮换、重新加密）主加密密钥？ |
|  | `InnoDB`静态数据加密使用两层密钥机制。使用静态数据加密时，单独的表空间密钥存储在底层表空间数据文件的标头中。表空间密钥使用主加密密钥进行加密。启用表空间加密时会生成主加密密钥，并存储在数据库之外。主加密密钥使用[`ALTER INSTANCE ROTATE INNODB 主密钥`](alter-instance.html)语句，它生成一个新的主加密密钥，存储密钥，并轮换密钥以供使用。 |
| [](<>)[](<>)<br/><br/>**A.17.15。** | 如何从明文迁移数据`InnoDB`表空间到加密`InnoDB`表空间？ |
|  | 不需要将数据从一个表空间传输到另一个表空间。对数据进行加密`InnoDB`file-per-table 表空间，运行[`更改表 *`tbl_name`* 加密 = 'Y'`](alter-table.html).加密通用表空间或`mysql`表空间，运行[`更改表空间 *`表空间名称`* 加密 = 'Y'`](alter-tablespace.html).MySQL 8.0.13 中引入了对通用表空间的加密支持。加密支持`mysql`系统表空间自 MySQL 8.0.16 起可用。 |
