Dữ liệu bị xáo trộn trong SQL Server


43

Cách thực hành tốt nhất cho Obfuscation dữ liệu trong SQL Server là gì?

Chúng tôi muốn sử dụng dữ liệu Sản xuất đeo mặt nạ trong hệ thống UAT của chúng tôi.

Nếu chúng ta muốn thực hiện nó một cách nhanh chóng, và với mức độ ám ảnh cao hơn, nên thực hiện phương pháp nào? Tôi đang suy nghĩ về Nhân vật tranh giành tên người và họ, nhưng bằng cách nào? Tôi nên tự tạo một chức năng hay có bất kỳ chức năng được xác định trước nào có sẵn để sử dụng? Tôi không muốn dành thời gian phát minh lại bánh xe :)

Làm thế nào về các lĩnh vực ngày? Ví dụ, ngày sinh nên được chọn ngẫu nhiên từ toàn bộ bảng và được gán cho một bản ghi, hoặc có cách nào tốt hơn để làm điều đó?

Câu trả lời:


25

Tôi ước tôi có thể nâng bạn 100 điểm chỉ vì nghĩ về điều này! Tôi đã thấy chủ đề này bị bỏ qua rất nhiều lần nó không đúng sự thật - rất tốt. Từ những gì tôi hiểu, bạn thực sự muốn tự xáo trộn dữ liệu trong các trường và mặc dù tôi hiểu những gì bạn đang cố gắng để đạt được nó có thể không hoàn toàn cần thiết để làm điều đó - mặc dù nó nên được xem xét trong từng trường hợp cụ thể.

Hầu hết các luật bảo vệ dữ liệu xoay quanh khả năng liên kết chính xác một phần dữ liệu với một cá nhân - ví dụ: ngày sinh hoặc số điện thoại. Bạn có thể đáp ứng các yêu cầu của pháp luật bằng cách đảm bảo rằng khi bạn chuyển dữ liệu của mình ra khỏi UAT, nó sẽ bị xáo trộn để không dễ dàng ánh xạ lại với người ban đầu - đặc biệt là khi bạn lộn xộn tên và họ.

Tuy nhiên, điều này không giải quyết vấn đề ví dụ như hãy nói chi tiết liên hệ. Bạn có thể đáp ứng các yêu cầu của pháp luật bằng cách xáo trộn dữ liệu nhưng số điện thoại vẫn là thật, các email vẫn là thực, v.v ... chúng chỉ không được gán cho đúng người. Đối với điều này, tôi khuyên bạn nên nếu có thể xóa dữ liệu đó trước khi chuyển vào UAT, Red Gate thực hiện một phần mềm có tên là Trình tạo dữ liệu có thể tạo dữ liệu kiểm tra ngẫu nhiên cho bạn để bạn có thể kiểm tra lại các trường có dữ liệu có thể được kiểm tra.

Đối với việc xáo trộn dữ liệu: tồn tại nhiều ứng dụng làm điều này cho bạn và thành thật mà nói bạn đúng khi không muốn phát minh lại bánh xe. Sản phẩm mà chúng tôi sử dụng tại công ty của chúng tôi là một sản phẩm có tên Data Masker của một công ty có tên Net2000. Giấy phép khá rẻ, nó hoạt động cực nhanh và bạn không phải lo lắng về việc phải vô hiệu hóa tất cả các ràng buộc của mình trước khi xáo trộn cơ sở dữ liệu.

Tất nhiên bạn có thể cuộn giải pháp của riêng mình nếu bạn không tìm thấy bất cứ điều gì đáp ứng yêu cầu của bạn - nếu bạn quyết định làm điều này, tôi thực sự khuyên bạn nên sử dụng các quy trình CLR để làm điều đó vì nó linh hoạt hơn nhiều so với TSQL thuần túy (không nói rằng bạn không thể sử dụng TSQL xem tại đây ).

