Enmascaramiento de datos mediante PostgreSQL Anonymizer

Databases for PostgreSQL Anonymizer es una extensión de PostgreSQL diseñada para anonimizar datos enmascarando o sustituyendo la información comercial sensible y de identificación personal en una base de datos Databases for PostgreSQL.

La extensión admite las siguientes estrategias de enmascaramiento, cada una de ellas adecuada para diferentes casos de uso:

  • Enmascaramiento estático: Elimina la IIP de acuerdo con las normas.
  • Enmascaramiento dinámico: Ocultar la IIP sólo para los usuarios enmascarados.
  • Volcados anónimos: Basta con exportar los datos enmascarados a un archivo SQL.
  • Generalización: Sustituye los valores específicos por categorías o rangos más amplios y menos precisos.

Enmascaramiento estático

El enmascaramiento estático es una técnica de anonimización de datos que sustituye irreversiblemente la información sensible por valores generados sintéticamente, generados sintéticamente. Este proceso garantiza la eliminación completa y permanente de los datos originales, eliminando así la posibilidad de reidentificación o reconstrucción. Para más información, consulte Enmascaramiento estático.

Activar el enmascaramiento estático

  1. Instale la extensión Anonymizer.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inicializar el anonimizador.

    select public.run_anon_init();
    
  3. Definir reglas de enmascaramiento.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION anon.<masking_function>()';
    
  4. Verifique las reglas de enmascaramiento aplicadas.

    SELECT objoid::regclass, provider, label
    FROM pg_seclabel
    WHERE provider = 'anon' AND objoid = '<table_name>'::regclass;
    
  5. Aplicar las reglas de forma permanente. El siguiente comando sustituye de forma permanente los datos originales de la tabla especificada por los datos enmascarados.

    SELECT anon.anonymize_table('<table_name>');
    
  • El enmascaramiento estático es un proceso lento. El principio del enmascaramiento estático consiste en actualizar todas las líneas de todas las tablas que contengan al menos una columna enmascarada. Esto significa que PostgreSQL reescribirá todos los datos del disco. Dependiendo del tamaño de la base de datos, el hardware y la configuración de la instancia, puede ser más rápido exportar los datos anonimizados y volver a cargarlos en la base de datos.

  • Para aplicar el enmascaramiento a las filas recién insertadas en una tabla, ejecute el siguiente comando.

    SELECT anon.anonymize_table('<table_name>');
    

    Este comando garantiza que cualquier dato nuevo que se añada a la tabla se enmascare de acuerdo con las reglas de anonimización configuradas.

Enmascaramiento dinámico

El enmascaramiento dinámico permite al propietario de la base de datos ocultar datos sensibles para usuarios específicos, al tiempo que permite a los usuarios autorizados acceder y modificar los valores originales no enmascarados. Para más información, consulte Enmascaramiento dinámico.

Activar el enmascaramiento dinámico

  1. Instale la extensión Anonymizer.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inicializar el anonimizador.

    select public.run_anon_init();
    
  3. Activar el motor de enmascaramiento dinámico.

    show anon.transparent_dynamic_masking;
    
    select public.enable_dynamic_masking ('<database_name>');
    

    Reinicie la sesión si anon.transparent_dynamic_masking aparece como desactivado.

  4. Crear el rol para el acceso enmascarado.

    CREATE ROLE <role_name> LOGIN;
    
  5. Marcar el rol como usuario enmascarado.

      SECURITY LABEL FOR anon ON ROLE <role_name> IS 'MASKED';
    
  6. Conceder permisos sobre la tabla de enmascaramiento a un rol.

      grant select on <schema_name>.<table_name> to <role_name> ;
    
  7. Declarar las reglas de enmascaramiento.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION anon.<masking_function>()';
    
  8. Verifique las reglas de enmascaramiento.

    SELECT objoid::regclass, provider, label
    FROM pg_seclabel
    WHERE provider = 'anon' AND objoid = '<table_name>'::regclass;
    
  9. Conéctese a la base de datos utilizando el rol enmascarado y consulte la tabla. Debería ver los datos enmascarados según las reglas definidas.

select * from <table_name>;

