透明数据加密(TDE)实现:在存储层用pgcrypto自动加解密
通过触发器+视图模拟Oracle TDE,对敏感列数据自动加密存储,解密显示,且对查询无感。 · 难度:入门 · +10XP
自建TDE:加密对应用透明
本教程使用pgcrypto的pgp_sym_encrypt和pgp_sym_decrypt,结合INSTEAD OF触发器。核心设计:创建加密视图替代直接表查询,在视图的INSERT/UPDATE触发器中加密,SELECT时解密。密钥管理使用current_setting('encrypt.key')从环境变量读取。演示如何应对索引需求:使用pg_trgm对加密字段建GIN索引支持模糊查询。
CREATE VIEW secure_employees AS
SELECT id, name, pgp_sym_decrypt(encrypted_salary, current_setting('encrypt.key')) AS salary
FROM employees_encrypted;
CREATE RULE update_salary AS ON UPDATE TO secure_employees
DO INSTEAD
UPDATE employees_encrypted SET encrypted_salary = pgp_sym_encrypt(NEW.salary, current_setting('encrypt.key'))
WHERE id = OLD.id;