InnoDB
支持数据加密file-per-table表空间。
InnoDB
使用两层加密密钥体系结构,包括主密钥和表空间的钥匙。当一个表空间加密,一个表空间加密并存储在表空间头是关键。当一个应用程序或身份验证的用户希望访问加密的数据,InnoDB
使用主密钥解密表空间的关键。的解密版本表空间关键永远不会改变,但主加密密钥可以根据需要改变。这个动作被称为万能钥匙旋转。
数据加密功能依赖于一个密匙环主密钥管理插件。
所有MySQL版本提供keyring_file
插件,将密匙环数据存储在一个本地文件服务器主机。
MySQL Enterprise Edition提供了额外的密匙环的插件:
keyring_encrypted_file
:存储数据以加密的密匙环,有密码保护的文件本地服务器主机。keyring_okv
:KMIP 1.1插件使用KMIP-compatible后端密匙环存储产品。支持KMIP-compatible产品包括集中式密钥管理解决方案,比如Oracle关键库,金雅拓KeySecure,泰利斯Vormetric密钥管理服务器和Fornetix密钥编排。keyring_aws
:与Amazon Web服务通信密钥管理服务(AWS公里)的后端密钥生成和使用本地文件的密钥存储。
加密密钥管理keyring_file
和keyring_encrypted_file
插件并不打算作为一个法规遵从性解决方案。安全标准,如PCI FIPS等需要使用密钥管理系统安全、管理和保护关键的加密密钥金库或硬件安全模块(hsm)。
一个安全的、健壮的密钥管理方案是至关重要的安全,遵守各种安全标准。当静止数据加密特性使用集中式密钥管理方案,该特性被称为”MySQL企业透明数据加密(语音)”。
数据加密功能支持高级加密标准(AES)基于块的加密算法。它使用电子码(ECB)块加密模式表空间关键加密和密码块链接(CBC)加密模式数据块加密。
关于数据加密功能的常见问题,明白了部分A.17”, MySQL 5.7 FAQ: InnoDB静止数据加密”。
一个密匙环插件必须安装和配置。密匙环插件安装在启动时执行使用
early-plugin-load
选择。早期加载之前确保可用的插件初始化的InnoDB
存储引擎。密匙环插件安装和配置说明,请参阅6.4.4部分,“MySQL密匙环”。只有一个密匙环插件应该启用。使多个密匙环插件不支持的和结果可能不如预期。
重要的一旦加密的表空间中创建一个MySQL实例,加密的密匙环插件加载在创建表空间必须继续在启动时加载使用
early-plugin-load
选择。未能这样做,当启动服务器并在导致错误InnoDB
复苏。验证一个密匙环插件被激活时,使用
显示插件
语句或查询INFORMATION_SCHEMA.PLUGINS
表。例如:mysql >选择PLUGIN_NAME PLUGIN_STATUS INFORMATION_SCHEMA。插件,PLUGIN_NAME像“密匙环%”;+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | PLUGIN_NAME | PLUGIN_STATUS | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | keyring_file活动| | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
对生产数据进行加密时,确保你采取措施以防止损失的主密钥。如果主密钥丢失,数据加密存储在表空间文件是不可恢复的。如果你使用
keyring_file
或keyring_encrypted_file
插件,创建一个密匙环的备份数据文件后立即创建第一个加密的表空间,主密钥前旋转,主密钥后旋转。的keyring_file_data
配置选项定义的密匙环的数据文件位置keyring_file
插件。的keyring_encrypted_file_data
配置选项定义的密匙环的数据文件位置keyring_encrypted_file
插件。如果你使用keyring_okv
或keyring_aws
插件,确保你已经完成了必要的配置。说明,请参阅6.4.4部分,“MySQL密匙环”。
启用加密新file-per-table表空间指定加密
选择在一个创建表
声明。下面的例子假设innodb_file_per_table
启用。
mysql > CREATE TABLE t1 (c1 INT)加密= ' Y ';
启用加密为现有file-per-table表空间,指定加密
选择在一个ALTER TABLE
声明。
mysql > ALTER TABLE t1加密= ' Y ';
禁用加密file-per-table表空间,集加密= ' N '
使用ALTER TABLE
。
mysql > ALTER TABLE t1加密= ' N ';
主密钥应该定期轮换,每当你怀疑被破坏的关键。
万能钥匙旋转是一个原子,实例级操作。每次旋转主密钥,所有表空间MySQL实例的密钥对和保存回各自的表空间的标题。作为一个原子操作,re-encryption所有表空间必须成功钥匙旋转操作启动一次。如果主键旋转打断了服务器失败,InnoDB
卷操作在服务器重启。有关更多信息,请参见加密和恢复。
旋转主密钥只有改变主密钥和对表空间的钥匙。它不解密或对相关表空间的数据。
旋转主密钥需要超级
特权。
旋转主密钥,运行:
mysql >改变实例旋转INNODB万能钥匙;
改变实例旋转INNODB主密钥
支持并发DML。然而,它与表空间不能同时运行加密操作,和锁来防止冲突可能出现的并发执行。如果一个改变实例旋转INNODB主密钥
操作时,必须完成一个表空间加密操作进行之前,反之亦然。
如果服务器故障发生在一个加密操作,操作向前滚动当服务器重启。
如果在发生服务器故障时主键旋转,InnoDB
继续操作在服务器重新启动。
密匙环插件之前必须加载存储引擎初始化,因此所需的信息解密表空间可以从表中检索数据页标题InnoDB
初始化和恢复表空间数据的访问活动。(见加密的先决条件。)
当InnoDB
初始化和恢复开始,主键旋转操作的简历。由于服务器故障,一些表键可能已经使用新的主密钥加密。InnoDB
从每个表空间头读取加密数据,如果数据表明表空间使用旧主人加密密钥加密的关键是,InnoDB
检索旧键的密匙环,并使用它来解密表空间的关键。InnoDB
然后对表空间使用新的主关键加密密钥和节省re-encrypted表空间关键表空间头。
当导出一个加密的表空间,InnoDB
生成一个转移的关键用于加密的表空间的关键。加密和传输密钥存储在表空间关键
文件。这个文件需要加密的表空间文件一起执行导入操作。进口,tablespace_name
.cfpInnoDB
使用传输密钥解密表空间的关键
文件。相关信息,请参阅部分14.6.1.3,“进口InnoDB表”。tablespace_name
.cfp
的
改变实例旋转INNODB主密钥
语句仅支持在源和副本复制环境中运行的MySQL版本支持静态数据加密。成功的
改变实例旋转INNODB主密钥
语句写入二进制日志的复制副本。如果一个
改变实例旋转INNODB主密钥
语句失败,它不是记录的二进制日志,而不是复制副本。复制一个
改变实例旋转INNODB主密钥
操作失败,如果密匙环插件安装在源而不是复制品。如果
keyring_file
或keyring_encrypted_file
插件安装在源和一个复制品,但副本没有一个密匙环数据文件,复制改变实例旋转INNODB主密钥
语句创建密匙环数据文件副本,假设keyring文件数据缓存在内存中。改变实例旋转INNODB主密钥
使用密匙环文件的数据缓存在内存中,如果可用。
当加密
选项中指定创建表
或ALTER TABLE
声明中,这是记录的CREATE_OPTIONS
列的INFORMATION_SCHEMA.TABLES
。这一列可以查询识别表驻留在加密file-per-table表空间。
mysql >选择TABLE_SCHEMA、TABLE_NAME CREATE_OPTIONS INFORMATION_SCHEMA。表在CREATE_OPTIONS像“%加密%”;+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - + | TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - | + |测试t1 = " Y " | + |加密- - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
查询INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES
检索信息与一个特定的模式相关联的表空间和表。
mysql >选择空间,名字,从INFORMATION_SCHEMA SPACE_TYPE。INNODB_SYS_TABLESPACES NAME = '测试/ t1 ';+ - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + | | |名称空间SPACE_TYPE | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | 3 |测试/ t1单| | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
计划适当改变现有的表空间时
加密
选择。表重建使用复制
算法。的原地
算法不支持。如果服务器退出或停止正常运行期间,建议重新启动服务器使用相同的加密之前配置的设置。
第一个主密钥生成当第一个新的或现有的表空间是加密的。
主密钥对表空间旋转钥匙但不会改变表空间的关键。改变表空间的关键,必须禁用和启用加密,这是一个
算法=复制
操作,重建。如果一个密匙环数据文件(文件命名的
keyring_file_data
或keyring_encrypted_file_data
)为空或失踪,第一次执行改变实例旋转INNODB主密钥
创建一个主密钥。卸载
keyring_file
或keyring_encrypted_file
插件不移除现有密匙环数据文件。建议您不是一个密匙环数据文件表空间数据文件相同的目录下。
修改
keyring_file_data
或keyring_encrypted_file_data
设置在运行时或者当重新启动服务器会导致之前加密的表空间变得难以接近,导致数据丢失。
高级加密标准(AES)是唯一支持的加密算法。
InnoDB
数据加密使用电子码(ECB)块加密模式表空间关键加密和密码块链接(CBC)加密模式数据块加密。不使用填充与CBC块加密模式。相反,InnoDB
确保文本加密是块大小的倍数。改变
加密
执行属性表的使用复制
算法。的原地
算法不支持。加密只是支持file-per-table表空间。不支持加密等其他表空间类型一般的表空间和系统表空间。
你不能移动或复制一个从一个加密的表file-per-table表空间的表空间类型不支持加密。
加密只适用于表空间中的数据。在重做日志数据没有加密,undo日志,或二进制日志。
它不允许改变表的存储引擎驻留在,或以前居住在一个加密的表空间。
不支持加密的
InnoDB
全文
添加时隐式地创建索引表全文
索引。相关信息,请参阅InnoDB全文索引表。