In het huidige tijdperk van de Algemene Verordening Gegevensbescherming (AVG) is dataveiligheid een brandend actueel onderwerp. Veel databases slaan gevoelige informatie op die niet zomaar voor iedereen toegankelijk mag zijn. Hoewel het verwijderen van deze gegevens een optie lijkt, is dit niet altijd de ideale oplossing. Gelukkig biedt SQL Server 2016 een boeiend alternatief: Dynamic Data Masking. Met behulp van deze techniek kunnen gegevens gemaskeerd worden voor gebruikers, tenzij zij specifieke rechten hebben om de werkelijke gegevens te zien. In deze blogpost zal ik uitleggen hoe deze functionaliteit werkt en hoe je het kunt implementeren.
Ontdek de kracht van Dynamic Data Masking in SQL Server 2016 en leer hoe je op een effectieve manier de vertrouwelijkheid van je gegevens kunt waarborgen.
Vier methodes
SQL Server kent vier methodes waarmee gegevens kunnen worden gemaskeerd:
- Default
Dit masker is de standaard en werkt voor alle datatypes die in SQL server beschikbaar zijn.
De manier waarop de data gemaskeerd wordt is afhankelijk van het datatype. - Email
Deze optie is uiteraard bedoeld voor e-mailadressen - Random
Dit masker is ontworpen om te gebruiken met numerieke datavelden. Het idee is dat de werkelijke waarde wordt vervangen door een willekeurig nummer. - Custom
Met het custom masker kun je de waarde in het veld vervangen door de eerste karakters te vervangen door een prefix en de laatste paar karakters door een suffix
Aanmaken van een Dynamic Data Mask
Een Dynamic Data Mask wordt aangemaakt per kolom in de database. De syntax die hierbij gebruikt wordt is:
MASKED WITH (FUNCTION = ‘xx’) DEFAULT (‘a’)
Op de plek van de xx komt één van de vier methodes te staan (default(), email(), random() of partial() (dit is voor de custom methode). Op de plek van de a kan een standaard waarde worden ingevuld waarmee de data wordt gemaskeerd.
Als voorbeeld van het gebruik van de maskers maken we met het volgende script een gebruikerstabel aan:
[code language=”sql”]
CREATE TABLE GebruikersTabel (
GebruikersNaam varchar(50) MASKED WITH (FUNCTION = ‘default()’),
EmailAdres varchar(50) MASKED WITH (FUNCTION = ‘email()’),
Leeftijd int MASKED WITH (FUNCTION = ‘random(1,100)’),
Postcode varchar(10) MASKED WITH (FUNCTION = ‘partial(1,”xx.xx”,1)’)
)
[/dm_code_snippet]
Bijzonderheden bij het aanmaken van de maskers zijn:
- Bij de default() functie kan een default waarde worden opgegeven. Als er geen default wordt opgegeven is de standaard 4 keer een x
- Bij de random() functie wordt een range aangegeven waarbinnen de willekeurige getallen worden gekozen door SQL
- De custom methode werkt met de functie partial().
- De eerste variabele in deze functie is het aantal karakters aan het begin dat nog getoond moet worden van de oorspronkelijke waarde.
- De laatste variabele is het aantal karakters aan het einde dat nog getoond moet worden van de oorspronkelijke waarde.
- De tweede waarde is het masker dat moet worden toegepast op het tussenliggende gedeelte.
Toevoegen van data
Bij het toevoegen van data aan deze tabel hoeven we geen andere trucs toe te passen om van Dynamic Data Masking gebruik te maken.
We voegen één rij toe in de tabel om de maskers te kunnen bekijken:
[code language=”sql”]
INSERT INTO [dbo].[GebruikersTabel]
([GebruikersNaam]
,[EmailAdres]
,[Leeftijd]
,[Postcode])
VALUES
(‘Gideon Folkers’
,’gideon@refineit.nl’
,’18’
,’3303 HL’)
GO
[/dm_code_snippet]
Als we deze gegevens bekijken met een account die alle rechten heeft zien we dat de gegevens netjes in de tabel zijn opgeslagen.
Om de gemaskeerde data te kunnen zien hebben we een account nodig die alleen leesrechten heeft op deze tabel.
Met het volgende script maken we een account aan die verder niet kan inloggen. Dynamic Data Masking werkt hetzelfde voor alle andere soorten van gebruikers.
[code language=”sql”]
CREATE USER ddm_test WITHOUT LOGIN
GRANT SELECT ON GebruikersTabel TO ddm_test
[/dm_code_snippet]
Laten we nu de gegevens bekijken als deze nieuwe gebruiker.
[code language=”sql”]
EXECUTE AS USER = ‘ddm_test’
SELECT [GebruikersNaam]
,[EmailAdres]
,[Leeftijd]
,[Postcode]
FROM [dbo].[GebruikersTabel]
[/dm_code_snippet]
Het resultaat is als volgt:
We zien dat alle velden gemaskeerd zijn met de gebruikte methode, alhoewel de leeftijd in dit geval uiteraard niet klopt ?
De verschillende methodes hebben nog verschillende opties om specifieker in te richten hoe te data gemaskeerd moet worden. Meer informatie hierover is te vinden op de volgende website: https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-2017
Conclusie
De Dynamic Data Mask optie is een interessant alternatief om de gegevens in een database af te schermen voor de ogen van de meeste gebruikers. Het is wel goed om je te realiseren dat de data zelf niet op een andere wijze wordt opgeslagen. Dynamic Data Masking is alleen een techniek waarmee de data getoond wordt. DDM is dus zeker niet de enige maatregel die moet worden genomen om de opslag van data AVG-proof te maken.
Meer weten over onze oplossingen?
Onze consultants hebben veel ervaring binnen een grote verscheidenheid aan branches.
Eens verder brainstormen over de mogelijkheden voor jouw organisatie?
Maak kennis met onze specialist Arnoud van der Heiden.