Qué es NSAdaMask
nsadamask es la utilidad de anonimización determinista multi-país de Nacarsoft para Adabas: sustituye datos personales por valores ficticios válidos y con el mismo formato (DNI, CPF, RUT, SSN, pasaporte, CIF, CUIT, IBAN, tarjetas, IP, MAC, matrículas…), de modo que los entornos de prueba y desarrollo cumplen la protección de datos sin romper las validaciones de las aplicaciones. Es determinista: el mismo valor original con la misma semilla (-seed) produce siempre el mismo reemplazo.
- Crear entornos de test con datos realistas pero no reales.
- Cumplir RGPD/LOPD en desarrollo sin reescribir validaciones.
- Simular antes de aplicar (
-simulate, activado por defecto) con informe por campo.
Los DBID, FNR, campos y rutas de los ejemplos son ficticios; use sus valores reales.
Casos de uso
1. Anonimizar un fichero de empleados para el entorno de test
./nsadamask -dbid 50 -fnr 15 -fields "AA:DNI,AB:NOMBRE" -country ES \
-seed clave-ficticia-01 -simulate -outfile informe.csv
2. Aplicar el enmascaramiento tras validar la simulación
./nsadamask -dbid 50 -fnr 15 -fields "AA:DNI,AB:NOMBRE" -country ES \
-seed clave-ficticia-01 -apply -commit-every 2000
3. Enmascarar solo un rango de ISN con selección Adabas
./nsadamask -dbid 50 -fnr 15 -fields "AC:EMAIL" -country ES \
-seed clave-ficticia-01 -search "AA=[1000:1999]" -fromisn 1000 -toisn 1999 -simulate
4. Detectar candidatos con la heurística antes de enmascarar
./nsadamask -config esquema-ficticio.json -ddmname CLIENTES-FICTICIOS -analyze-config
5. Verificar la cardinalidad del reemplazo por campo
./nsadamask -dbid 50 -fnr 15 -fields "AA:DNI" -country ES \
-seed clave-ficticia-01 -check -simulate
Referencia de comandos
Verificada contra ./nsadamask/build/nsadamask_rhel8 --help (39 parámetros).
Conexión y selección de registros
| Parámetro | Descripción | Requerido |
|---|---|---|
-dbid | ID de la base de datos Adabas | Sí |
-fnr | Número del fichero a enmascarar (lo anula -ddmname con -config) | Sí, salvo -ddmname |
-ddmname | Nombre lógico DDM del fichero desde el JSON de -config | No |
-config | Fichero JSON de configuración con el esquema Adabas | Sí, con -ddmname |
-search | Selección de registros con sintaxis Adabas (nombres cortos o DDM) | No |
-sortby | Descriptor/supdescriptor para lectura en orden lógico | No |
-fromisn | ISN inicial de lectura secuencial | No |
-toisn | ISN final de lectura secuencial | No |
-etid | ETID (External Transaction ID) de la conexión | No |
-partialread | Lectura parcial (solo los campos consultados) | No |
-blocksize | Tamaño de bloque de lectura Adabas (por defecto 65536) | No |
-multifetch | Tamaño de multifetch de lectura Adabas (por defecto 200) | No |
-recordbuffershift | Desplazamiento del búfer de registro (por defecto 100) | No |
Qué enmascarar
| Parámetro | Descripción | Requerido |
|---|---|---|
-fields | Campos a enmascarar: CORTO:TIPO[:PAIS] o NOMBRE_DDM:TIPO[:PAIS], separados por comas. Ej.: -fields "AA:DNI,BB:NOMBRE,CC:CPF". El país por campo anula -country (ISO 3166-1 alfa-2) | Sí |
-country | País de diccionarios y validación de formato: ES, AR, US, BR, CL, MX (por defecto ES) | No |
-seed | Semilla maestra del enmascaramiento determinista | Sí, para -apply |
-skip-empty | Omite registros cuyos campos a enmascarar están vacíos | No |
-skip-if-masked | Omite valores que ya no cumplen el formato del tipo (ya anonimizados; por defecto true) | No |
Modos: simulación, aplicación y análisis
| Parámetro | Descripción | Requerido |
|---|---|---|
-simulate | Simulación (por defecto true): informa qué cambiaría sin escribir nada | No |
-apply | Aplica: escribe los valores enmascarados en Adabas (requiere -seed y licencia válida) | No |
-check | Informa cardinalidad original frente a reemplazo por campo | No |
-analyze-config | Analiza el JSON de -config (DDMs) y sugiere ficheros/campos candidatos (heurística, sin conexión) | No |
-commit-every | Transacción cada N registros en modo apply (por defecto 5000) | No |
Informe de simulación
| Parámetro | Descripción | Requerido |
|---|---|---|
-outfile | Fichero de informe de simulación (CSV: ISN,campo,original,reemplazo) | No |
-outfile-max-mb | Aborta la simulación si el informe supera este tamaño en MB (0 = ilimitado) | No |
-write-factor | Multiplicador de estimación del tiempo de escritura sobre el de lectura en simulación (por defecto 2) | No |
Diccionarios
| Parámetro | Descripción | Requerido |
|---|---|---|
-dictdir | Directorio con diccionarios CSV anonimizados (un fichero por tipo, TIPO_PAIS.csv; por defecto dicts) | No |
-dict | Correspondencia explícita TIPO=ruta.csv (repetible) | No |
-dict-delim | Delimitador CSV de diccionarios (por defecto autodetección ; o ,) | No |
-dict-header | Omite la primera línea de cada CSV de diccionario (cabecera) | No |
-gen-dicts | Escribe los diccionarios integrados en el binario en -dictdir y sale | No |
-show-dict | Muestra los valores del diccionario integrado para un TIPO (repetible) | No |
-types | Lista los tipos de enmascaramiento soportados (canónicos en inglés + alias en español) y sale | No |
Diagnóstico, licencia y miscelánea
| Parámetro | Descripción | Requerido |
|---|---|---|
-fdt | Muestra las definiciones de campos FDT y sale | No |
-debug | Activa el registro de depuración | No |
-silence | Modo silencioso (sin banner) | No |
-license | Ruta del license.key firmado (por defecto license.key en el cwd o junto al binario) | No |
-license-fingerprint | Imprime la huella de licencia de esta máquina y sale | No |
-version | Muestra la versión | No |
Incompatibilidades: -simulate y -apply son excluyentes (la simulación es el modo por defecto); -ddmname requiere -config; -apply requiere -seed.
Ejemplos comentados
# 1. Simular primero (recomendado): informa sin escribir nada
./nsadamask -dbid 50 -fnr 15 -fields "AA:DNI,AB:NOMBRE" -country ES \
-seed clave-ficticia-01 -simulate -outfile informe.csv
# 2. Aplicar tras validar la simulación (requiere licencia firmada)
./nsadamask -dbid 50 -fnr 15 -fields "AA:DNI,AB:NOMBRE" -country ES \
-seed clave-ficticia-01 -apply
# 3. Campo brasileño con país por campo (anula -country solo para CC)
./nsadamask -dbid 50 -fnr 15 -fields "AA:DNI,CC:CPF:BR" -country ES \
-seed clave-ficticia-01 -simulate
# 4. Lectura parcial y rango ISN para un subconjunto grande
./nsadamask -dbid 50 -fnr 15 -fields "AC:EMAIL" -country ES \
-seed clave-ficticia-01 -partialread -fromisn 1000 -toisn 5000 -simulate
# 5. Ver qué tipos existen y qué trae un diccionario integrado
./nsadamask -types
./nsadamask -show-dict NOMBRE -country ES
# 6. Sugerir candidatos desde el esquema sin conectarse a Adabas
./nsadamask -config esquema-ficticio.json -ddmname CLIENTES-FICTICIOS -analyze-config
Códigos de retorno
El manual no documenta tabla de códigos; comportamiento observado del binario (salidas 0 informativas y 1 en errores de parámetros, licencia o conexión, verificado en el código y con --help → 0):
| Código | Significado |
|---|---|
0 | Éxito (incluye salidas informativas: -version, -types, -fdt, -gen-dicts, -analyze-config) |
1 | Error (parámetros, licencia inválida/ausente en -apply, conexión Adabas) |
Preguntas frecuentes
¿Por qué debo simular antes de aplicar? -simulate (por defecto) genera el informe por campo —qué valores se reemplazarían— sin escribir en la base; solo tras validarlo se ejecuta -apply.
¿Por qué -apply es rechazado con trial? Aplicar cambios requiere licencia firmada en /opt/ns/licenses/nsadamask.key; sin ella la utilidad funciona en trial de 30 días limitado a simulación.
¿Cómo repito exactamente el mismo enmascaramiento? Reutilice la misma -seed: el mismo valor original produce siempre el mismo reemplazo. Con semillas distintas los resultados no son repetibles.
¿Qué hago si un campo no se enmascara? Revise la definición del fichero (-fdt) y el tipo indicado en -fields (-types lista los soportados); con -skip-if-masked los valores ya anonimizados se omiten por diseño.