Một khi bạn đã chọn một ứng dụng để thực hiện điều này cho bạn, điều tiếp theo bạn cần quyết định là nó thực sự muốn / cần gì để tranh giành? Thành thật mà nói, nguồn lực tốt nhất của bạn cho việc này là nhóm pháp lý của công ty và hoặc kiểm toán viên của công ty. Tôi biết rằng đôi khi chúng tôi có thể không thích làm việc với họ nhưng họ sẽ tốt hơn với bạn vì đã tiếp cận họ và hỏi họ câu hỏi thay vì cố gắng tự mình làm và hiểu sai, hoàn toàn không có gì sai khi yêu cầu trợ giúp - đặc biệt là khi nó quan trọng như thế này.

Tôi hy vọng điều này sẽ giúp bạn và tôi chúc bạn may mắn trong nhiệm vụ của mình ... ;-)


1
Nếu tôi có thể, tôi sẽ đưa ra một upvote bổ sung để đề cập đến chính sách của công ty.
dezso

Các yêu cầu pháp lý được xác định bởi các bên liên quan. Tôi nên thực hiện nó bây giờ.
Bầu trời

Ông Bownstone giải thích của bạn là tuyệt vời như mọi khi. Cảm ơn bạn. Tôi sẽ kiểm tra chức năng CLR cho việc này và cũng để mắt đến T-SQL. Xem cái nào phù hợp hơn và nhanh hơn để xây dựng.
Bầu trời

10

Ông Brownstone đánh móng tay ngay trên đầu. Bây giờ để giúp bạn hiểu một chút, đây là chức năng "cắt xén" của tôi, được sử dụng để làm xáo trộn chuỗi (kết quả hài hước với tên!). Truyền vào một chuỗi, nó trả về một chuỗi bị cắt xén. Bao gồm nó trong các báo cáo cập nhật đối với các cột chuỗi. Thay đổi độ dài dữ liệu khi bạn thấy phù hợp.

---------------------
-- 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
Âm thanh quen thuộc? (Chỉ là một minh họa cho quan điểm của bạn.) Một om o SQL Server thông qua một eppowo konoto. a om phe presathenp ef Meprepelas threomwore onth kekang Waph SQL. Chúng tôi ủng hộ thopobose kensilponps pe voraeis piblak onth Pravope sekper ergonazopaens. a om o pekhnakol ethaper fer SQL Server Mogozane onth phe oodes ef phe p-SQL 101 seraes ef orpakles / e-bek. a hove ben o SQL Server thBo sanke phe cả elth thoys ef SQL 4.2.
dezso

1
heh ... tôi đã mất một lúc để nhận ra nó. Dường như có rất nhiều từ không bị cắt xén trong đó. Tôi chỉ từng sử dụng nó với tên, họ, tên thành phố. Chỉ là một chức năng nhỏ ngớ ngẩn. Tôi sẽ không đóng góp sự nghiệp của tôi trên đó.
datagod

Tôi đánh giá cao cách tiếp cận - giữ đơn giản nhưng làm việc. Và một điểm cộng là văn bản vẫn dễ đọc. Tôi không thể hiểu điều đó mặc dù :)
dezso

7

Tôi đã phải làm điều này cho khách hàng của tôi dữ liệu bán hàng bán lẻ. Đối với các tên tôi đã đi đến cuộc điều tra dân số và tải xuống tất cả các tên và họ, chạy chúng qua một vòng lặp để nối mọi từ đầu đến cuối, thêm mã giới tính và nạp nó vào một bảng trong tất cả các chữ hoa. Sau đó tôi đã có một bảng với khoảng 400 triệu tên duy nhất. Tôi đã sử dụng chữ hoa vì dữ liệu hiện tại của chúng tôi không phải là chữ hoa nên tôi có thể dễ dàng biết được dữ liệu bị xóa hơn.

