Anonimización de datos con PostgreSQL: lo que su empresa necesita implementar antes de diciembre
La Ley 21.719 exige medidas técnicas para proteger datos personales. La anonimización es una de las más efectivas. En este artículo revisamos técnicas concretas en PostgreSQL que puede implementar hoy mismo.
Contenido
- 1. La ley exige medidas técnicas: ¿dónde entra la anonimización?
- 2. Anonimización vs. seudonimización: la diferencia legal importa
- 3. Por dónde empezar: inventario de datos personales
- 4. Técnicas SQL para anonimizar datos en PostgreSQL
- 5. Automatización con funciones y disparadores
- 6. Extensiones y herramientas disponibles
- 7. Casos de uso: entornos de desarrollo, análisis y testing
- 8. Errores comunes al anonimizar datos
- 9. Cómo puede ayudar Lanedu
1. La ley exige medidas técnicas: ¿dónde entra la anonimización?
La Ley 21.719 (que analizamos en detalle en nuestro artículo anterior) exige que las organizaciones implementen medidas técnicas y organizativas apropiadas para proteger los datos personales. El artículo 12 de la ley es claro: el responsable debe adoptar las medidas necesarias para garantizar la seguridad y confidencialidad de los datos.
Una de esas medidas es la anonimización: transformar datos personales de forma irreversible para que no puedan asociarse a una persona identificada o identificable. Cuando los datos están verdaderamente anonimizados, dejan de ser "datos personales" a los ojos de la ley, y por lo tanto quedan fuera del alcance de la normativa.
¿Qué significa esto en la práctica? Que si su organización usa datos reales de clientes para pruebas de software, análisis internos o capacitación, está tratando datos personales sin las garantías que exige la ley. La anonimización le permite seguir operando sin el riesgo de una multa o una filtración.
⚠️ Dato clave
Los datos anonimizados no están sujetos a la Ley 21.719. Los datos seudonimizados sí lo están. La diferencia no es solo técnica, es legal.
2. Anonimización vs. seudonimización: la diferencia legal importa
Antes de escribir una línea de SQL, hay que entender la diferencia porque determina cómo trata la ley los datos resultantes:
| Anonimización | Seudonimización | |
|---|---|---|
| Reversibilidad | Irreversible | Reversible con clave adicional |
| Aplica la ley | No | Sí |
| Ejemplo | Reemplazar RUT con un hash irreversible | Reemplazar RUT con un token y guardar el mapeo por separado |
| Riesgo | Bajo (no se puede reidentificar) | Moderado (depende de la protección del mapeo) |
En la práctica, la seudonimización es útil cuando necesita conservar la trazabilidad (por ejemplo, para auditorías internas), mientras que la anonimización es la opción correcta para datos que se usarán en analytics, testing o desarrollo, donde no se necesita volver al dato original.
3. Por dónde empezar: inventario de datos personales
Antes de anonimizar, hay que saber qué datos personales existen y dónde están. La Ley 21.719 exige llevar un Registro de Actividades de Tratamiento que debe incluir:
- • Qué datos personales se recolectan y procesan.
- • En qué bases de datos, tablas y columnas están almacenados.
- • Quiénes tienen acceso y con qué propósito.
- • Qué medidas de protección existen (o deberían existir).
En PostgreSQL, puede comenzar identificando tablas y columnas con datos sensibles:
Una consulta como esta es solo el punto de partida. Un inventario completo requiere revisar también la lógica de la aplicación, los archivos de log y los backups.
4. Técnicas SQL para anonimizar datos en PostgreSQL
A continuación, técnicas prácticas que puede aplicar directamente sobre sus tablas. Recomendamos probarlas en un entorno de staging antes de aplicarlas en producción.
4.1. Enmascaramiento de correos electrónicos
Reemplazar el nombre local del correo con un valor genérico o aleatorio, conservando el dominio:
La opción 2 es más segura porque es irreversible. La opción 1 conserva el dominio real (útil si necesita probar envíos de correo), pero es seudonimización, no anonimización.
4.2. Enmascaramiento de nombres
Para nombres se puede usar una combinación de iniciales y valores genéricos:
La primera opción conserva iniciales (seudonimización), útil si necesita mantener alguna referencia. La segunda es anonimización pura.
4.3. Enmascaramiento de RUT (Chile)
El RUT es un identificador único especialmente sensible. Debe tratarse con cuidado:
SHA-256 es irreversible y genera un valor único por RUT (mismo RUT produce mismo hash), lo que permite detectar duplicados sin revelar el original.
4.4. Generalización de fechas
Reemplazar fechas exactas por rangos o períodos más amplios:
Útil para análisis demográficos donde la fecha exacta no es necesaria, pero el año o mes sí.
4.5. Perturbación de valores numéricos
Para montos, sueldos o valores numéricos, agregar ruido estadístico:
La segunda opción preserva distribuciones de ingresos sin revelar valores exactos.
4.6. Crear un duplicado anonimizado de una tabla
Para entornos de testing, es útil crear una copia anonimizada de la tabla original:
Este enfoque crea un conjunto de datos funcional para desarrollo sin exponer datos reales.
5. Automatización con funciones y disparadores
Para que la anonimización sea sostenible en el tiempo, conviene automatizarla con funciones y disparadores (triggers) de PostgreSQL:
También puede crear una vista anonimizada para que los equipos de análisis accedan a datos sin ver los valores reales:
Con esta vista, los analistas pueden consultar datos sin acceder nunca a la tabla real. Es una capa de seguridad adicional que funciona incluso si alguien tiene permisos de lectura sobre la vista.
6. Extensiones y herramientas disponibles
PostgreSQL cuenta con extensiones que facilitan la anonimización a escala:
pg_anonymize
Extensión que permite definir reglas de anonimización por columna. Soporta masking, generalización, perturbación y más. Se configura mediante funciones SQL y se puede integrar con el motor de reglas de la base de datos.
anon (PostgreSQL Anonymizer)
Extensión open-source que declara reglas de anonimización directamente en las tablas usando comentarios. Soporta masking dinámico, estático, y generación de datos sintéticos. Es la más completa del ecosistema PostgreSQL.
Data masking nativo (PostgreSQL 17+)
Las versiones recientes de PostgreSQL incluyen mejoras en seguridad a nivel de fila (RLS) y columnas que pueden usarse como base para masking. No es tan completo como las extensiones, pero para casos simples puede ser suficiente.
La elección de la herramienta depende del volumen de datos, la complejidad de las reglas y si necesita anonimización estática (transformar datos en reposo) o dinámica (enmascarar en tiempo real según el usuario).
7. Casos de uso: entornos de desarrollo, análisis y testing
Estos son los escenarios más comunes donde la anonimización marca la diferencia:
💻 Desarrollo
Los developers necesitan datos realistas pero no reales. Una copia anonimizada de la BD de producción evita filtraciones en entornos de desarrollo.
📊 Analítica
Los equipos de BI pueden trabajar con datos anonimizados que conserven propiedades estadísticas sin exponer a personas reales.
🧪 Testing
Las pruebas automatizadas requieren datasets consistentes. Datos anonimizados permiten tests repetibles sin riesgo legal.
🎓 Capacitación
Cursos y talleres con datos reales de clientes. Con anonimización, los alumnos aprenden con datos que parecen reales pero no lo son.
🔍 Demos comerciales
Mostrar el producto a prospectos con datos que simulan su industria sin exponer información de clientes reales.
8. Errores comunes al anonimizar datos
Estos son los errores que vemos más seguido cuando las organizaciones intentan anonimizar por su cuenta:
Cifrar no es anonimizar
El cifrado es reversible. Si alguien obtiene la clave, recupera los datos originales. La anonimización debe ser irreversible.
No revisar reidentificación por combinación de datos
Aunque anonimice columnas individuales, la combinación de varias puede reidentificar a una persona (código postal + fecha de nacimiento + género identifica al 87% de las personas en EE.UU., según estudios).
No revisar backlogs, logs ni backups
Si anonimiza la BD pero los datos originales siguen en logs de aplicación, backups antiguos o archivos CSV, la anonimización no sirve de nada.
Aplicar el mismo hash a todos los entornos
Si su BD de desarrollo y producción usan el mismo hash, un developer con acceso a ambas puede cruzar datos y reidentificar registros.
9. Cómo puede ayudar Lanedu
En Lanedu no solo escribimos sobre estas técnicas: las implementamos a diario para nuestros clientes. Contamos con experiencia práctica en PostgreSQL, adecuación normativa y seguridad de datos.
🔍 Diagnóstico de datos personales
Identificamos qué datos tiene, dónde están y qué medidas necesita.
🗃️ Implementación de anonimización
Configuramos extensiones, escribimos funciones y automatizamos el proceso en PostgreSQL.
🛡️ Seguridad en bases de datos
Cifrado, control de acceso, RLS, backups cifrados y monitoreo en PostgreSQL, MySQL y SQL Server.
📋 Registro de actividades de tratamiento
Creamos el inventario de datos que exige la Ley 21.719 y lo mantenemos actualizado.
🐳 Infraestructura para entornos seguros
Diseñamos pipelines de CI/CD que separan datos reales de anonimizados en contenedores Docker.
🎓 Capacitación para equipos
Formamos a sus desarrolladores y administradores de BD en técnicas de anonimización y seguridad.
Cristian López
Consultor en protección de datos e infraestructura · Lanedu
Este artículo fue elaborado con base en la experiencia práctica de Lanedu en administración de bases de datos PostgreSQL y procesos de adecuación a la Ley 21.719. Para consultas específicas sobre tu organización, no dudes en contactarnos.