การทำให้ข้อมูลสับสนใน SQL Server


43

แนวปฏิบัติที่ดีที่สุดสำหรับ Data Obfuscation ใน SQL Server คืออะไร

เราต้องการใช้ข้อมูลการผลิตแบบสวมหน้ากากในระบบเอือดของเรา

ถ้าเราต้องการที่จะทำมันอย่างรวดเร็วและด้วยระดับ obsfucation ที่สูงขึ้นวิธีการที่ควรจะนำมา? ฉันกำลังคิดเกี่ยวกับการแย่งชิงตัวละครสำหรับชื่อและนามสกุลของผู้คน แต่อย่างไร ฉันควรสร้างฟังก์ชั่นด้วยตัวเองหรือมีฟังก์ชั่นที่กำหนดไว้ล่วงหน้าให้ใช้งานหรือไม่? ฉันไม่ต้องการใช้เวลาคิดค้นวงล้อใหม่ :)

แล้วฟิลด์วันที่ล่ะ? ตัวอย่างเช่นควรเลือกวันเดือนปีเกิดแบบสุ่มจากตารางทั้งหมดและมอบหมายให้บันทึกหรือมีวิธีที่ดีกว่าในการทำเช่นนั้น?

คำตอบ:


25

ฉันหวังว่าฉันจะลงคะแนนให้คุณ 100 คะแนนเพียงแค่คิดเกี่ยวกับเรื่องนี้! ฉันได้เห็นเรื่องนี้มองข้ามหลายครั้งมันไม่จริง - ทำได้ดีมาก จากสิ่งที่ฉันเข้าใจว่าคุณต้องการที่จะแย่งข้อมูลภายในเขตข้อมูลด้วยตนเองและถึงแม้ว่าฉันเข้าใจว่าคุณกำลังพยายามทำให้บรรลุผลอาจไม่จำเป็นต้องทำเช่นนั้น - แม้ว่าควรพิจารณาเป็นรายกรณีไป

กฎหมายคุ้มครองข้อมูลส่วนใหญ่จะหมุนรอบความสามารถในการเชื่อมโยงข้อมูลกับบุคคลได้อย่างถูกต้องตัวอย่างเช่นวันเกิดหรือหมายเลขโทรศัพท์ คุณสามารถปฏิบัติตามข้อกำหนดของกฎหมายได้โดยการทำให้แน่ใจว่าเมื่อคุณย้ายข้อมูลของคุณออกจากการผลิตไปยัง UAT นั้นจะมีการวนซ้ำดังนั้นมันจึงไม่ได้แมปกับคนดั้งเดิมได้ง่ายโดยเฉพาะอย่างยิ่งเมื่อคุณใส่ชื่อและนามสกุล

อย่างไรก็ตามสิ่งนี้ไม่ได้แก้ไขปัญหาตัวอย่างเช่นรายละเอียดการติดต่อ คุณสามารถทำตามข้อกำหนดของกฎหมายได้โดยการวนข้อมูล แต่หมายเลขโทรศัพท์ยังคงเป็นจริงอีเมลยังคงเป็นจริง ฯลฯ ... พวกเขาไม่ได้ถูกมอบหมายให้กับบุคคลที่ถูกต้อง สำหรับเรื่องนี้ฉันขอแนะนำว่าหากเป็นไปได้ในการล้างข้อมูลก่อนที่จะผ่านเข้าไปใน UAT Red Gate จะทำซอฟต์แวร์ที่เรียกว่าData Generatorที่สามารถสร้างข้อมูลทดสอบแบบสุ่มให้คุณเพื่อให้คุณสามารถ repopulate เขตข้อมูลด้วยข้อมูลที่สามารถทดสอบได้

สำหรับการตรวจสอบข้อมูล: มีแอปพลิเคชั่นมากมายที่ทำสิ่งนี้เพื่อคุณและโดยสุจริตว่าคุณถูกต้องในการไม่ต้องการบูรณาการล้อ สิ่งที่เราใช้ใน บริษัท ของเราคือผลิตภัณฑ์ที่ชื่อว่าData Masker โดย บริษัท ที่ชื่อว่า Net2000 ใบอนุญาตค่อนข้างถูกใช้งานได้อย่างรวดเร็วและคุณไม่ต้องกังวลกับการปิดการใช้งานข้อ จำกัด ทั้งหมดก่อนที่จะตรวจฐานข้อมูล