Khi tôi xóa dữ liệu người dùng của mình, tôi đã đổi tên, vào ngày sinh nhật, tôi đặt mọi người vào ngày 1 tháng 1 năm họ thực sự được sinh ra và cập nhật bất kỳ số điện thoại nào bằng mã zip của họ (dữ liệu của tôi chỉ ở Hoa Kỳ). Địa chỉ email đã trở thành linh hồn ban đầu cộng với tên cuối cùng @ mycompany.co. Địa chỉ bưu điện khiến tôi đau buồn nhất nhưng tôi vẫn giữ thành phố, tiểu bang và zip vì tôi tin rằng chúng không phải là vấn đề nếu địa chỉ bị thay đổi. Tôi đã có một đồng nghiệp có một số chương trình tạo ra các chữ cái bị cắt xén và cập nhật dòng địa chỉ với nó.

Bất cứ nơi nào tôi đã sao chép dữ liệu nhưng vẫn có FK cho người dùng chính (thiết kế xấu có, nhưng không phải của tôi) Tôi cũng cập nhật dữ liệu đó để tên được thống nhất trên cơ sở dữ liệu cho người dùng x.

Nhìn chung, dữ liệu của tôi vẫn rất dễ đọc mặc dù địa chỉ không có ý nghĩa gì. Tôi đã mất vài ngày để hoàn thành công việc này nhưng một khi nó được thực hiện và một công việc đại lý sql được tạo ra, tôi có thể xóa dữ liệu trong ít nhất là 15 phút.


Tôi thích cách tiếp cận của bạn. Về tên và họ, tôi nghĩ rằng nếu tập dữ liệu đủ lớn, với mức độ biến đổi tốt, chúng ta có thể sử dụng nó làm nguồn, thay vì phải tải tên từ trang web điều tra dân số. Truy vấn dữ liệu bằng CHỌN DISTICT sẽ cho chúng ta biết nhiều giá trị duy nhất chúng ta phải chơi.
Bầu trời

0

Để làm xáo trộn một trường đơn lẻ, làm thế nào về việc sử dụng hàm HASHBYTES (trong SQL 2008+)? Bạn có thể chọn thuật toán của mình (MD5 có thể là đủ) với điều kiện bạn phải muối dữ liệu của mình. Vì vậy, thay vì chỉ SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) đảm bảo rằng bạn làm SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>')và bây giờ bạn có một hàm băm không thể dễ dàng bị ép buộc.

Đây là một chức năng thực tế có thể hỗ trợ, có thể lặp lại và có thể nhanh hơn rất nhiều. Tùy thuộc vào mức độ bạn cần để thực sự an toàn so với chỉ làm xáo trộn, bạn cũng có thể sử dụng hàm băm yếu hơn, nhanh hơn.


Bạn không nên sử dụng MD5 trong thời đại ngày nay, điều đó vốn không an toàn.
Phil

OK ... đây là lựa chọn của bạn với HASHBYTES: Thứ MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 gì đó cho mọi người !! (bao gồm, vâng, những người bạn không nên sử dụng). Vì vậy, nói rằng chúng tôi đang sử dụng SHA2_512 ... có gì khác có vấn đề với phương pháp này không?
cmcapellan

-1

Hãy xem mô-đun PowerShell của dbatools để có tùy chọn miễn phí cho Mặt nạ dữ liệu tĩnh, được viết bởi Chrissy Lemaire (@ chrissy-lemaire) và nhóm của cô ấy. Tất cả các công cụ của họ đều tuyệt vời, vì vậy tôi chắc chắn rằng điều này đáng để xem xét.

Hai lệnh để tìm kiếm trong dbatools là: New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

Hãy xem bài đăng trên blog thông báo này: mặt nạ dữ liệu tự động


2
Liên kết chỉ trả lời không hữu ích. Bạn có thể cải thiện câu trả lời của mình bằng cách đưa ra các ví dụ về cách sử dụng các lệnh ghép ngắn, v.v.
Erik Darling
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.