PostgreSQL 安全管理 数据脱敏 Anonymizer 抽样脱敏(Privacy By Default)
1 背景知识
GDPR 引入 数据最小化
原则的概念,是指通常不需要对整个数据库进行匿名处理。在通常情况下,提取表中的一个子集就足够了。
例如,将10%的数据进行脱敏,并在CI工作流中进行测试。由于数据量较小脱敏处理的速度也快得多。
2 如何使用取样脱敏
假设在一个表中存储了大量的 http
日志。对于 ip_address
进行脱敏,并只提取表中的 10%
。
CREATE TABLE http_logs (
id integer NOT NULL,
date_opened DATE,
ip_address INET,
url TEXT
);
SECURITY LABEL FOR anon ON COLUMN http_logs.ip_address
IS 'MASKED WITH VALUE NULL';
SECURITY LABEL FOR anon ON TABLE http_logs
IS 'TABLESAMPLE BERNOULLI(10)';
3 取样脱敏的语法
SELECT 语法中的 TABLESAMPLE clause 语句和取样脱敏的语法完全一致。
可以在数据级别定义抽样比率,将会在所有表中生效。
SECURITY LABEL FOR anon ON DATABASE app
IS 'TABLESAMPLE SYSTEM(33)';
4 抽样脱敏如何维护参照完整性
Warning
如果有外键关联到抽样脱敏的表,上述取样方法将会失败。
因为使用抽样脱敏并保持参照完整性是非常困难的,此插件将会不支持这种提取操作。
如果确实有这种需求场景,请参考以下步骤
- 使用 PostgreSQL pg_sample 提取样本数据。
- 使用本插件进行抽样脱敏。
Note
PostgreSQL 可能还有其他抽样工具,但 PostgreSQL pg_sample 是最好用的一个。