

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Implemente SHA1 el hash para los datos de PII al migrar de SQL Server a PostgreSQL
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql"></a>

*Rajkumar Raghuwanshi y Jagadish Kantubugata, Amazon Web Services*

## Resumen
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-summary"></a>

Este patrón describe cómo implementar el hash del algoritmo de hash seguro 1 (SHA1) para las direcciones de correo electrónico al migrar de SQL Server a Amazon RDS for PostgreSQL o Amazon Aurora compatible con PostgreSQL. Una dirección de correo electrónico es un ejemplo de *información de identificación personal* (PII). La PII es información que, vista directamente o combinada con otros datos relacionados, puede utilizarse para deducir de manera razonable la identidad de una persona. 

Este patrón cubre los desafíos de mantener valores hash coherentes en diferentes intercalaciones de bases de datos y codificaciones de caracteres, y proporciona una solución con funciones y desencadenadores de PostgreSQL. Si bien este patrón se centra en el uso de SHA1 hash, se puede adaptar a otros algoritmos de hash compatibles con el módulo de PostgreSQL. `pgcrypto` Tenga siempre en cuenta las implicaciones de seguridad de su estrategia de hash y consulte con expertos en seguridad si maneja información confidencial.

## Requisitos previos y limitaciones
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ La base de datos de SQL Server de origen
+ La base de datos de PostgreSQL de destino (Amazon RDS para PostgreSQL o Aurora compatible con PostgreSQL)
+ Experiencia en codificación PL/pgSQL

**Limitaciones**
+ Este patrón requiere cambios en la intercalación en el nivel de base de datos en función de los casos de uso.
+ No se ha evaluado el impacto en el rendimiento de conjuntos de datos de gran tamaño.
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Microsoft SQL Server 2012 o posterior

## Arquitectura
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-architecture"></a>

**Pila de tecnología de origen**
+ SQL Server
+ .NET Framework

**Pila de tecnología de destino**
+ PostgreSQL
+ Extensión `pgcrypto`

**Automatización y escala**
+ Considere la posibilidad de implementar la función de hash como un procedimiento almacenado para facilitar el mantenimiento.
+ Para conjuntos de datos grandes, evalúe el rendimiento y considere el procesamiento por lotes o las estrategias de indexación.

## Tools (Herramientas)
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-tools"></a>

**Servicios de AWS**
+ [Amazon Aurora compatible con PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) es un motor de base de datos relacional compatible con ACID, totalmente administrado que le permite configurar, utilizar y escalar implementaciones de PostgreSQL.
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) le ayuda a migrar los almacenes de datos a una combinación de configuraciones locales y en la nube Nube de AWS o entre ellas.
+ [Amazon Relational Database Service (Amazon RDS) para PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) lo ayuda a configurar, utilizar y escalar una base de datos relacional de PostgreSQL en la Nube de AWS.
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) admite migraciones de bases de datos heterogéneas al convertir automáticamente el esquema de la base de datos de origen y la mayoría del código personalizado a un formato compatible con la base de datos de destino.

