anon
数据匿名化处理工具
仓库
https://gitlab.com/dalibo/postgresql_anonymizer/
https://gitlab.com/dalibo/postgresql_anonymizer/
源码
pg_anon-3.0.1.tar.gz
pg_anon-3.0.1.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_anon | 3.0.1 | SEC | PostgreSQL | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7050 | anon | 否 | 是 | 是 | 是 | 否 | 否 | anon |
| 相关扩展 | faker pgsodium pgcrypto pgaudit set_user pg_tde |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 3.0.1 | 1817161514 | pg_anon | - |
| RPM | PIGSTY | 3.0.1 | 1817161514 | pg_anon_$v | - |
| DEB | PIGSTY | 3.0.1 | 1817161514 | postgresql-$v-pg-anon | - |
构建
您可以使用 pig build 命令构建 pg_anon 扩展的 RPM / DEB 包:
pig build pkg pg_anon # 构建 RPM / DEB 包
安装
您可以直接安装 pg_anon 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_anon; # 当前活跃 PG 版本安装
pig ext install -y pg_anon -v 18 # PG 18
pig ext install -y pg_anon -v 17 # PG 17
pig ext install -y pg_anon -v 16 # PG 16
pig ext install -y pg_anon -v 15 # PG 15
pig ext install -y pg_anon -v 14 # PG 14
dnf install -y pg_anon_18 # PG 18
dnf install -y pg_anon_17 # PG 17
dnf install -y pg_anon_16 # PG 16
dnf install -y pg_anon_15 # PG 15
dnf install -y pg_anon_14 # PG 14
apt install -y postgresql-18-pg-anon # PG 18
apt install -y postgresql-17-pg-anon # PG 17
apt install -y postgresql-16-pg-anon # PG 16
apt install -y postgresql-15-pg-anon # PG 15
apt install -y postgresql-14-pg-anon # PG 14
预加载配置:
shared_preload_libraries = 'anon';
创建扩展:
CREATE EXTENSION anon;
用法
postgresql_anonymizer(扩展名:anon)使用声明式方法对个人身份信息(PII)进行脱敏或替换。脱敏规则直接通过安全标签在数据库模式中定义。
CREATE EXTENSION IF NOT EXISTS anon CASCADE;
SELECT anon.init();
声明脱敏规则
SECURITY LABEL FOR anon ON COLUMN player.name
IS 'MASKED WITH FUNCTION anon.fake_last_name()';
SECURITY LABEL FOR anon ON COLUMN player.id
IS 'MASKED WITH VALUE NULL';
静态脱敏
永久替换数据库中的 PII:
SECURITY LABEL FOR anon ON COLUMN customer.full_name
IS 'MASKED WITH FUNCTION anon.fake_first_name() || '' '' || anon.fake_last_name()';
SECURITY LABEL FOR anon ON COLUMN customer.birth
IS 'MASKED WITH FUNCTION anon.random_date_between(''1920-01-01''::DATE, now())';
SELECT anon.anonymize_database();
-- 也可使用:anon.anonymize_table()、anon.anonymize_column()
动态脱敏
对特定角色隐藏 PII,其他角色可见原始数据:
SELECT anon.start_dynamic_masking();
CREATE ROLE skynet LOGIN;
SECURITY LABEL FOR anon ON ROLE skynet IS 'MASKED';
SECURITY LABEL FOR anon ON COLUMN people.lastname
IS 'MASKED WITH FUNCTION anon.fake_last_name()';
SECURITY LABEL FOR anon ON COLUMN people.phone
IS 'MASKED WITH FUNCTION anon.partial(phone, 2, $$******$$, 2)';
当 skynet 查询该表时,会自动返回脱敏后的数据。
匿名导出
pg_dump_anon.sh -h localhost -p 5432 -U bob bob_db > dump.sql
常用脱敏函数
| 函数 | 描述 |
|---|---|
anon.fake_first_name() | 随机名字 |
anon.fake_last_name() | 随机姓氏 |
anon.fake_company() | 随机公司名 |
anon.random_date_between(d1, d2) | 范围内随机日期 |
anon.random_zip() | 随机邮政编码 |
anon.partial(value, prefix, padding, suffix) | 部分混淆 |
anon.random_string(n) | 长度为 n 的随机字符串 |
anon.random_int_between(i1, i2) | 范围内随机整数 |