从 SQL Server 迁移到 PostgreSQL 时,对 PII 数据实施 SHA1 哈希处理 - AWS 规范指引

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 SQL Server 迁移到 PostgreSQL 时,对 PII 数据实施 SHA1 哈希处理

Rajkumar Raghuwanshi 和 Jagadish Kantubugata,Amazon Web Services

Summary

此模式描述了在从 SQL Server 迁移到适用于 PostgreSQL 的亚马逊 RDS 或兼容 Amazon Aurora PostgreSQL 时,如何对电子邮件地址实施安全哈希算法 1 (SHA1) 哈希。电子邮件地址是个人身份信息(PII)的一个示例。直接查看其他相关数据或与之配对时可用于合理推断个人身份的信息。

此模式介绍了在不同的数据库归类和字符编码中保持一致的哈希值所面临的挑战,并提供了使用 PostgreSQL 函数和触发器的解决方案。尽管这种模式侧重于 SHA1 哈希,但它可以适应PostgreSQL模块支持的其他哈希算法。pgcrypto请务必考虑哈希算法策略的安全影响,如果要处理敏感数据,请咨询安全专家。

先决条件和限制

先决条件

  • 活跃的 AWS 账户

  • 检查源 SQL Server 数据库。

  • 目标 PostgreSQL 数据库(Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容版)

  • PL/pgSQL 编码专业知识

限制

  • 此模式需要根据使用案例更改数据库级别的排序规则。

  • 尚未评估对大型数据集的性能影响。

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按区域划分的AWS 服务。有关特定端点,请参阅服务端点和配额,然后选择相应服务的链接。

产品版本

  • Microsoft SQL Server 2012 或更高版本

架构

源技术堆栈

  • SQL Server

  • NET Framework。

目标技术堆栈

  • PostgreSQL

  • pgcryptoextension

自动化和扩展

  • 为了便于维护,可以考虑将哈希函数作为存储过程来实现。

  • 对于大型数据集,则可评估性能并考虑批处理或索引策略。

工具

AWS 服务

其他工具

  • pgAdmin 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面,可帮助您创建、维护和使用数据库对象。

  • SQL Server Management Studio(SSMS)是用于管理 任何 SQL 基础设施的集成环境。

最佳实践

  • 使用适当的归类设置来处理目标数据库端的特殊字符。

  • 使用各种电子邮件地址(包括带有非 ASCII 字符的地址)进行彻底全面的测试。

  • 保持应用程序层和数据库层之间大写和小写处理的一致性。

  • 使用哈希值对查询的性能进行基准测试。

操作说明

Task说明所需技能

查看 SQL 服务器代码。

要查看生成 SHA1 哈希值的 SQL Server 代码,请执行以下操作:

  • 分析 SHA1 哈希的现有 SQL Server 实现。

  • 确定用于生成哈希值的确切方法。

  • 记录输入参数和输出格式。

  • 查看所有数据类型转换或变换。

  • 检查归类设置及其影响。

数据工程师、数据库管理员、应用程序开发人员

要记录确切的哈希算法和数据转换,请执行以下操作:

要记录确切的哈希算法和数据转换,请执行以下操作:

  • 创建哈希算法过程的详细技术文档。

  • 记录 step-by-step转换逻辑。

  • 指定输入和输出格式以及数据类型。

  • 包括边缘案例和特殊字符处理。

应用程序开发人员、数据工程师、数据库管理员
Task说明所需技能

创建 pgcrypto 扩展。

要创建 pgcrypto 扩展,请使用 pgAdmin/psql 运行以下命令:

CREATE EXTENSION pgcrypto;
数据库管理员、数据工程师

实现 PostgreSQL 函数。

实现以下 PostgreSQL 函数来复制 SQL Server 的哈希逻辑。简而言之,此函数会使用以下步骤:

  1. (可选)将输入转换为大写。

  2. 创建输入的 SHA1 哈希值。

  3. 取此哈希值的最后 10 个字节(80 位)。

  4. 将这些字节转换为 64 位整数。

CREATE OR REPLACE FUNCTION utility.hex_to_bigint ( par_val character varying, par_upper character varying DEFAULT 'lower'::character varying) RETURNS bigint LANGUAGE 'plpgsql' AS $BODY$ DECLARE retnumber bigint; digest_bytes bytea; BEGIN if lower(par_upper) = 'upper' then digest_bytes := digest(upper(par_val), 'sha1'); else digest_bytes := digest((par_val), 'sha1'); end if; retnumber := ('x' || encode(substring(digest_bytes, length(digest_bytes)-10+1), 'hex'))::bit(64)::bigint; RETURN retnumber; END; $BODY$;
数据工程师、数据库管理员、应用程序开发人员

