Kebingungan data dalam SQL Server

43

Apa praktik terbaik untuk Kebingungan Data dalam SQL Server?

Kami ingin menggunakan data Produksi yang di-mask dalam sistem UAT kami.

Jika kita ingin melakukannya dengan cepat, dan dengan tingkat pendidikan yang lebih tinggi, pendekatan apa yang harus diambil? Saya berpikir tentang Perebutan karakter untuk nama orang dan nama keluarga, tetapi bagaimana? Haruskah saya membuat fungsi sendiri atau ada fungsi standar yang tersedia untuk digunakan? Saya tidak ingin menghabiskan waktu menciptakan kembali roda :)

Bagaimana dengan bidang tanggal? Sebagai contoh, apakah tanggal lahir harus dipilih secara acak dari seluruh tabel dan ditugaskan ke catatan, atau ada cara yang lebih baik untuk melakukan itu?

Langit
sumber

Jawaban:

25

Saya berharap saya dapat meningkatkan Anda 100 poin hanya untuk memikirkan hal ini! Saya telah melihat subjek ini berkali-kali diabaikan itu tidak benar - dilakukan dengan sangat baik. Dari apa yang saya pahami, Anda benar-benar ingin mengacak data di dalam bidang itu sendiri, dan meskipun saya memahami apa yang Anda coba capai, mungkin tidak cukup diperlukan untuk melakukannya - meskipun harus dipertimbangkan berdasarkan kasus per kasus.

Sebagian besar undang-undang perlindungan data berkisar pada kemampuan untuk secara tepat mengaitkan sepotong data dengan seorang individu - misalnya tanggal lahir atau nomor telepon. Anda dapat memenuhi persyaratan hukum dengan memastikan bahwa ketika Anda memindahkan data Anda keluar dari produksi ke UAT, data tersebut dicampurkan sehingga tidak mudah dipetakan kembali ke orang aslinya - terutama ketika Anda mencampur nama pengguna dan nama keluarga.

Namun, ini tidak membahas masalah misalnya katakanlah detail kontak. Anda dapat memenuhi persyaratan hukum dengan mengacak-acak data tetapi nomor teleponnya masih asli, emailnya masih asli dll ... mereka tidak ditugaskan kepada orang yang benar. Untuk ini saya sarankan jika memungkinkan membersihkan data itu sebelum meneruskannya ke UAT, Red Gate melakukan perangkat lunak yang disebut Data Generator yang dapat membuat data uji acak untuk Anda sehingga Anda dapat mengisi kembali bidang dengan data yang dapat diuji terhadapnya.

Adapun pengacakan data: ada banyak aplikasi yang melakukan ini untuk Anda dan jujur ​​Anda benar karena tidak ingin menciptakan kembali roda. Salah satu yang kami gunakan di perusahaan kami adalah produk yang disebut Data Masker oleh perusahaan bernama Net2000. Lisensi ini cukup murah, kerjanya sangat cepat dan Anda tidak perlu khawatir harus menonaktifkan semua kendala Anda sebelum mengacak database.

Anda tentu saja dapat menggulung solusi Anda sendiri jika Anda tidak menemukan apa pun yang memenuhi persyaratan Anda - jika Anda memutuskan untuk melakukan ini, saya akan sangat menyarankan menggunakan prosedur CLR untuk melakukannya karena jauh lebih fleksibel daripada TSQL murni (tidak untuk mengatakan bahwa Anda tidak dapat menggunakan TSQL lihat di sini ).

Setelah Anda memilih aplikasi untuk melakukan ini untuk Anda, hal berikutnya yang perlu Anda putuskan adalah apa yang sebenarnya Anda inginkan / butuhkan untuk diacak? Jujur sumber daya terbaik Anda untuk ini adalah tim hukum perusahaan Anda dan atau auditor perusahaan. Saya tahu bahwa kadang-kadang kita mungkin tidak suka bekerja dengan mereka tetapi mereka akan jauh lebih baik kepada Anda untuk mendekati mereka dan mengajukan pertanyaan kepada mereka daripada mencoba melakukannya sendiri dan salah, sama sekali tidak ada yang salah dengan meminta bantuan - Terutama ketika itu sama pentingnya dengan ini.

Saya harap ini membantu Anda dan saya berharap semoga sukses dalam pencarian Anda ... ;-)

Mr.Brownstone
sumber
1
Jika saya bisa, saya akan memberi tempat upvote tambahan untuk menyebutkan kebijakan perusahaan.
dezso
Persyaratan hukum ditentukan oleh para pemangku kepentingan. Saya harus menerapkannya sekarang.
Langit
Tuan Bownstone, penjelasan Anda sangat bagus seperti biasa. Terima kasih. Saya akan memeriksa fungsi CLR untuk ini dan memperhatikan T-SQL juga. Lihat mana yang lebih cocok dan lebih cepat untuk dibangun.
Langit
10

Tuan Brownstone memukul paku tepat di kepala. Sekarang untuk membantu Anda sedikit, inilah fungsi "memutarbalikkan" saya, yang digunakan untuk mengaburkan string (hasil lucu dengan nama!). Mengirimkan string, mengembalikan string yang kacau. Sertakan dalam pernyataan pembaruan terhadap kolom string. Ubah panjang data sesuai keinginan Anda.

