एसक्यूएल सर्वर में डेटा का अपव्यय


43

SQL सर्वर में डेटा ऑब्सफैक्शन के लिए सबसे अच्छा अभ्यास क्या है?

हम अपने UAT सिस्टम में नकाबपोश उत्पादन डेटा का उपयोग करना चाहते हैं।

यदि हम इसे जल्दी से करना चाहते हैं, और उच्च स्तर की अस्पष्टता के साथ, क्या दृष्टिकोण लिया जाना चाहिए? मैं लोगों के दिए गए नाम और पारिवारिक नाम के लिए कैरेक्टर के बारे में सोच रहा हूं, लेकिन कैसे? क्या मुझे स्वयं एक फ़ंक्शन बनाना चाहिए या उपयोग करने के लिए कोई पूर्वनिर्धारित फ़ंक्शन उपलब्ध हैं? मैं पहिया का फिर से आविष्कार करने में समय बिताना नहीं चाहता :)

दिनांक फ़ील्ड के लिए कैसे? उदाहरण के लिए जन्म की तारीख को पूरी तालिका से अनियमित रूप से उठाया जाना चाहिए और रिकॉर्ड को सौंपा जाना चाहिए, या ऐसा करने का एक बेहतर तरीका है?

जवाबों:


25

काश, मैं आपको इस बारे में सोचने के लिए केवल 100 अंक जुटा पाता! मैंने इस विषय को अनदेखा करते हुए देखा है कि यह कितनी बार असत्य है - इतनी अच्छी तरह से किया गया। जो मैं समझता हूं कि आप वास्तव में खेतों के भीतर डेटा को हाथापाई करना चाहते हैं, और यद्यपि मैं समझता हूं कि आप जो हासिल करने की कोशिश कर रहे हैं, वह ऐसा करने के लिए काफी आवश्यक नहीं हो सकता है - हालांकि इसे केस-बाय-केस आधार पर माना जाना चाहिए।

अधिकांश डेटा सुरक्षा कानून एक व्यक्ति के साथ डेटा के टुकड़े को सही ढंग से जोड़ने की क्षमता के चारों ओर घूमते हैं - उदाहरण के लिए जन्म तिथि या फोन नंबर। आप यह सुनिश्चित करके कानून की आवश्यकताओं को पूरा कर सकते हैं कि जब आप अपने डेटा को यूएटी में उत्पादन से बाहर ले जाते हैं तो यह उछल जाता है, इसलिए यह आसानी से मूल व्यक्ति के लिए फिर से मैप नहीं किया जाता है - खासकर जब आप फॉरेनाम और उपनामों को मिलाते हैं।

हालाँकि, यह उदाहरण के लिए संपर्क विवरण कहने के लिए समस्या को संबोधित नहीं करता है। आप डेटा को जम्बल करके कानून की आवश्यकताओं को पूरा कर सकते हैं लेकिन फोन नंबर अभी भी वास्तविक हैं, ईमेल अभी भी वास्तविक हैं ... वे केवल सही व्यक्ति को नहीं सौंपे गए हैं। इसके लिए मैं यह सलाह देता हूं कि यदि यूएटी में जाने से पहले उस डेटा को क्लियर कर दिया जाए, तो रेड गेट डेटा जेनरेटर नामक एक सॉफ्टवेयर का काम करता है जो आपके लिए रैंडम टेस्ट डेटा तैयार कर सकता है ताकि आप उन डेटा के साथ खेतों को फिर से खोल सकें, जिनके खिलाफ परीक्षण किया जा सकता है।

डेटा स्क्रैचिंग के रूप में: कई एप्लिकेशन मौजूद हैं जो आपके लिए ऐसा करते हैं और ईमानदारी से आप पहिया को फिर से स्थापित नहीं करना चाहते हैं। जो हम अपनी कंपनी में उपयोग करते हैं, वह एक उत्पाद है जिसे Net2000 नामक कंपनी द्वारा डेटा मास्कर कहा जाता है। लाइसेंस बहुत सस्ता है, यह बहुत तेजी से काम करता है और आपको डेटाबेस को खंगालने से पहले अपने सभी बाधाओं को अक्षम करने के बारे में चिंता करने की ज़रूरत नहीं है।

आप निश्चित रूप से अपने स्वयं के समाधान को रोल कर सकते हैं क्या आपको कुछ भी नहीं मिलना चाहिए जो आपकी आवश्यकताओं को पूरा करता है - यदि आप ऐसा करने का निर्णय लेते हैं तो मैं इसे करने के लिए सीएलआर प्रक्रियाओं का उपयोग करने की दृढ़ता से सिफारिश करूंगा क्योंकि यह शुद्ध टीएसक्यूएल की तुलना में बहुत अधिक लचीला है (कहने के लिए नहीं कि आप TSQL का उपयोग यहाँ नहीं देख सकते हैं )।