แน่นอนคุณสามารถม้วนโซลูชันของคุณเองหากคุณไม่พบสิ่งใดที่ตรงกับความต้องการของคุณ - ถ้าคุณตัดสินใจที่จะทำเช่นนี้ฉันขอแนะนำให้ใช้ขั้นตอนการ CLR เพื่อทำมันเพราะมันยืดหยุ่นกว่า TSQL อย่างแท้จริง (ไม่ต้องบอกว่าคุณ ไม่สามารถใช้ TSQL ดูที่นี่ )

เมื่อคุณเลือกแอปพลิเคชันเพื่อทำสิ่งนี้ให้คุณสิ่งต่อไปที่คุณต้องตัดสินใจคือสิ่งที่คุณต้องการ / ต้องการที่จะแย่งกันจริง ๆ ? ทรัพยากรที่ดีที่สุดของคุณสำหรับเรื่องนี้คือทีมกฎหมายของ บริษัท และผู้ตรวจสอบบัญชีของ บริษัท ฉันรู้ว่าบางครั้งเราอาจไม่ชอบทำงานกับพวกเขา แต่พวกเขาจะดีกว่าสำหรับคุณที่จะเข้าหาพวกเขาและถามคำถามพวกเขามากกว่าที่จะพยายามทำด้วยตัวคุณเองและทำให้มันผิด - โดยเฉพาะเมื่อมีความสำคัญเท่านี้

ฉันหวังว่านี่จะช่วยคุณและฉันขอให้คุณโชคดีในการสืบเสาะของคุณ ... ;-)


1
ถ้าทำได้ฉันจะเพิ่มสถานที่สำหรับการกล่าวถึงนโยบายของ บริษัท
dezso

ข้อกำหนดทางกฎหมายถูกกำหนดโดยผู้มีส่วนได้เสีย ฉันควรนำไปใช้ทันที
สกาย

Mr Bownstone คำอธิบายของคุณยอดเยี่ยมเช่นเคย ขอขอบคุณ. ฉันจะตรวจสอบฟังก์ชัน CLR สำหรับสิ่งนี้และจับตาดู T-SQL เช่นกัน ดูว่าอันไหนเหมาะกว่าและเร็วกว่าในการสร้าง
สกาย

10

นายบราวน์สโตนกระแทกเล็บที่หัว ตอนนี้เพื่อช่วยคุณออกไปเล็กน้อยนี่คือฟังก์ชั่น "garble" ของฉันที่ใช้ในการทำให้งงสตริง (ผลลัพธ์ที่ตลกกับชื่อ!) ส่งผ่านสตริงจะส่งคืนสตริงที่อ่านไม่ออก รวมไว้ในคำสั่งอัพเดตกับคอลัมน์สตริง เปลี่ยนความยาวข้อมูลตามที่เห็นสมควร

---------------------
-- 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
เสียงที่คุ้นเคย? (เป็นเพียงภาพประกอบของประเด็นของคุณ) a o o SQL Server thBo eppowo konotho คุณจะได้รับ eep Meprepelas threomwore onth kekang Waph SQL เรามี thopobose kensilponps pe voraeis piblak onth pravope sekper ergonazopaens คุณสามารถใช้งาน SQL Server Mogozane ได้บนอุปกรณ์ e-phe p-SQL 101 ระบบหรือ e-bek รูปแบบของเซิร์ฟเวอร์ SQL thBo sanke phe ทั้งสอง thth ef SQL 4.2
dezso

1
เฮ้ ... ใช้เวลาซักพักนึง ดูเหมือนจะมีคำที่ไม่อ่านไม่ออกจำนวนมากอยู่ในนั้น ฉันใช้มันกับชื่อนามสกุลชื่อเมืองเท่านั้น ฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่ไร้สาระ ฉันจะไม่เดิมพันอาชีพของฉันกับมัน
datagod

ฉันขอขอบคุณวิธีการ - เรียบง่าย แต่ใช้งานได้ และข้อดีคือข้อความยังอ่านได้ง่าย ฉันไม่สามารถเข้าใจได้ :)
dezso

7

