SQL Server의 데이터 난독 화


43

SQL Server의 데이터 난독 화에 대한 모범 사례는 무엇입니까?

UAT 시스템에서 마스크 된 프로덕션 데이터를 사용하고 싶습니다.

우리가 신속하고 난독 화 수준을 높이기 위해 어떤 접근 방식을 취해야합니까? 사람들의 이름과성에 대한 문자 스크램블링을 생각하고 있지만 어떻게? 함수를 직접 만들어야합니까, 아니면 사용할 수있는 미리 정의 된 함수가 있습니까? 나는 바퀴를 재발 명하는 데 시간을 보내고 싶지 않습니다 :)

날짜 필드는 어떻습니까? 예를 들어 생년월일을 전체 테이블에서 임의로 선택하여 기록에 할당해야합니까, 아니면 더 나은 방법이 있습니까?

답변:


25

나는 이것에 대해 생각하기 위해 당신에게 100 점을 표명 할 수 있기를 바랍니다! 나는이 주제가 여러 번 간과 된 것을 보았습니다. 내가 이해 한 것에서 실제로 필드 자체의 데이터를 스크램블하고 싶어하지만, 달성하려는 것을 이해하더라도 그렇게 할 필요는 없지만 비록 사례별로 고려되어야합니다.

대부분의 데이터 보호법은 생년월일 또는 전화 번호와 같이 개인과 데이터를 올바르게 연결하는 기능과 관련이 있습니다. 생산에서 데이터를 UAT로 옮길 때 데이터가 혼란스러워 원래 사람에게 쉽게 다시 매핑되지 않도록, 특히 성 및 이름을 뒤섞을 때 법률의 요구 사항을 충족 할 수 있습니다.

그러나 연락처 정보와 같은 문제는 다루지 않습니다. 당신은 데이터를 점령함으로써 법의 요구 사항을 충족시킬 수 있지만 전화 번호는 여전히 실제적이며, 이메일은 여전히 ​​실제적입니다 ... 그들은 올바른 사람에게 할당되지 않았습니다. 이를 위해 UAT로 데이터를 전달하기 전에 해당 데이터를 지울 수있는 경우 Red Gate는 임의의 테스트 데이터를 생성하여 테스트 할 수있는 데이터로 필드를 다시 채울 수있는 Data Generator 라는 소프트웨어 를 사용하는 것이 좋습니다.

데이터 스크램블링과 관련 하여이 작업을 수행하는 많은 응용 프로그램이 있으며 정직하게 바퀴를 재발 명하지 않으려는 것이 맞습니다. 우리 회사에서 사용하는 제품 은 Net2000이라는 회사의 Data Masker 라는 제품 입니다. 라이센스는 매우 저렴하고 매우 빠르게 작동하며 데이터베이스를 스크램블링하기 전에 모든 제약 조건을 비활성화 할 필요가 없습니다.

물론 요구 사항을 충족하는 것을 찾지 못하면 자신의 솔루션을 롤링 할 수 있습니다.이를 결정하면 CLR 절차를 사용하여 순수 TSQL보다 훨씬 유연하기 때문에 CLR 절차를 사용하는 것이 좋습니다. TSQL을 사용할 수 없습니다 ( 여기 참조 ).

당신이 당신을 위해 이것을 수행하기 위해 응용 프로그램을 선택하면 다음으로 결정해야 할 것은 실제로 스크램블하고 싶은 것이 무엇입니까? 솔직히 가장 좋은 리소스는 회사 법률 팀 및 회사 감사원입니다. 나는 우리가 때때로 그들과 함께 일하는 것을 좋아하지 않을 수도 있지만, 그들은 그들에게 다가 가서 질문을하기보다는 오히려 그들에게 다가 가서 질문을하는 것이 당신에게 훨씬 더 좋을 것임을 알고 있습니다. -특히 이것만큼 중요 할 때.

나는 이것이 당신에게 도움이되기를 바랍니다.


1
가능하다면 회사 정책에 대해 추가적인 공감대를 제공 할 것입니다.
dezso

법적 요구 사항은 이해 당사자가 결정합니다. 지금 구현해야합니다.
Sky

Bownstone 씨는 당신의 설명은 언제나처럼 훌륭합니다. 감사합니다. 이를 위해 CLR 기능을 확인하고 T-SQL도 살펴 보겠습니다. 어느 것이 더 적합하고 더 빠른지 확인하십시오.
Sky

10

브라운 스톤 씨가 머리에 바로 못을 박았습니다. 이제 여러분을 돕기 위해 문자열을 난독 화하는 데 사용되는 "가상"기능이 있습니다 (이름이있는 재미있는 결과!). 문자열을 전달하면 깨진 문자열이 반환됩니다. 문자열 열에 대한 업데이트 문에 포함하십시오. 데이터 길이를 적절하게 변경하십시오.

---------------------
-- Garble Function --
---------------------
-- Make a function to slightly garble the strings
IF (object_id('fn_Garble') is not null)
  drop function fn_Garble
go
create function fn_Garble
(
  @String varchar(255)
)  
returns varchar(255)
as
BEGIN
  select @String = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@String,'o','e'),'a','o'),'i','a'),'u','i'),'t','p'),'c','k'),'d','th'),'ee','e'),'oo','or'),'ll','ski')
  return @String