**Otras herramientas**
+ [pgAdmin](https://www.pgadmin.org/) es una herramienta de administración de código abierto para PostgreSQL. Proporciona una interfaz gráfica que permite crear, mantener y utilizar objetos de bases de datos.
+ [SQL Server Management Studio (SSMS)](https://learn.microsoft.com/en-us/ssms/sql-server-management-studio-ssms) es un entorno integrado para administrar infraestructuras de SQL Server.

## Prácticas recomendadas
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-best-practices"></a>
+ Utilice la configuración de intercalación adecuada para gestionar los caracteres especiales en la base de datos de destino.
+ Haga pruebas exhaustivas con una variedad de direcciones de correo electrónico, incluidas las direcciones con caracteres que no sean ASCII.
+ Mantenga la coherencia en la gestión de mayúsculas y minúsculas entre las capas de aplicación y base de datos.
+ Compare el rendimiento de las consultas utilizando los valores con hash.

## Epics
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-epics"></a>

### Análisis de la implementación del hash de origen
<a name="analyze-source-hashing-implementation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Revisar el código de SQL Server. | Para revisar el código de SQL Server que genera SHA1 hashes, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Ingeniero de datos, administrador de base de datos, desarrollador de aplicaciones | 
| Documentar el algoritmo de hash y las transformaciones de los datos. | Para documentar el algoritmo de hash exacto y las transformaciones de los datos, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Desarrollador de aplicaciones, ingeniero de datos, administrador de base de datos | 

### Creación de la función de hash de PostgreSQL
<a name="create-postgresql-hashing-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear la extensión `pgcrypto`. | Para crear la extensión `pgcrypto`, use `pgAdmin/psql` para ejecutar el siguiente comando:<pre>CREATE EXTENSION pgcrypto;</pre> | Administrador de base de datos, ingeniero de datos | 
| Implementar una función de PostgreSQL. | Implemente la siguiente función de PostgreSQL para replicar la lógica de hash de SQL Server. En líneas generales, esta función utiliza los pasos siguientes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html)<pre>CREATE OR REPLACE FUNCTION utility.hex_to_bigint ( <br />     par_val character varying, <br />     par_upper character varying DEFAULT 'lower'::character varying) <br />RETURNS bigint <br />LANGUAGE 'plpgsql' <br />AS $BODY$ <br />DECLARE <br />    retnumber bigint; <br />    digest_bytes bytea;<br />BEGIN <br />    if lower(par_upper) = 'upper' <br />    then <br />        digest_bytes := digest(upper(par_val), 'sha1');<br />    else <br />        digest_bytes := digest((par_val), 'sha1');<br />    end if; <br />    retnumber := ('x' || encode(substring(digest_bytes, length(digest_bytes)-10+1), 'hex'))::bit(64)::bigint; <br />    RETURN retnumber; <br />END; <br />$BODY$;</pre> | Ingeniero de datos, administrador de base de datos, desarrollador de aplicaciones | 
| Pruebe la función. | Para probar la función, utilice datos de ejemplo de SQL Server para comprobar que los valores de hash coincidan. Use el siguiente comando:<pre>select 'alejandro_rosalez@example.com' as Email, utility.hex_to_bigint('alejandro_rosalez@example.com','upper') as HashValue;<br /><br />--OUTPUT<br />/*<br />email 	        hashvalue<br />"alejandro_rosalez@example.com"	451397011176045063<br />*/<br /></pre> | Desarrollador de aplicaciones, administrador de base de datos, ingeniero de datos | 

### Implementación de desencadenadores para el hash automático
<a name="implement-triggers-for-automatic-hashing"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear desencadenadores en las tablas pertinentes. | Para crear desencadenadores en las tablas pertinentes para generar automáticamente valores de hash al insertar o actualizar, ejecute el siguiente comando:<pre>CREATE OR REPLACE FUNCTION update_email_hash() <br />RETURNS TRIGGER <br />AS $$ <br />BEGIN <br />    NEW.email_hash = utility.hex_to_bigint(NEW.email, 'upper'); <br />    RETURN NEW; <br />END; <br />$$ LANGUAGE plpgsql;</pre><pre>CREATE TRIGGER email_hash_trigger BEFORE INSERT OR UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_email_hash();</pre> | Desarrollador de aplicaciones, ingeniero de datos, administrador de base de datos | 

### Migración de los datos existentes
<a name="migrate-existing-data"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Desarrolle o utilice un script de migración AWS DMS.  | Desarrolle un script de migración o AWS DMS utilícelo para rellenar los valores hash de los datos existentes (incluidos los valores hash almacenados `BIGINT` en el sistema de origen). Realice los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Ingeniero de datos, desarrollador de aplicaciones, administrador de base de datos | 
| Utilizar la nueva función de hash de PostgreSQL. | Para utilizar la nueva función de hash de PostgreSQL y garantizar la coherencia, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Desarrollador de aplicaciones, administrador de bases de datos, ingeniero DevOps  | 

### Actualización de consultas de aplicaciones
<a name="update-application-queries"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Identificar las consultas de aplicaciones. | Para identificar las consultas de la aplicación que utilizan valores de hash, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Desarrollador de aplicaciones, administrador de base de datos, ingeniero de datos | 
| Modificar consultas. | Si es necesario, modifique las consultas para usar la nueva función de hash de PostgreSQL. Haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Desarrollador de aplicaciones, administrador de base de datos, ingeniero de datos | 

### Prueba y validación
<a name="test-and-validate"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Hacer pruebas. | Para llevar a cabo pruebas exhaustivas con un subconjunto de datos de producción, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Desarrollador de aplicaciones, ingeniero de datos, administrador de base de datos | 
| Validar que los valores de hash coincidan. | Para validar que los valores de hash coincidan entre SQL Server y PostgreSQL, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Desarrollador de aplicaciones, ingeniero de datos, administrador de base de datos | 
| Verificar la funcionalidad de la aplicación. | Para verificar la funcionalidad de la aplicación mediante los datos migrados y la nueva implementación de hash, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | Desarrollador de aplicaciones, administrador de base de datos, ingeniero de datos | 

## Resolución de problemas
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Los valores de hash no coinciden. | Compruebe las codificaciones de caracteres y las intercalaciones entre el origen y el destino. Para obtener más información, consulte [Administrar los cambios de intercalación en PostgreSQL en Amazon Aurora y Amazon AWS RDS](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/) (blog). | 

## Recursos relacionados
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-resources"></a>

**AWS Blogs**
+ [Manage collation changes in PostgreSQL on Amazon Aurora and Amazon RDS](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/)
+ [Migrate SQL Server to Amazon Aurora PostgreSQL using best practices and lessons learned from the field](https://aws.amazon.com/blogs/database/migrate-sql-server-to-amazon-aurora-postgresql-using-best-practices-and-lessons-learned-from-the-field/)

**Otros recursos**
+ [PostgreSQL pgcrypto module](https://www.postgresql.org/docs/current/pgcrypto.html) (documentación de PostgreSQL)
+ [PostgreSQL trigger functions](https://www.postgresql.org/docs/current/plpgsql-trigger.html) (documentación de PostgreSQL)
+ [SQL Server HASHBYTES function](https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql) (documentación de Microsoft)