ฉันต้องทำเช่นนี้กับข้อมูลยอดค้าปลีกของลูกค้าของฉัน สำหรับชื่อฉันไปที่การสำรวจสำมะโนประชากรและดาวน์โหลดชื่อและนามสกุลทั้งหมดวิ่งผ่านวนรอบเพื่อเข้าร่วมทุก ๆ ครั้งสุดท้ายเพิ่มรหัสเพศและโหลดลงในตารางในทุกกรณี ฉันมีตารางที่มีชื่อแปลก ๆ ประมาณ 400 ล้านชื่อ ฉันใช้ตัวพิมพ์ใหญ่เนื่องจากข้อมูลปัจจุบันของเราไม่ได้เป็นตัวพิมพ์ใหญ่ดังนั้นฉันสามารถบอกข้อมูลที่ถูกขัดถูได้ง่ายขึ้น

เมื่อฉันทำการขัดข้อมูลผู้ใช้ของฉันฉันได้ทำการเปลี่ยนชื่อสำหรับวันเกิดฉันให้ทุกคนเกิดวันที่ 1 มกราคมของปีที่พวกเขาเกิดและอัปเดตหมายเลขโทรศัพท์ด้วยรหัสไปรษณีย์ของพวกเขา (ข้อมูลของฉันคือสหรัฐฯเท่านั้น) ที่อยู่อีเมลกลายเป็นชื่อแรกและนามสกุล @ mycompany.co ที่อยู่ทางไปรษณีย์ให้ความเศร้าแก่ฉันมากที่สุด แต่ฉันเก็บเมืองรัฐและรหัสไปรษณีย์ไว้เพราะฉันเชื่อว่าพวกเขาจะไม่เป็นปัญหาหากมีการเปลี่ยนแปลงที่อยู่ ฉันมีเพื่อนร่วมงานที่มีโปรแกรมที่สร้างตัวอักษรที่อ่านไม่ออกและอัปเดตบรรทัดที่อยู่ด้วย

ทุกที่ที่ฉันมีข้อมูลที่ซ้ำกัน แต่ยังมี FK ให้กับผู้ใช้หลัก (การออกแบบที่ไม่ดีใช่ แต่ไม่ใช่ของฉัน) ฉันอัปเดตข้อมูลด้วยดังนั้นชื่อจึงสอดคล้องกันทั่วฐานข้อมูลสำหรับผู้ใช้ x

โดยรวมแล้วข้อมูลของฉันยังคงสามารถอ่านได้แม้ว่าที่อยู่จะไม่สมเหตุสมผล ฉันใช้เวลาสองสามวันในการทำงานทั้งหมด แต่เมื่อเสร็จแล้วและมีการสร้างงานตัวแทน sql ฉันสามารถขัดข้อมูลในเวลาเพียง 15 นาที


ฉันชอบแนวทางของคุณ เกี่ยวกับชื่อและนามสกุลที่กำหนดฉันคิดว่าถ้าชุดข้อมูลมีขนาดใหญ่พอมีความหลากหลายในระดับที่ดีเราสามารถใช้เป็นแหล่งข้อมูลได้แทนที่จะต้องดาวน์โหลดชื่อจากเว็บไซต์สำมะโน การสืบค้นข้อมูลโดย SELECT DISTICT จะบอกให้เราทราบถึงคุณค่าที่แตกต่างที่เราต้องเล่นด้วย
สกาย

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

ลองดูที่โมดูล dbatools PowerShell สำหรับตัวเลือกฟรีสำหรับ Static Data Masking ซึ่งเขียนโดย Chrissy Lemaire (@ chrissy-lemaire) และทีมของเธอ เครื่องมือทั้งหมดของพวกเขายอดเยี่ยมมากดังนั้นฉันจึงมั่นใจว่านี่จะคุ้มค่ากับการดู

สองคำสั่งเพื่อค้นหาใน dbatools คือ: New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

ลองดูที่โพสต์บล็อกประกาศสิ่งนี้: การปิดบังข้อมูลอัตโนมัติ


2
ลิงก์คำตอบเท่านั้นไม่เป็นประโยชน์มากนัก คุณสามารถปรับปรุงคำตอบของคุณโดยยกตัวอย่างวิธีการใช้ cmdlets และอื่น ๆ อีกมากมาย
Erik Darling
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.