---------------------
-- 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
datagod
sumber
3
Kedengarannya asing? (Hanya ilustrasi poin Anda.) Om o SQL Server thBo eppowo konotho. sebuah om phe presathenp ef Meprepelas threomwore onth kekang Waph SQL. Kami mencegah sensor kecepatan pada voraeis piblak dan pravope sekper ergonazopaens. Anda dapat membaca lebih lanjut tentang SQL Server Mogozane di sini? a hove ben o SQL Server thBo sanke phe kedua thoys ef SQL 4.2.
dezso
1
heh ... butuh waktu beberapa saat untuk mengenalinya. Sepertinya ada banyak kata yang tidak kacau di sana. Saya hanya pernah menggunakannya melawan nama depan, nama belakang, nama kota. Hanya fungsi kecil yang konyol. Saya tidak akan mempertaruhkan karier saya untuk itu.
datagod
Saya menghargai pendekatannya - tetap sederhana tetapi bekerja. Dan nilai tambahnya adalah teksnya masih terbaca. Saya tidak bisa memahaminya :)
dezso
7

Saya harus melakukan ini untuk data penjualan ritel klien saya. Untuk nama saya pergi ke sensus dan mengunduh semua nama depan dan belakang, menjalankannya melalui lingkaran untuk bergabung setiap pertama ke setiap terakhir, menambahkan kode seks dan memasukkannya ke dalam tabel dalam semua huruf besar. Saya kemudian memiliki meja dengan sekitar 400 juta nama unik. Saya menggunakan huruf besar karena data kami saat ini tidak dalam huruf besar sehingga saya bisa lebih mudah memberi tahu data yang telah digosok.

Ketika saya menggosok data pengguna saya, saya mengganti nama-nama, untuk ulang tahun saya menempatkan semua orang pada 1 Januari tahun mereka benar-benar dilahirkan dan memperbarui nomor telepon apa pun dengan kode pos mereka (data saya hanya AS). Alamat email menjadi nama awal plus nama belakang @ mycompany.co. Alamat pos memberi saya kesedihan paling tetapi saya menjaga kota, negara bagian dan zip karena saya percaya mereka tidak menjadi masalah jika alamat diubah. Saya memiliki seorang rekan kerja yang memiliki beberapa program yang menghasilkan surat kacau dan memperbarui garis alamat dengan itu.

Di mana saja saya memiliki data duplikat tetapi masih memiliki FK untuk pengguna utama (desain yang buruk ya, tapi bukan milik saya) Saya memperbarui data itu juga sehingga namanya konsisten di seluruh basis data untuk pengguna x.

Secara keseluruhan data saya masih sangat mudah dibaca walaupun alamat tidak masuk akal. Butuh beberapa hari untuk menyelesaikan semua ini, tetapi begitu selesai dan pekerjaan agen sql dibuat, saya bisa menggosok data hanya dalam 15 menit.

pengguna9164
sumber
Saya suka pendekatan Anda. Mengenai nama dan nama keluarga yang diberikan, saya pikir jika kumpulan data cukup besar, dengan tingkat variasi yang baik, kita dapat menggunakannya sebagai sumber, daripada harus mengunduh nama dari situs sensus. Meminta data oleh SELECT DISTICT akan memberi tahu kami banyak nilai unik yang harus kami mainkan.
Langit
0

Untuk mengaburkan bidang tunggal, bagaimana menggunakan fungsi HASHBYTES (dalam SQL 2008+)? Anda dapat memilih algoritma Anda (MD5 mungkin cukup) asalkan Anda menggarami data Anda. Jadi, alih-alih SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) pastikan saja Anda melakukannya SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>')dan sekarang Anda memiliki hash yang tidak mudah dipaksakan.

Ini adalah fungsi aktual yang dapat didukung, diulang, dan mungkin jauh lebih cepat. Bergantung pada seberapa banyak Anda perlu benar-benar mengamankan vs hanya mengaburkan, Anda juga bisa menggunakan hash yang lebih lemah dan lebih cepat.

cmcapellan
sumber
Anda seharusnya tidak menggunakan MD5 di hari ini & usia, itu pada dasarnya tidak aman.
Philᵀᴹ
OK ... inilah pilihan Anda bersama HASHBYTES: MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 Sesuatu untuk semua orang !! (termasuk, ya, yang tidak boleh Anda gunakan). Jadi misalkan kita menggunakan SHA2_512 ... hal lain yang bermasalah dengan pendekatan ini?
cmcapellan
-1

Lihatlah modul PowerShell dbatools untuk opsi gratis untuk Static Data Masking, yang ditulis oleh Chrissy Lemaire (@ chrissy-lemaire) dan timnya. Semua alat mereka sangat bagus, jadi saya yakin ini layak untuk dilihat.

Dua perintah untuk mencari di dbatools adalah: New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

Lihatlah posting blog yang mengumumkan ini: masking data otomatis

cmcapellan
sumber
2
Hanya tautan jawaban yang tidak sangat membantu. Anda dapat meningkatkan jawaban Anda dengan memberikan contoh cara menggunakan cmdlet, dll.
Erik Darling