Notas:

  • El anonimizador enmascara los datos en función de quién los consulta.
  • Los roles enmascarados no deben poder insertar, actualizar o borrar datos.
  • Puede enmascarar la tabla en varios esquemas.
  • Una regla de enmascaramiento puede romper la integridad de los datos. Por ejemplo, puede enmascarar una columna que tenga una restricción UNIQUE con el valor NULL. Es usted quien debe decidir si los usuarios de la máscara necesitan o no la integridad de los datos.
  • Los roles enmascarados no pueden utilizar EXPLAIN.

Vertederos anónimos

Un volcado anónimo se refiere al proceso de exportar una base de datos que contiene datos anonimizados o desidentificados, en lugar de los valores sensibles originales. Esto suele hacerse para compartir, migrar o analizar datos de forma segura sin información personal identificable (IPI) o atributos sensibles. Para más información, consulta Volcados anónimos.

Activar los volcados anónimos

  1. Instale la extensión Anonymizer.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inicializar el anonimizador.

    select public.run_anon_init();
    
  3. Cree un esquema específico para las funciones de enmascaramiento personalizadas.

     CREATE SCHEMA IF NOT EXISTS <schema_name>;
    
  4. Crear un rol para exportar datos enmascarados.

     CREATE ROLE <role_name> LOGIN PASSWORD '<enter_password>';
    
  5. Activar el enmascaramiento para el rol.

    select  public.enable_masking_for_dump('<role_name>','<schema_name>');
    
  6. Defina una función de enmascaramiento personalizada, como en el siguiente ejemplo.

    CREATE OR REPLACE FUNCTION <schema_name>.remove_content(j JSONB)
    RETURNS JSONB
    AS $func$
      SELECT j - ARRAY['content']
    $func$
    LANGUAGE SQL;
    
  7. Crear una regla de enmascaramiento.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION <schema_name>.<custom_masking_function>()';
    
  8. Etiquete el rol como rol enmascarado.

    SECURITY LABEL FOR anon ON ROLE <schema_name> IS 'MASKED';
    
  9. Conceder acceso al esquema enmascarado.

    GRANT USAGE ON SCHEMA <schema_name> TO <masked_role>;
    
  10. Conceder acceso Select en tablas enmascaradas.

grant select ON <schema_name>.<table_name> to <masked_role>;
  1. Exportar datos enmascarados usando pg_dump como rol enmascarado.

Para más información, consulte comandos pg dump.

Para exportar datos enmascarados, ejecute pg_dump utilizando el rol enmascarado. Si pg_dump es ejecutado por un usuario administrador, los datos se exportarán sin enmascaramiento.

Generalización

La idea principal de la generalización es difuminar los datos originales. Para más información, véase Generalización.

Permitir la generalización

  1. Instale la extensión del anonimizador.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inicializar el anonimizador.

    select public.run_anon_init();
    
  3. Crear una vista utilizando funciones de generalización.

    CREATE MATERIALIZED VIEW <view_name> AS
    SELECT
        anon.generalize_daterange(<date_column_1>, 'month') AS <generalized_date_1>,
        anon.generalize_daterange(<date_column_2>, 'month') AS <generalized_date_2>
    FROM <source_table>;
    
  4. Declarar identificadores indirectos.

    SECURITY LABEL FOR k_anonymity
      ON COLUMN <view_name>.<generalized_date_1> IS 'INDIRECT IDENTIFIER';
    
    SECURITY LABEL FOR k_anonymity
      ON COLUMN <view_name>.<generalized_date_2> IS 'INDIRECT IDENTIFIER';
    
  5. Conceder acceso al anonimato k.

    select public.k_anonymity();
    
  6. Ejecute la comprobación de anonimato k en la vista o tabla.

    SELECT anon.k_anonymity('<view_name/table_name>');
    

Desenmascarar un papel

Utilice el siguiente comando para desenmascarar un rol.

SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL;

Desactivar regla de enmascaramiento

Utilice el siguiente comando para desactivar la función de enmascaramiento.

SECURITY LABEL FOR anon
  ON COLUMN <table_name>.<column_name>
  IS NULL;