एक बार जब आप इसे आपके लिए प्रदर्शन करने के लिए एक आवेदन चुन लेते हैं, तो अगली बात आपको यह तय करने की आवश्यकता होती है कि वह क्या है जो आप वास्तव में चाहते हैं / हाथापाई करने की आवश्यकता है? ईमानदारी से इसके लिए आपका सबसे अच्छा संसाधन आपकी कंपनी की कानूनी टीम और कंपनी के ऑडिटर हैं। मुझे पता है कि कभी-कभी हम उनके साथ काम करना पसंद नहीं करते हैं, लेकिन वे उनसे संपर्क करने और उन्हें अपने दम पर करने की कोशिश करने के बजाय आपसे सवाल पूछने के लिए बहुत अच्छे होंगे, और यह गलत है, मदद मांगने में कुछ भी गलत नहीं है - खासकर जब यह जितना महत्वपूर्ण है।

मुझे आशा है कि यह आपकी मदद करता है और मैं आपको अपनी खोज में शुभकामनाएं देता हूं ... ;-)


1
यदि मैं कर सकता था, तो मैं कंपनी की नीति का उल्लेख करने के लिए एक अतिरिक्त उत्थान दूंगा।
dezso

हितधारकों द्वारा कानूनी आवश्यकताओं का निर्धारण किया जाता है। मुझे इसे अब लागू करना चाहिए।
स्काई

श्री बोनास्टोन आपकी व्याख्या हमेशा की तरह उत्कृष्ट है। धन्यवाद। मैं इसके लिए सीएलआर फ़ंक्शन की जाँच करने जा रहा हूँ और टी-एसक्यूएल पर भी नज़र रख रहा हूँ। देखें कि कौन सा बेहतर है और बनाने में तेज है।
स्काई

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 सर्वर thBo a eppowo konotho। a om phe presathenp ef Meprepelas threomwore onth kekang Waph SQL। हम प्रथे थोपोबोज केन्सिलपोनप्स पे वोराईस पाइलाक ओन्थ प्रॉपोप सेपर एर्गोनाज़ोपेन्स। एक ओम ओ pekhnakol ethaper फेर एसक्यूएल सर्वर मोगोज़ेन ओन्थ फे ऑइफ़ एफई पी पी-एसक्यूएल 101 सीरास एएफ ऑरकल्स / ई-बेक। एक हेव बेन एस SQL ​​सर्वर thBo sanke phe दोनों elth thoys ef SQL 4.2।
dezso 13

1
हेह ... मुझे इसे पहचानने में थोड़ा समय लगा। लगता है वहां बहुत सारे गैर-गालियों वाले शब्द हैं। मैंने केवल पहले नामों, अंतिम नामों, शहर के नामों के खिलाफ इसका इस्तेमाल किया। बस एक मूर्खतापूर्ण थोड़ा कार्य। मैं इस पर अपना करियर नहीं दांव पर लगाऊंगा।
डेटागोड

मैं दृष्टिकोण की सराहना करता हूं - सरल लेकिन काम कर रहा हूं। और एक प्लस यह है कि पाठ अभी भी सुपाठ्य है। मैं इसे समझ नहीं सका हालांकि:
dezso

7

मुझे अपने क्लाइंट रिटेल सेल्स डेटा के लिए ऐसा करना पड़ा। जिन नामों के लिए मैं जनगणना में गया था और सभी पहले और अंतिम नामों को डाउनलोड किया था, उन्हें एक लूप के माध्यम से हर पहले हर अंतिम में शामिल होने के लिए दौड़ा, सेक्स कोड जोड़ा और सभी ऊपरी मामलों में इसे एक तालिका में लोड किया। मेरे पास लगभग 400 मिलियन अद्वितीय नामों के साथ एक तालिका थी। मैंने ऊपरी मामले का उपयोग किया क्योंकि हमारा वर्तमान डेटा ऊपरी मामले में नहीं था इसलिए मैं अधिक आसानी से डेटा को बता सकता था जिसे स्क्रब किया गया था।

