细粒度透明数据加密
数据库加密是保护敏感数据安全的关键手段,通过加密可以防止未经授权的用户访问和读取敏感数据。DWS的细粒度透明加密功能通过表级加密方式和列级加密方式提供了细粒度的加密能力,对数据库进行更加精准的数据安全保护,同时加密过程完全透明对应用层和SQL访问不会产生影响。用户可根据不同的数据敏感级别和访问需求来选择合适的加密方式。
细粒度透明加密支持两种加密算法:AES-CTR-128(非国密场景)和SM4-CTR-128(国密场景)。
具体的细粒度透明数据加密语法请参考CREATE TABLE。
注意事项
使用细粒度透明加密功能时,需遵守以下约束,避免影响业务正常运行:
- 细粒度透明加密仅9.1.1.200及以上集群版本支持。
- 细粒度透明加密仅行存表、列存2.0表支持。
- 行存表不支持列级的透明加密配置,仅列存表支持列级。
- 集群级透明加密和细粒度透明加密功能互斥,无法同时开启。已经开启了集群级透明加密,则无法开启细粒度透明加密功能。
- 集群升级观察期内,不支持创建透明加密表。
- 索引不支持修改透明加密配置。
- 不支持基于加密表创建物化视图,也不支持对物化视图加密。
- 普通列存+delta表、Hstore非opt表、行列混存表、LSM表不支持表级加密。
- 临时表、大宽表不支持加密。
操作示例
以员工信息表employees为例,使用细粒度透明加密功能。
- 创建表employees为初始未加密表。
CREATE TABLE employees ( emp_id int PRIMARY KEY, emp_name text, emp_email text, emp_phone text, salary decimal(10,2), hire_date date ); - 创建表级加密表employees_encrypted(AES-CTR-128 算法),并将employees表数据迁移到employees_encrypted。
CREATE TABLE employees_encrypted ( emp_id int PRIMARY KEY, emp_name text, emp_email text, emp_phone text, salary decimal(10,2), hire_date date ) WITH (encrypt_option = table,encrypt_algo = aes-ctr-128); INSERT INTO employees_encrypted SELECT * FROM employees; - 创建SM4加密(国密算法)的薪资表salaries
CREATE TABLE salaries ( emp_id int, salary decimal(10,2), bonus decimal(10,2), effective_date date ) WITH (encrypt_option = table, encrypt_algo = SM4_CTR_128); - 创建列级加密表hr_analysis,仅针对敏感列“salary”信息加密。
CREATE TABLE hr_analysis ( emp_id int, emp_name text, emp_department text, salary decimal(10,2) ENCRYPT, -- 仅薪资列加密 performance_score int ) WITH (orientation = column, encrypt_option = column); - 列级加密表hr_analysis由指定列加密修改为全列加密。
ALTER TABLE hr_analysis MODIFY (emp_id to encrypt); ALTER TABLE hr_analysis MODIFY (emp_name to encrypt); ALTER TABLE hr_analysis MODIFY (emp_department to encrypt); ALTER TABLE hr_analysis MODIFY (performance_scoreto encrypt); VACUUM FULL hr_analysis;
- 对加密表进行解密。
ALTER TABLE employees_encrypted SET (encrypt_option = none); VACUUM FULL employees_encrypted;
对初始未加密表开启加密。
ALTER TABLE employees SET (encrypt_option = table); VACUUM FULL employees;
- 修改表的加密算法为SM4。
ALTER TABLE employees SET (encrypt_algo = SM4_CTR_128); VACUUM FULL employees; ALTER TABLE hr_analysis SET (encrypt_algo = SM4_CTR_128); VACUUM FULL hr_analysis;
- 定期密钥轮转,按安全策略每半年执行一次密钥轮转。
ALTER CLUSTER ENCRYPTION KEY ROTATION;