Maskeren van data in SQL server met Dynamic Data Masking ?>

Maskeren van data in SQL server met Dynamic Data Masking

Data veiligheid is in het huidige tijdperk van de AVG een hot issue. In veel databases worden gegevens opgeslagen die niet zo maar meer voor iedereen zichtbaar blijven. Een optie is natuurlijk om deze data te verwijderen, maar dit is ook niet in alle gevallen de ideale oplossing.

SQL Server 2016 biedt een interessant alternatief: DYNAMIC DATA MASKING.
Met deze techniek kunnen gegevens gemaskeerd worden voor gebruikers, tenzij hen daar specifiek rechten voor is gegeven. In deze blog leg ik uit hoe dit werkt.

Vier methodes

SQL Server kent vier methodes waarmee gegevens kunnen worden gemaskeerd:

  1. 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.
  2. Email
    Deze optie is uiteraard bedoeld voor e-mailadressen
  3. Random
    Dit masker is ontworpen om te gebruiken met numerieke datavelden. Het idee is dat de werkelijke waarde wordt vervangen door een willekeurig nummer.
  4. 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:


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)')


)

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:

INSERT INTO [dbo].[GebruikersTabel]

([GebruikersNaam]

,[EmailAdres]

,[Leeftijd]

,[Postcode])

VALUES

('Gideon Folkers'

,'gideon@refineit.nl'

,'18'

,'3303 HL')

GO

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.

CREATE USER ddm_test WITHOUT LOGIN

GRANT SELECT ON GebruikersTabel TO ddm_test

Laten we nu de gegevens bekijken als deze nieuwe gebruiker.

EXECUTE AS USER = 'ddm_test'

SELECT [GebruikersNaam]

,[EmailAdres]

,[Leeftijd]

,[Postcode]

FROM [dbo].[GebruikersTabel]

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.

Klik hier om naar onze site te gaan

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *