丹凤千字科普:mysql最新版本8.0.16(详细资料介绍)

InnoDB 支持独立表空间、通用表空间、MySQL 系统表空间、重做日志和撤销日志的静态数据加密。从 MySQL 8.0.16 开始,还为模式和通用表空间设置了加密默认值,这使得数据库管理员 (DBA) 可以控制在这些模式和表空间中创建的表是否应该被加密。
关于静态数据加密的详细信息,它使用了两层加密密钥架构,包括主加密密钥和表空间密钥。当表空间被加密时,表空间密钥被加密并存储在表空间头中。当需要访问加密的表空间数据时,InnoDB 使用主加密密钥来解密表空间密钥。InnoDB 还支持对系统表空间的加密。
关于加密先决条件,首先必须在启动时安装和配置密钥环组件或插件,以确保它们在 InnoDB 存储引擎初始化之前可用。当生产数据加密时,必须采取措施防止主加密密钥的丢失,因为一旦丢失,存储在加密表空间文件中的数据将无法恢复。
从 MySQL 8.0.16 开始,default_table_encryption 系统变量定义了模式和通用表空间的默认加密设置。创建或更改架构时,可以使用 DEFAULT ENCRYPTION 子句来定义默认的加密设置。启用系统变量 table_encryption_privilege_check 可以强制实施加密默认值。
对于独立表空间和通用表空间的加密,从 MySQL 8.0.16 开始,它们继承了创建表的模式的默认加密设置,除非在 CREATE TAE 语句中明确指定了 ENCRYPTION 子句。要更改现有表空间的加密,必须指定一个 ENCRYPTION 子句。启用 table_encryption_privilege_check 变量后,指定与默认模式加密设置不同的 ENCRYPTION 子句需要 TAE_ENCRYPTION_ADMIN 权限。
MySQL 还提供了对双写文件、重做日志和撤销日志的加密支持。还提供了主密钥轮换的功能,应定期轮换主加密密钥,并在怀疑密钥已时进行轮换。在复制环境中,ALTER INSTANCE ROTATE INNODB MASTER KEY 语句的复制以及加密和复制的有关注意事项也需要考虑。
要识别加密的表空间和模式,可以查询 INFORMATION_SCHEMA.INNODB_TAESPACES 表中的 ENCRYPTION 列,以及 INFORMATION_SCHEMA.TAES 表中的 CREATE_OPTIONS 列。
通过执行特定的SQL查询,您可以获取有关“test/t1”表的信息,包括其所占用的空间、名称和类型。例如:
sql
SELECT SPACE, NAME, SPACE_TYPE
FROM INFORMATION_SCHEMA.INNODB_TAESPACES
WHERE NAME='test/t1';
结果显示该表在名为“test/t1”的表空间中,空间编号为3,类型为“Single”。
要识别启用了加密的架构,您可以查询INFORMATION_SCHEMA.SCHEMATA表,查看默认加密设置。例如:
sql
SELECT SCHEMA_NAME, DEFAULT_ENCRYPTION
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE DEFAULT_ENCRYPTION='YES';
如果“test”架构的默认加密设置为“YES”,则表明该架构启用了加密。
关于加密表空间的说明:
1. 在更改现有独立表空间的加密选项时,需要使用ENCRYPTION选项并制定相应的计划。独立表空间中的表会使用COPY算法进行重建。对于通用表空间或mysql系统表空间,可以使用INPLACE算法更改其ENCRYPTION属性,该算法允许对表进行并发DML操作,但会阻止并发DDL。
2. 当通用表空间或mysql系统表空间被加密时,该表空间中的所有表都会被加密。在加密表空间中创建的表也会自动加密。
3. 服务器重启时,应使用与之前配置相同的加密设置。
4. 当第一个新的或现有的表空间被加密时,会生成第一个主加密密钥。
5. 主密钥轮换会重新加密表空间密钥,但不会更改表空间密钥本身。要更改表空间密钥,需要禁用并重新启用加密。对于独立表空间,重新加密会导致表的重建;对于通用和mysql系统表空间,则不会。
加密的限制包括:
1. 仅支持高级加密标准(AES)算法。InnoDB使用电子密码本(ECB)块加密模式进行表空间密钥加密,以及密码块链接(CBC)模式进行数据加密。
2. 加密仅适用于独立表空间、通用表空间和mysql系统表空间。其他类型的表空间(如InnoDB系统表空间)不支持加密。
3. 不能将表从加密的表空间移动到不支持加密的类型。可以将表从未加密的表空间移动到加密的表空间。
4. 默认情况下,只有表空间中的数据会被加密,如果需要加密重做日志和撤消日志数据,需要分别启用innodb_redo_log_encrypt和innodb_undo_log_encrypt。
5. 一旦表存储在加密的表空间中,就不能更改其存储引擎。
请注意,在执行与加密相关的操作时,务必谨慎并遵循最佳实践,以确保数据的完整性和安全性。
