透明数据加密(TDE)需要使用ALTER语句对表或索引进行加解密,为减少您重复加解密的操作,RDS PostgreSQL提供此插件,用于批量加密、解密。
前提条件
注意事项
执行批量加密或解密命令后,会一直等待执行完成后再返回结果,如果数据库中的表数量较多时,可能耗时较长,请谨慎使用。
创建和删除插件
说明 推荐使用高权限账号可以执行如下命令。
- 创建插件
CREATE EXTENSION rds_tde_utils;
- 删除插件
DROP EXTENSION rds_tde_utils;
使用示例
- 创建测试数据。
CREATE TABLE table_a(id int); CREATE INDEX index_a1 ON table_a(id); CREATE INDEX index_a2 ON table_a USING hash(id); CREATE TABLE table_b(id int); CREATE INDEX index_b1 ON table_b(id); CREATE INDEX index_b2 ON table_b USING hash(id);
- 批量加密。说明加密过程会对表进行重写,您可以选择
rds_tde_lazy_encrypt_table
或rds_tde_encrypt_table
任意一个函数对表进行加密,两个函数的重写逻辑如下:rds_tde_lazy_encrypt_table
的重写逻辑与LAZY VACUUM类似。rds_tde_encrypt_table
的重写逻辑与VACUUM FULL类似,请勿在业务高峰期进行加密。
- 批量加密表table_a及其关联索引(index_a1和index_a2)。
SELECT rds_tde_lazy_encrypt_table('table_a'::regclass);
SELECT rds_tde_encrypt_table('table_a'::regclass);
- 批量加密当前数据库下的所有表(table_a和table_b)及其关联索引。
SELECT rds_tde_lazy_encrypt_database();
SELECT rds_tde_encrypt_database();
- 批量解密。说明解密过程会对表进行重写,您可以选择
rds_tde_lazy_decrypt_table
或rds_tde_decrypt_table
中任意一个函数对表进行解密,两个函数的重写逻辑如下:rds_tde_lazy_decrypt_table
的重写逻辑与LAZY VACUUM类似。rds_tde_decrypt_table
的重写逻辑与VACUUM FULL类似,请勿在业务高峰期进行解密。
- 批量解密表table_a及其关联索引(index_a1和index_a2)。
SELECT rds_tde_lazy_decrypt_table('table_a'::regclass);
SELECT rds_tde_decrypt_table('table_a'::regclass);
- 批量解密当前数据库下的所有表(table_a和table_b)及其关联索引。
SELECT rds_tde_lazy_decrypt_database();
SELECT rds_tde_decrypt_database();