测试函数。

要测试该函数,请使用来自 SQL Server 的示例数据来验证匹配的哈希值。运行如下命令:

select 'alejandro_rosalez@example.com' as Email, utility.hex_to_bigint('alejandro_rosalez@example.com','upper') as HashValue; --OUTPUT /* email hashvalue "alejandro_rosalez@example.com" 451397011176045063 */
应用程序开发人员、数据库管理员、数据工程师
Task说明所需技能

在相关表上创建触发器。

要在相关表上创建触发器以在插入或更新时自动生成哈希值,请运行以下命令:

CREATE OR REPLACE FUNCTION update_email_hash() RETURNS TRIGGER AS $$ BEGIN NEW.email_hash = utility.hex_to_bigint(NEW.email, 'upper'); RETURN NEW; END; $$ LANGUAGE plpgsql;
CREATE TRIGGER email_hash_trigger BEFORE INSERT OR UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_email_hash();
应用程序开发人员、数据工程师、数据库管理员
Task说明所需技能

开发迁移脚本或使用 AWS DMS。

开发迁移脚本或使用 AWS DMS 为现有数据(包括存储在源系统BIGINT中的哈希值)填充哈希值。完成以下任务:

  • 使用哈希值创建用于数据传输的迁移脚本。

  • 使用适当的转换规则配置 AWS DMS 任务。

  • 在中设置源端点和目标端点 AWS DMS。

  • 实施错误处理和日志记录机制。

  • 为大型数据集设计批处理策略。

  • 创建用于数据验证的验证查询。

数据工程师、应用程序开发人员、数据库管理员

使用新的 PostgreSQL 哈希函数。

要使用新的 PostgreSQL 哈希函数以确保一致性,请执行以下操作:

  • 实施验证程序以验证哈希一致性。

  • 创建源和目标系统之间的比较脚本。

  • 为哈希值验证设置自动测试。

  • 记录任何差异和解析步骤。

应用程序开发人员、数据库管理员、 DevOps 工程师
Task说明所需技能

识别应用程序查询。

要识别使用哈希值的应用程序查询,请执行以下操作:

  • 使用哈希值分析应用程序代码库以进行查询。

  • 查看引用哈希操作的存储过程和函数。

  • 记录查询性能指标和执行计划。

  • 确定对散列查找的依赖关系。

  • 绘制受影响的应用程序组件。

应用程序开发人员、数据库管理员、数据工程师

修改查询。

如有必要,可以修改查询以使用新的 PostgreSQL 哈希函数。执行以下操作:

  • 重构现有查询,以使用 PostgreSQL 哈希函数。

  • 执行存储过程和函数

  • 实施和测试新的查询模式。

  • 优化修改后的查询以提高性能。

应用程序开发人员、数据库管理员、数据工程师
Task说明所需技能

执行测试。

要对生产数据的子集执行全面的测试,请执行以下操作:

  • 为数据子集验证创建测试计划。

  • 提取具有代表性的生产数据样本。

  • 设置测试环境,配置正确。

  • 执行数据加载和转换测试。

  • 执行音量和 stress 测试。

应用程序开发人员、数据工程师、数据库管理员

验证哈希值是否匹配。

要验证 SQL Server 和 PostgreSQL 之间的哈希值是否匹配,请执行以下操作:

  • 为哈希值开发比较脚本。

  • 为哈希匹配创建验证报告。

  • 实施自动验证程序。

  • 记录发现的任何差异。

  • 分析并解决哈希不匹配的问题。

应用程序开发人员、数据工程师、数据库管理员

验证应用程序功能。

要使用迁移的数据和新的哈希实现来验证应用程序功能,请执行以下操作:

  • 执行 end-to-end应用程序测试。

  • 使用哈希数据验证所有应用程序功能。

  • 使用新的实现来测试应用程序性能。

  • 验证 API 集成和依赖项。

应用程序开发人员、数据库管理员、数据工程师

问题排查

问题解决方案

哈希值不匹配。

验证源和目标之间的字符编码和排序规则。有关更多信息,请参阅在 Amazon A urora 和 Amazon RDS 上管理 PostgreSQL 中的排序规则更改(博客)。AWS

相关资源

AWS 博客

其他资源