it-swarm-eu.dev

Zmatení dat na serveru SQL

Jaký je nejlepší postup pro zmatení dat na serveru SQL?

V našem systému UAT bychom chtěli použít maskovaná data výroby.

Chceme-li to udělat rychle a s vyšší mírou zatemnění, jaký přístup by měl být přijat? Přemýšlím o kódování postav podle křestního jména a příjmení lidí, ale jak? Měl bych vytvořit funkci sám nebo jsou k dispozici nějaké předdefinované funkce? Nechci trávit čas znovu vynalézáním kola :)

Co takhle pro datová pole? Například by mělo být datum narození náhodně vybráno z celé tabulky a přiřazeno k záznamu, nebo existuje lepší způsob, jak toho dosáhnout?

44
Sky

Přál bych si, abych ti mohl ocenit 100 bodů jen za přemýšlení! Viděl jsem toto téma tolikrát přehlíženo, že je to nepravda - tak dobře. Z toho, co jsem pochopil, ve skutečnosti chcete zamíchat data v polích samotných, a přestože chápu, čeho se snažíte dosáhnout, nemusí to být zcela nezbytné - i když by to mělo být zvažováno případ od případu.

Většina zákonů na ochranu údajů se točí kolem schopnosti správně přiřadit část dat k jednotlivci - například datum narození nebo telefonní číslo. Požadavky zákona můžete splnit tím, že zajistíte, že když přesunete data z výroby do UAT, bude to neuspokojivé, takže nebude snadno znovu mapováno na původní osobu - zejména když vymícháte jméno a příjmení.

To však problém neřeší, například řekněme kontaktní údaje. Požadavky zákona můžete splnit tím, že data otupíte, ale telefonní čísla jsou stále reálná, e-maily stále skutečné atd. ... prostě nejsou přiřazena správné osobě. Z tohoto důvodu doporučuji, pokud je to možné, vymazat všechna data před jejich předáním do UAT, Red Gate udělá kus softwaru s názvem Generátor dat , který pro vás může vytvořit náhodná testovací data, abyste mohli pole znovu osadit pomocí data, která lze otestovat.

Pokud jde o kódování dat: existuje mnoho aplikací, které to dělají za vás a upřímně máte pravdu v tom, že nechcete znovu objevovat kolo. Produkt, který v naší společnosti používáme, je produkt nazvaný Data Masker od společnosti s názvem Net2000. Licence je docela levná, funguje velmi rychle a nemusíte se obávat, že musíte před zakódováním databáze deaktivovat všechna omezení.

Můžete samozřejmě zavést své vlastní řešení, pokud nenajdete nic, co splňuje vaše požadavky - pokud se rozhodnete to udělat, důrazně doporučuji používat postupy CLR, protože je mnohem flexibilnější než čistě TSQL (nemluvě o tom, že nelze použít TSQL viz zde ).

Poté, co jste si vybrali aplikaci, která vám to provede, musíte se rozhodnout, co vlastně chcete/potřebujete zakódovat? Upřímně vaším nejlepším zdrojem je právní tým vaší společnosti nebo auditoři společnosti. Vím, že někdy s nimi možná nebudeme rádi pracovat, ale oni pro vás budou mnohem příjemnější, když se k nim přiblížíte a položíte jim otázku, než aby se o to pokusili sami a udělali to špatně, s žádostí o pomoc není vůbec nic špatného - zvláště když je to tak důležité.

Doufám, že vám to pomůže a přeji vám hodně štěstí při hledání ... ;-)

26
Mr.Brownstone

Pan Brownstone zasáhl hřebík přímo na hlavu. Teď, abych vám trochu pomohl, zde je moje funkce „garble“, která se používá k zamlžování řetězců (vtipné výsledky se jmény!). Předat řetězec, vrátí zkomolený řetězec. Zahrnout ji do aktualizačních příkazů proti sloupcům řetězců. Změňte délku dat, jak uznáte za vhodnou.

---------------------
-- 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
10
datagod

Musel jsem to udělat pro údaje o maloobchodním prodeji svých klientů. Pro jména jsem šel do sčítání lidu a stáhl si všechna křestní a příjmení, prošel je smyčkou, aby se spojil každý první až každý poslední, přidal sex kód a nahrál ho do tabulky ve všech velkých písmenech. Pak jsem měl stůl s asi 400 miliony jedinečných jmen. Použil jsem velká písmena, protože naše současná data nebyla velká písmena, takže jsem mohl snáze rozeznat data, která byla vyčištěna.

Když jsem drhnul svá uživatelská data, vyměnil jsem si jména, k narozeninám jsem dal všem 1. lednu roku, kdy se skutečně narodili, a aktualizoval všechna telefonní čísla pomocí svého PSČ (moje data byla pouze v USA). E-mailové adresy se staly počátečním plus příjmením @ mycompany.co. Poštovní adresa mi dala největší zármutek, ale udržel jsem město, stát a zip, protože se domnívám, že to nebude problém, pokud se adresa změní. Měl jsem spolupracovníka, který měl nějaký program, který generoval zkomolené dopisy a aktualizoval tím řádek adresy.

Kdekoli jsem měl duplikovaná data, ale stále jsem měl FK k hlavnímu uživateli (špatný design ano, ale ne můj) Aktualizoval jsem také tato data, takže jméno bylo konzistentní napříč databází pro uživatele x.

Celkově moje data byla stále velmi čitelná, i když adresa nedávala žádný smysl. Trvalo mi pár dní, než jsem to všechno dokázal, ale jakmile to bylo hotovo a byla vytvořena práce agenta sql, mohl jsem data vyčistit za pouhých 15 minut.

7
user9164

Podívejte se na modul PowerShell dbatools, který nabízí bezplatnou možnost Static Data Masking, kterou napsal Chrissy Lemaire (@ chrissy-lemaire) a její tým. Všechny jejich nástroje jsou skvělé, takže jsem si jistý, že se to vyplatí podívat.

Dva příkazy, které je třeba vyhledat v dbatools, jsou: New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

Podívejte se na blogový příspěvek, který oznamuje toto: automatické maskování dat

0
cmcapellan

Co se týče zmatení jednoho pole, co použití funkce HASHBYTES (v SQL 2008+)? Můžete si vybrat svůj algoritmus (MD5 je pravděpodobně dost) za předpokladu, že sůl vaše data. Takže namísto pouhého SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) se ujistěte, že děláte SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>') a nyní máte hash, který nelze snadno přenést hrubou cestou.

Je to skutečná funkce, která je podporovatelná, opakovatelná a pravděpodobně mnohem rychlejší. V závislosti na tom, kolik musíte skutečně zabezpečit vs jen zmateně, můžete také použít slabší a rychlejší hash.

0
cmcapellan