END
go

3
익숙한가? (여러분의 요점을 설명 할뿐입니다.) SQL Server에 대한 정보가 있습니다. 전제 조건 ef Meprepelas는 kekang Waph SQL을 사용합니다. 우리는 pravope sekper ergonazopaens에 thopobose kensilponps pe voraeis piblak를 prevathe. SQL Server Mogozane의 모든 문서 및 문서 p-SQL 101 서버 또는 전자 패키지에 대한 설명. SQL Server와 SQL Server 모두에 대해 설명합니다.
dezso

1
허 .. 인식하는 데 시간이 걸렸습니다. 거기에 많은 깨지지 않는 단어들이있는 것 같습니다. 나는 이름, 성, 도시 이름에 대해서만 사용했습니다. 바보 같은 작은 기능. 나는 내 경력을 쌓지 않을 것입니다.
datagod

나는 접근 방식을 고맙게 생각합니다-단순하지만 작동했습니다. 그리고 플러스는 텍스트를 여전히 읽을 수 있다는 것입니다. 나는 그것을 이해할 수 없었다 :)
dezso

7

고객 소매 판매 데이터를 위해이 작업을 수행해야했습니다. 이름은 인구 조사에 가서 모든 성과 이름을 모두 다운로드하고, 모든 성명을 추가하고 모든 성의 코드를 추가하고 모든 대문자로 테이블에로드하는 루프를 통해 그들을 실행했습니다. 그런 다음 약 4 억 개의 고유 한 이름을 가진 테이블이있었습니다. 현재 데이터가 대문자가 아니기 때문에 대문자를 사용 했으므로 제거 된 데이터를 더 쉽게 알 수 있습니다.

사용자 데이터를 스크러빙 할 때 이름을 바 꾸었습니다. 생일을 위해 모든 사람들이 실제로 태어 났고 우편 번호로 전화 번호를 업데이트했습니다 (내 데이터는 미국에만 해당). 이메일 주소는 이름이 @ mycompany.co 인 초기 이름이되었습니다. 우편 주소는 나에게 가장 슬픔을 주었지만 주소, 주소가 변경되면 문제가되지 않는다고 생각하기 때문에 도시, 주 및 우편 번호를 유지했습니다. 나는 동료에게 문자가 깨져서 주소 줄이 업데이트되는 프로그램을 가지고있었습니다.

어딘가에서 데이터를 복제했지만 여전히 기본 사용자에게 FK가 있습니다 (나쁜 디자인은 그렇지만 내 것이 아닙니다).이 데이터도 업데이트하여 이름이 사용자 x의 데이터베이스 전체에서 일관되었습니다.

주소가 의미가 없지만 전반적으로 내 데이터는 여전히 읽을 수 있습니다. 이 모든 작업을 수행하는 데 며칠이 걸렸지 만 일단 완료되고 SQL 에이전트 작업이 생성되면 15 분 안에 데이터를 스크러빙 할 수있었습니다.


나는 당신의 접근 방식을 좋아합니다. 이름과성에 관해서는 데이터 세트가 충분히 큰 경우 변형 수준이 좋으면 인구 조사 웹 사이트에서 이름을 다운로드하지 않고 소스로 사용할 수 있다고 생각합니다. SELECT DISTICT로 데이터를 쿼리하면 우리가 가지고 놀아야 할 많은 독특한 가치가 있습니다.
Sky

0

단일 필드를 난독 처리하려면 HASHBYTES 함수 (SQL 2008+)를 사용하는 것이 어떻습니까? 데이터에 소금을 뿌리면 알고리즘을 선택할 수 있습니다 (MD5이면 충분합니다). 따라서 그냥 수행 SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) 하는 대신 SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>')쉽게 무차별 강요 할 수없는 해시가 있습니다.

지원 가능하고 반복 가능하며 훨씬 더 빠른 실제 기능입니다. 난독 처리와 난독 처리에 필요한 양에 따라 더 약하고 빠른 해시를 사용할 수도 있습니다.


이 시대에 MD5를 사용해서는 안되며, 안전하지 않습니다.
Philᵀᴹ

좋아 ... HASHBYTES : 당신을위한 선택은 여기 있습니다 MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 ! (예, 사용해서는 안되는 것을 포함). SHA2_512를 사용한다고 가정 해 봅시다.이 접근 방식에 문제가 있습니까?
cmcapellan

-1

Chrissy Lemaire (@ chrissy-lemaire)와 그녀의 팀이 작성한 정적 데이터 마스킹의 무료 옵션에 대해서는 dbatools PowerShell 모듈을 살펴보십시오. 그들의 도구는 모두 훌륭하기 때문에 이것이 가치가 있다고 확신합니다.

dbatools에서 조회 할 두 명령은 다음과 같습니다. New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

이것을 알리는 블로그 게시물을보십시오 : 자동 데이터 마스킹


2
답변 만 링크가 도움이되지 않습니다. cmdlet 등을 사용하는 방법에 대한 예를 제공하여 답변을 향상시킬 수 있습니다.
Erik Darling
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.