anon
anon
pg_anon : PostgreSQL Anonymizer (anon) extension
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 7050 | anon
|
pg_anon
|
3.0.1 |
SEC
|
PostgreSQL
|
Rust
|
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--sLd--
|
No
|
Yes
|
Yes
|
Yes
|
no
|
no
|
| Relationships | |
|---|---|
| Schemas | anon |
| See Also | faker
pgsodium
pgcrypto
pgaudit
set_user
pg_tde
|
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY
|
3.0.1 |
18
17
16
15
14
|
pg_anon |
- |
| RPM | PIGSTY
|
3.0.1 |
18
17
16
15
14
|
pg_anon_$v |
- |
| DEB | PIGSTY
|
3.0.1 |
18
17
16
15
14
|
postgresql-$v-pg-anon |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
el8.x86_64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
el8.aarch64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
el9.x86_64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
el9.aarch64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
el10.x86_64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
el10.aarch64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
d12.x86_64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
d12.aarch64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
d13.x86_64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
d13.aarch64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
u22.x86_64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
u22.aarch64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
u24.x86_64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
u24.aarch64
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
PIGSTY 3.0.1
|
Source
pig build pkg pg_anon; # build rpm/debInstall
Make sure PGDG and PIGSTY repo available:
pig repo add pgsql -u # add both repo and update cacheInstall this extension with pig:
pig install pg_anon; # install via package name, for the active PG version
pig install anon; # install by extension name, for the current active PG version
pig install anon -v 18; # install for PG 18
pig install anon -v 17; # install for PG 17
pig install anon -v 16; # install for PG 16
pig install anon -v 15; # install for PG 15
pig install anon -v 14; # install for PG 14Config this extension to shared_preload_libraries:
shared_preload_libraries = 'anon';Create this extension with:
CREATE EXTENSION anon;Usage
postgresql_anonymizer (extension name: anon) masks or replaces personally identifiable information (PII) using a declarative approach. Masking rules are defined directly in the database schema using security labels.
CREATE EXTENSION IF NOT EXISTS anon CASCADE;
SELECT anon.init();Declaring Masking Rules
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';Static Masking
Permanently replace PII in the database:
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();
-- Also available: anon.anonymize_table(), anon.anonymize_column()Dynamic Masking
Hide PII from specific roles while others see original data:
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)';When skynet queries the table, masked data is returned automatically.
Anonymous Dumps
pg_dump_anon.sh -h localhost -p 5432 -U bob bob_db > dump.sqlCommon Masking Functions
| Function | Description |
|---|---|
anon.fake_first_name() |
Random first name |
anon.fake_last_name() |
Random last name |
anon.fake_company() |
Random company name |
anon.random_date_between(d1, d2) |
Random date in range |
anon.random_zip() |
Random zip code |
anon.partial(value, prefix, padding, suffix) |
Partial scrambling |
anon.random_string(n) |
Random string of length n |
anon.random_int_between(i1, i2) |
Random integer in range |
Last updated on