MySQL 5.7.11引入了InnoDB表空间加密,该加密启用了对每表文件表空间的支持。在MySQL 8.0.13中, 引入了通用表空间的加密。为了提高加密处理的可用性,MySQL 8.0.16添加了几个功能,这些功能允许数据库管理员进行更精细的控制。
加载加密插件:
mysql> install plugin keyring_file soname 'keyring_file.so'; Query OK, 0 rows affected (0.26 sec) mysql> CREATE TABLE t1 (c1 INT) ENCRYPTION = 'Y'; Query OK, 0 rows affected (1.02 sec)
加载加密插件,如果不加载加密插件,会提示出错:
mysql> CREATE TABLE t1 (c1 INT) ENCRYPTION = 'Y'; ERROR 3185 (HY000): Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.
如果启动的时候没有加载keyring_file.so,提示:
2020-06-17T03:51:31.246965Z 1 [ERROR] [MY-012657] [InnoDB] Encryption can't find master key, please check the keyring plugin is loaded. 2020-06-17T03:51:31.247237Z 1 [ERROR] [MY-012226] [InnoDB] Encryption information in datafile: ./b/t1.ibd can't be decrypted, please confirm the keyfile is match and keyring plugin is loaded.
加入[mysqld] early-plugin-load=keyring_file.so 可以在innodb启动前加载keyring。
注意:
对系统中的所有表进行加密。这可以通过系统范围的配置设置default_table_encryption实现
对模式中所有表进行加密,可以在创建模式时设置默认的加密属性。 表空间不能混合使用加密和未加密的块。因此,表空间是未加密的或已加密的。
有一些子句可以覆盖默认的加密设置。可以通过配置设置table_encryption_privilege_check = true 来要求服务器禁止覆盖加密设置。具有TABLE_ENCRYPTION_ADMIN权限的用户始终可以覆盖任何检查。