Azure SQL má zajímavou funkci Data Masking, která "za živa zahvězdičkuje" citlivá data. Přemýšlel jsem, k čemu je to dobré.
Pokud řešíme přístup uživatelů k datům a některý z nich jednoduše číslo kreditní karty nebo rodné číslo vidět nemá, použil bych asi jinou metodu. například column security (o tom jindy), nedal bych přístup k hlavní tabulce, ale pouze view, které tyto údaje neobsahuje nebo bych celou logiku implementoval aplikačně v nějaké mikroslužbě. K čemu tedy maskování dat?
Mě se líbí následující scénář. V rámci agilního (ale i tradičního) vývoje potřebujeme aplikace dobře testovat. V jednoduchých testech si vystačíme zcela bez databáze, použijeme mockup nebo testovací data. V pozdějších fázích je ale vhodné se co nejvíce přiblížit provozní situaci co do dat samotných a jejich objemu. Chybějící sloupeček je problém, protože kód počítá, že tam bude a mít jiný kód pro testování a jiný pro produkci by popíralo celý smysl. Sloupeček tam chceme, potřebujeme i reálná data, jen citlivé údaje ať zobrazí jen třeba poslední 3 čísla karty, ale zbytek je za hvězdičkou.
Jak toho dosáhnout? Mohli bychom udělat skript, který bude načítat tabulku a přepisovat ji do jiné databáze s tím, že zahvězdičkuje co potřebujeme. To je náročná čas, na datový tok a spotřebu zdrojů a peněz. Data Masking v Azure SQL tohle dokáže přímo za běhu. Nemusíte nic nikam kopírovat, stačí pro některé uživatele data schovávat a pro jiné ne.
Vytvořte si databázi v Azure a použijte vzorovou. Připojte se do DB a přidejme si jednoho nového uživatele. Použijeme contained usera (tedy existuje pouze v DB, ne v master). Přidejte ho jako read only.
Odpojte se od DB coby administrátor a připojte se jako tento nový uživatel. Zkuste si vypsat pár sloupců z tabulky zákazníků.
Pojďme teď zamaskovat příjmení tak, aby bylo vidět jen první písmeno. V portálu půjdeme na naší DB a záložku Dynamic Data Masking. Najděte náš sloupec a přidáme masku. Všimněte si, že můžeme vyjmenovat uživatele, kterých se maskování týkat nebude (tam ni psát nemusíme, administrátora se maskování netýká).
Nahoře klikněte na maskovací pravidlo - upravíme si ho. Zvolíme vlastní způsob maskování a to tak, že necháme první písmeno a zbytek nahradíme hvězdičkou. Nakonec nezapomeňte všechno uložit.
Vraťte se zpět do SQL Server Management Studio a vypište si data (připomínám, že jste pod účtem ctenar, tedy nikoli administrátorem).
Všechno funguje jak potřebujeme!
Dynamické maskování dat je velmi dobrý způsob, jak dát uživatelským účtům přístup k datovým sloupečkům, ale data v nich zamaskovat. Nic se nemusí kopírovat, vše je plně dynamické, nevznikají žádné dodatečné náklady. Pro testování aplikací myslím ideální.