

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# SQL Server에서 PostgreSQL로 마이그레이션할 때 PII 데이터에 대한 SHA1 해싱 구현
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql"></a>

*Rajkumar Raghuwanshi 및 Jagadish Kantubugata, Amazon Web Services*

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

이 패턴은 SQL Server에서 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL PostgreSQL-Compatible로 마이그레이션할 때 이메일 주소에 대해 Secure Hash Algorithm 1(SHA1) 해싱을 구현하는 방법을 설명합니다. 이메일 주소는 *개인 식별 정보*(PII)의 예입니다. 직접 보거나 다른 관련 데이터와 함께 짝을 지을 때 개인의 신원을 합리적으로 추론하는 데 사용할 수 있는 정보입니다.

이 패턴은 다양한 데이터베이스 데이터 정렬 및 문자 인코딩에서 일관된 해시 값을 유지해야 하는 문제를 다루고 PostgreSQL 함수 및 트리거를 사용하는 솔루션을 제공합니다. 이 패턴은 SHA1 해싱에 초점을 맞추지만 PostgreSQL 모듈에서 지원하는 다른 해싱 알고리즘에 맞게 조정할 수 있습니다`pgcrypto`. 해싱 전략의 보안 영향을 항상 고려하고 민감한 데이터를 처리하는 경우 보안 전문가와 상담하세요.

## 사전 조건 및 제한 사항
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 소스 SQL Server 데이터베이스
+ 대상 PostgreSQL 데이터베이스(Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환 가능)
+ PL/pgSQL 코딩 전문성

**제한 사항 **
+ 이 패턴은 사용 사례에 따라 데이터베이스 수준 데이터 정렬을 변경해야 합니다.
+ 대규모 데이터 세트에 대한 성능 영향은 평가되지 않았습니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전별 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ Microsoft SQL Server 2012 이상

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

**소스 기술 스택 **
+ SQL Server
+ .NET Framework

**대상 기술 스택 **
+ PostgreSQL
+ `pgcrypto`extension

**자동화 및 규모 조정**
+ 더 쉬운 유지 관리를 위해 해싱 함수를 저장 절차로 구현하는 것이 좋습니다.
+ 대규모 데이터 세트의 경우 성능을 평가하고 배치 처리 또는 인덱싱 전략을 고려합니다.

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

**AWS 서비스**
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 또는 클라우드와 온프레미스 설정의 조합 AWS 클라우드 간에 마이그레이션할 수 있습니다.
+ Amazon Relational Database Service(RDS) for PostgreSQL는 AWS Cloud에서 관계형 데이터베이스를 설정, 운영 및 규모를 조정하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

**기타 도구**
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.
+ [Microsoft SQL Server Management Studio(SSMS)](https://learn.microsoft.com/en-us/ssms/sql-server-management-studio-ssms)는 SQL Server 인프라를 관리하기 위한 통합 환경입니다.

## 모범 사례
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-best-practices"></a>
+ 대상 데이터베이스 측에서 특수 문자를 처리하려면 적절한 데이터 정렬 설정을 사용합니다.
+ ASCII 문자가 아닌 주소를 포함하여 다양한 이메일 주소로 철저히 테스트합니다.
+ 애플리케이션과 데이터베이스 계층 간의 대문자 및 소문자 처리 일관성을 유지합니다.
+ 해시 값을 사용하여 쿼리 성능을 벤치마크합니다.

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

### 소스 해싱 구현 분석
<a name="analyze-source-hashing-implementation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SQL Server 코드를 검토합니다. | SHA1 해시를 생성하는 SQL Server 코드를 검토하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 해싱 알고리즘 및 데이터 변환을 문서화합니다. | 정확한 해싱 알고리즘 및 데이터 변환을 문서화하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 

### PostgreSQL 해싱 함수 생성
<a name="create-postgresql-hashing-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CREATE EXTENSION | 다음 명령을 실행하여 확장을 생성합니다.<pre>CREATE EXTENSION pgcrypto;</pre> | DBA, 데이터 엔지니어 | 
| PostgreSQL 함수를 구현합니다. | 다음 PostgreSQL 함수를 구현하여 SQL Server 해싱 로직을 복제합니다. 상위 수준에서이 함수는 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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> | 앱 개발자, 데이터 엔지니어, DBA | 
| 함수를 테스트합니다. | 함수를 테스트하려면 SQL Server의 샘플 데이터를 사용하여 일치하는 해시 값을 확인합니다. 다음 명령을 실행합니다.<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> | 앱 개발자, 데이터 엔지니어 | 

### 자동 해싱을 위한 트리거 구현
<a name="implement-triggers-for-automatic-hashing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 관련 테이블에 트리거를 생성합니다. | 삽입 또는 업데이트 시 해시 값을 자동으로 생성하는 트리거를 관련 테이블에 생성하려면 다음 명령을 실행합니다.<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> | 앱 개발자, 데이터 엔지니어, DBA | 

### [Migrate existing data:]
<a name="migrate-existing-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션 스크립트를 개발하거나 사용합니다 AWS DMS. | 마이그레이션 스크립트를 개발하거나 AWS DMS 를 사용하여 기존 데이터의 해시 값(소스 시스템에 로 저장된 `BIGINT` 해시 값 포함)을 채웁니다. 다음 단계를 완료합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 새 PostgreSQL 해싱 함수를 사용합니다. | 새 PostgreSQL 해싱 함수를 사용하여 일관성을 보장하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, DevOps 엔지니어, DBA | 

### 애플리케이션 쿼리 업데이트
<a name="update-application-queries"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 쿼리를 식별합니다. | 해시된 값을 사용하는 애플리케이션 쿼리를 식별하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어 | 
| 쿼리를 수정합니다. | 필요한 경우 새 PostgreSQL 해싱 함수를 사용하도록 쿼리를 수정합니다. 해결 방법:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어 | 

### 테스트 및 검증
<a name="test-and-validate"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테스트 수행: | 프로덕션 데이터의 하위 집합으로 철저한 테스트를 수행하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 해시 값이 일치하는지 확인합니다. | SQL Server와 PostgreSQL 간에 해시 값이 일치하는지 확인하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 애플리케이션 기능을 확인합니다. | 마이그레이션된 데이터와 새 해싱 구현을 사용하여 애플리케이션 기능을 확인하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어 | 

## 문제 해결
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 해시 값이 일치하지 않습니다. | 소스와 대상 간의 문자 인코딩 및 데이터 정렬을 확인합니다. 자세한 내용은 Amazon [Aurora 및 Amazon RDS의 PostgreSQL에서 데이터 정렬 변경 관리](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/)(AWS 블로그)를 참조하세요. | 

## 관련 리소스
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-resources"></a>

**AWS 블로그**
+ [Amazon Aurora 및 Amazon RDS의 PostgreSQL에서 데이터 정렬 변경 관리](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/)
+ [필드에서 학습한 모범 사례와 교훈을 사용하여 SQL Server를 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-sql-server-to-amazon-aurora-postgresql-using-best-practices-and-lessons-learned-from-the-field/)

**기타 리소스**
+ [PostgreSQL pgcrypto 모듈](https://www.postgresql.org/docs/current/pgcrypto.html)(PostgreSQL 설명서)
+ [트리거 함수](https://www.postgresql.org/docs/current/plpgsql-trigger.html) (PostgreSQL 문서)
+ [SQL Server HASHBYTES 함수](https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql)(Microsoft 설명서)