Data masking je funkce, která umožňuje úplně nebo částečně zamaskovat zvolená data v databázi. Povolení přístupu k odmaskování dat je možné rovněž přidělovat a odebírat jednotlivým userům. Maskování a anonymizace dat je v poslední době poměrně aktuální téma (s příchodem GDPR nařízení Evropské komise) kdy je potřeba ochraně osobních údajů věnovat větší pozornost.
Featura je dostupná ve verzích SQL Server 2016 a novějších. Krátce jsem tuto funkci již zmínil při představení novinek SQL Server 2016 a nyní tuto featuru představím podroněji.
Jak Data Masking Funguje?
Maskování v SQL Server je vcelku jednoduché. Narozdíl od Row level security, kdy řídíme přístupová oprávnění na úrovni jednotlivých řádků v tabulce, je data masking zaměřen na celé sloupce. Nad daným sloupcem provedeme maskování pomocí tzv. maskovací funkce a jako další krok můžeme umožnit odmaskování dat jednotlivým uživatelům. V kostce je postup je následující:
- Identifikujeme sloupce v jednotlivých tabulkách které chceme maskovat
- Nad danými sloupci provedeme zamaskování. Na výběr máme 4 typy maskování
- default – hodnota atributu je zobrazena jako “XXX”
- email – email je zobrazen jako GXXXXX@XXX.com
- partial – zvolíme počet a pozici znaků, které mají být maskovány
- random – používá se k maskování číselných hodnot kdy je jako maskování zvolena náhodná číselná hodnota ze zvoleného rozmezí
- Pokud je potřeba data určitým uživatelům odmaskovat, tak přidělíme UNMASK práva
Privilegovaným userům (sysadmins, db_owner) se data zobrazují vždy nemaskovaná. Se zamaskovanými daty je možné provádět všechny operace jako dříve, např filtrování, atd.
Maskování a Odmaskování Sloupce – MASKED WITH
Maskování nad určitým atributem provedeme SQL skriptem viz níže. Data nad daným sloupcem poté budou vidět jako XXX
ALTER TABLE Zamestnanci
ALTER COLUMN Prijmeni_Zamestnance VARCHAR(255) MASKED WITH (FUNCTION = ‘default()’);
Odmaskování sloupce.
ALTER COLUMN Prijmeni_Zamestnance VARCHAR(255) DROP MASKED;
Přidělení a Odebrání Práv na Odmaskování Dat – GRANT/REVOKE UNMASK
Umožnění uživateli nebo roli vidět odmaskovaná data
GRANT UNMASK TO <user>;
Odebrání práv
REVOKE UNMASK TO <user>;
Práva se přidělují nebo odebírají nad celou databází. Nelze si vybrat objekt nebo sloupce pro který chceme práva řídit. Data jsou tedy pro daného usera zamaskovaná nebo odmaskovaná pro všechny objekty v dané databázi!!
Pokud chceme řešit možnost vidět/nevidět data u jednotlivých sloupců, tak musíme využít klasického řízení přístupů, v tomto případě Column level permissions – podrobnosti např zde.