透明数据加密
可获得性
本特性自V500R002C00版本开始引入。
特性简介
透明数据加密(Transparent Data Encryption,TDE)提供表级数据加密存储功能。当用户使用本特性提供的语法创建加密表后,数据库向磁盘写入加密表数据前,会自动将其加密;同时,数据库从磁盘读取加密表数据后,会自动将其解密。
客户价值
安全:本特性可有效解决攻击者绕过数据库认证机制直接读取数据库文件引起静态数据泄露的问题。
易用:用户在创建表时,通过语法指定表是否需要被加密,数据库可自动对数据进行加密存储。
性能:本特性仅在数据写入磁盘时加密,并以数据页为粒度对数据进行加密,对数据库性能影响较小。
特性描述
多级加密:本特性使用多级加密模型,密钥分为主密钥(CMK)和数据加密密钥(DEK),数据由DEK加密,而DEK由CMK加密,CMK由外部密钥管理服务(Key Management Service,KMS)加密存储。数据库在运行过程中,需要通过网络或其他途径访问外部密钥管理者,以实现对DEK进行加解密。
表级加密:在创建表时,通过ENABLE_TDE语法指定表为加密表,通过ENCRYPT_ALGO语法指定使用何种加密算法,同时,数据库会自动为每个加密表生成1个DEK。对于每个加密表,数据库会在系统表和数据文件中存储加密信息以及DEK密文。
密钥管理:CMK由外部密钥管理者生成并存储。目前的外部密钥管理者主要指密钥管理服务(Key Management Service,KMS),大部分云服务提供商均提供KMS。
密钥轮转:本特性提供DEK轮转语法,加密表与非加密表转换语法。
特性增强
503.2.0:
- 密钥管理支持华为混合云KMS。
- 存储引擎支持Ustore。
505.1.0:
- 支持段页式表。
- 支持hashbucket表。
- 支持对索引加密,支持直接将非加密表转换为加密表。
505.2:
支持对加密表的undo-log和xlog加密:如果第一次从旧版本灰度升级到505.2版本,需对集群进行一次重启,才支持加密undo-log和xlog。
特性约束
- 加密规格
- 加密对象:支持对astore表、ustore表、临时表、unlog表、段页式表等表加密,不支持对压缩表、物化视图等其他表加密。支持对btree索引、ubtree索引加密。支持对加密对象生成的xlog和undo-log加密。
- 加密算法:支持AES_128_CTR(默认算法)、SM4_CTR。
- 密钥规格
- 密钥管理:主密钥由单独的密钥服务管理,支持以下密钥服务:华为云密钥管理服务(hcs_kms)。
- 密钥隔离:每个加密表都使用单独的数据密钥。
- 密钥复用:如果对索引进行加密,则索引与基表使用相同的数据密钥与加密算法,不支持单独指定索引的加密算法。
- 密钥轮转机制:进行密钥轮转时,表中新数据页将使用新密钥,旧数据页仍使用旧密钥,执行VACUUM FULL等重建数据文件的操作后,旧数据页才会使用新密钥。
- 使用规格
- 加密表转换:
1. 将非加密表转换为加密表时,表中新数据页将会被加密,旧数据页不会立刻被加密,执行VACUUM FULL等重建数据文件的操作后,旧数据页才会被加密。
2. 将加密表转换为非加密表时,表中新数据页将不会被加密,旧数据页仍处于加密状态,执行VACUUM FULL等重建数据文件的操作后,旧数据页才会被解密。
- 加密表转换:
约束
- 运行环境约束
网络约束:需保证每个数据库节点与KMS之间网络通畅。
- 配置约束
- 特性开关:开启透明加密功能,创建Tde表后,请谨慎关闭透明加密功能,否则会导致集群重启失败、Tde表无法访问等问题。
向Tde表中写入数据时,会生成与Tde表有关的redo/undo log,以下场景可能发生异常:
- 主备复制:备节点如果未开启透明加密功能,接收到与Tde表有关的redo log时,会报错退出。请确保主节点、备节点同时开启透明加密功能。
- 物理容灾:容灾集群如果未开启透明加密功能,接收到与Tde表有关的redo log时,会报错退出。请确保主集群、容灾集群同时开启透明加密功能。
- 故障恢复:如果关闭透明加密功能,重启集群,故障恢复等功能处理到与Tde表有关的redo/undo log时,会重启失败。建议在一段时间内,不操作Tde表,再进行重启,可避免重启过程处理到与Tde表有关的redo/undo log。
- 数据读写:如果关闭透明加密功能,将无法查询Tde表中的数据,无法向Tde表写入数据。可通过ALTER语句,将Tde表转换为非Tde表,然后通过VACUUM FULL语句,立即解密表中所有数据,之后,便可尝试关闭透明加密功能。
- 备份恢复:如果集群曾开启透明加密功能,并创建Tde表和备份数据,在恢复时,如果未开启透明加密功能(gaussdb.conf配置文件中,enable_tde参数的值未设置为on),会恢复失败。
- 特性开关:开启透明加密功能,创建Tde表后,请谨慎关闭透明加密功能,否则会导致集群重启失败、Tde表无法访问等问题。
- 功能约束
- 索引加密:只支持对基表为加密表的索引进行加密。
- 加密范围:支持对表和索引的数据文件中的数据进行加密,不支持对网络传输、pg_static系统表文件和core文件等其他介质中的数据进行加密。
- 废弃数据:不对数据库清理机制产生的废弃数据进行加密。
- 超长数据:由于加密表的数据页容量小于非加密表,如果非加密表中含长度接近8000字节的单条非toast数据,请谨慎该表转换为加密表,否则可能出现加密表可能无法存储超长数据的异常。解决异常的方案是通过ALTER .. SET (enable_tde=off)语法将加密表还原为非加密表,异常场景示例如下:
- 异常示例1:将表转换为加密表后,执行VACUUM FULL tablename语法失败。
- 异常示例2:将表转换为加密表后,UPDATE旧数据失败。
- 特性交互约束
- repair:调用repair函数修复加密表的数据页时,不对生成的临时文件中数据进行加密。
- 其他约束
- 性能劣化:与非加密表相比,在加密表上进行DML操作时,性能会较小劣化。
- 数据膨胀:与非加密表相比,加密表数据文件中存储了加密信息,存储空间缩小5%以内。
依赖关系
本特性依赖外部密钥管理服务提供密钥管理功能。
浙公网安备 33010602011771号