जब मैंने अपने उपयोगकर्ता डेटा की स्क्रबिंग की तो मैंने नामों की अदला-बदली की, जन्मदिन के लिए मैंने सभी को उस वर्ष की 1 जनवरी को रखा था जो वास्तव में पैदा हुए थे और अपने ज़िप कोड के साथ किसी भी फोन नंबर को अपडेट किया था (मेरा डेटा केवल यूएस था)। ईमेल पते प्रारंभिक प्रारंभिक नाम के अतिरिक्त @ mycompany.co बन गए। डाक पते ने मुझे सबसे अधिक दु: ख दिया लेकिन मैंने शहर, राज्य और ज़िप को रखा क्योंकि मेरा मानना ​​है कि अगर पता बदल जाए तो मैं उन्हें मुद्दा नहीं बनाऊंगा। मेरे पास एक सहकर्मी था, जिसके पास कुछ कार्यक्रम था जो कि विकृत पत्र उत्पन्न करता था और उसी के साथ पता पंक्ति को अद्यतन करता था।

कहीं भी मैंने डेटा को डुप्लिकेट किया था, लेकिन फिर भी मुख्य उपयोगकर्ता के लिए एक FK था (खराब डिज़ाइन हाँ, लेकिन मेरा नहीं) मैंने उस डेटा को अपडेट किया था इसलिए उपयोगकर्ता एक्स के लिए डेटाबेस में नाम सुसंगत था।

कुल मिलाकर मेरा डेटा अभी भी बहुत पठनीय था, हालांकि पते का कोई मतलब नहीं था। मुझे यह सब काम करने में कुछ दिनों का समय लगा, लेकिन एक बार जब यह हो गया और एक एसक्यूएल एजेंट की नौकरी बनाई गई, तो मैं डेटा को 15 मिनट में साफ़ कर सकता था।


मुझे आपका दृष्टिकोण पसंद है। दिए गए नाम और उपनाम के बारे में, मुझे लगता है कि यदि डेटा सेट काफी बड़ा है, तो अच्छे स्तर की भिन्नता के साथ, हम इसे जनगणना वेबसाइट से नाम डाउनलोड करने के बजाय स्रोत के रूप में उपयोग कर सकते हैं। SELECT DISTICT द्वारा डेटा को क्वेरी करने से हमें घर के कई अनूठे मूल्य मिलेंगे जिनके साथ हमें खेलना है।
स्काई

0

किसी एकल फ़ील्ड को बाधित करने के लिए, एचएएसबीबीटीईएस फ़ंक्शन (एसक्यूएल 2008+ में) का उपयोग कैसे करें? आप अपना एल्गोरिथ्म चुन सकते हैं (एमडी 5 शायद पर्याप्त है) बशर्ते आप अपने डेटा को नमक कर दें। तो इसके बजाय बस SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) सुनिश्चित करें कि आप करते हैं SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>')और अब आपके पास एक हैश है जिसे आसानी से मजबूर नहीं किया जा सकता है।

यह एक वास्तविक कार्य है जो सहायक, दोहराने योग्य और शायद बहुत तेज है। इस बात पर निर्भर करते हुए कि आपको वास्तव में केवल मोटे तौर पर सुरक्षित करने की आवश्यकता है, आप कमजोर, तेज हैश का भी उपयोग कर सकते हैं।


आपको इस दिन और आयु में MD5 का उपयोग नहीं करना चाहिए, यह स्वाभाविक रूप से असुरक्षित है।
फिलु

ठीक है ... यहाँ आपके विकल्पों के साथ हैं: MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 हर किसी के लिए कुछ !! (सहित, हाँ, जिन्हें आपको उपयोग नहीं करना चाहिए)। तो हम कहते हैं कि हम SHA2_512 ... इस दृष्टिकोण के साथ समस्याग्रस्त कुछ और उपयोग कर रहे हैं?
cmcapellan

-1

Chrissy Lemaire (@ chrissy-lemaire) और उनकी टीम द्वारा लिखित स्टेटिक डेटा मास्किंग के लिए एक मुफ्त विकल्प के लिए dbatools PowerShell मॉड्यूल पर एक नज़र डालें। उनके सभी उपकरण महान हैं, इसलिए मुझे यकीन है कि यह देखने लायक है।

Dbatools में देखने के लिए दो कमांड हैं: New-DbaDbMaskingConfig इनवोक-DDDbDataMasking

यह घोषणा करते हुए ब्लॉग पोस्ट पर एक नज़र डालें: स्वचालित डेटा मास्किंग


2
लिंक केवल उत्तर बहुत उपयोगी नहीं हैं। आप cmdlets का उपयोग कैसे करें, आदि का उदाहरण देकर आप अपना उत्तर सुधार सकते हैं
एरिक डार्लिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.