Neem contact op
Bel mij terug

Data beveiliging met SQL Server

Door Reitse Eskens, Support Specialist BI

Tegenwoordig staat de beveiliging van data erg in de schijnwerpers. Niet alleen zijn er steeds meer hackers actief die interesse hebben in uw data, ook in het licht van GDPR moet data beveiligd worden. In mijn vorige blog ben ik ingegaan op de beveiliging van accounts; wie kan er bij mijn data.

In dit blog wil ik dieper ingaan op de beveiligingsmogelijkheden die SQL Server biedt om de data zelf te beveiliging tegen onrechtmatig gebruik. Na het overzicht van de mogelijkheden volgt nog een matrix met de verschillende versies van SQL Server en welke vormen van beveiliging daarin aangeboden worden. Helaas zijn voor specifieke vormen van beveiliging dure licenties benodigd.

Welke beveiliging u ook kiest, deze blijft zo sterk als de zwakste schakel; het bewaken van de wachtwoorden. Een volledige beveiliging bevat daarom niet alleen de encryptie van uw data, maar ook een passende, veilige opslag van uw wachtwoorden.

Bewust ga ik niet in op hoe de verschillende vormen van encryptie toegepast kunnen worden op de database. In plaats daarvan zijn links toegevoegd naar de Microsoft documentatie, daar kunt u verder lezen hoe de exacte techniek in elkaar steekt.

Encryptie hiërarchie

Encryptie van data vindt plaats via een specifieke hiërarchie. Deze begint bij het operating system. Daarin zit de bewaking van de Service Master Key. Deze SMK bewaakt op haar beurt weer de Database Master Key. Vanuit deze DMK wordt de bewaking uitgevoerd op de certificaten, symmetrische en asymmetrische sleutels die uiteindelijk zorgen voor de toegang tot de data die veilig versleuteld opgeslagen is in de databasetabellen. Uiteraard zitten op al deze niveaus de nodige wachtwoorden.

Grafisch geeft Microsoft dit als volgt weer:

Transparent Data Encryption (TDE)

Deze vorm van encryptie zorgt ervoor dat de gegevensbestanden zelf (de datafiles die op de harde schijf opgeslagen zijn) versleuteld zijn. Hierdoor kan iemand die alleen de datafiles heeft niet meer bij de data die hierin is opgeslagen. Om bij de data te kunnen komen heb je meerdere keys en certificaten nodig. In het screenshot hieronder worden de verschillende lagen getoond waarmee de data beveiligd wordt.

Voor meer informatie:

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption

Always Encrypted

De feature is specifiek ontworpen voor de bescherming van gevoelige data, zoals creditcard nummers of BSN nummers. Via Always Encrypted wordt de data binnen de client applicatie al versleuteld en naar de database gestuurd zonder te melden wat de decryptiesleutel is. Alleen de eigenaar van de data kan de data zien. Ben je niet de eigenaar van de data, dan kan je niet zien wat er is opgeslagen, ongeacht je rol binnen de database. Deze methodiek is ook toepasbaar op Azure cloud databases.

De encryptie en decryptie van de data vindt plaats via een Always Encrypted driver. Deze driver zorgt voor de encryptie van de kolommen met de gevoelige data en voorkomt dat de software herschreven moet worden. De queries worden door de driver herschreven.

Andersom zorgt de driver er ook voor dat de data weer leesbaar wordt binnen de client applicatie.

Voor meer informatie:

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine

Column level encryption

SQL Server biedt de mogelijkheid om op kolomniveau gegevens te versleutelen. Zodra de data versleuteld is, wordt deze als, vrijwel, onleesbare code gepresenteerd bij het selecteren van gegevens. Om de data weer leesbaar te krijgen moet de gebruiker beschikken over de Key waarmee de data versleuteld is en over het bijbehorende wachtwoord. De combinatie van die twee zorgt ervoor dat de inhoud van de kolom weer getoond wordt.

Aandachtspunt hierbij is dat je een bestaande kolom niet kunt versleutelen via deze techniek, dit moet via een nieuwe kolom van het datatype “varbinary”.

Voor meer informatie:

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/encrypt-a-column-of-data

Dynamic Data Masking

Deze laatste vorm van encryptie is een relatief lichte vorm van encryptie; data wordt gemaskeerd. Hierin zijn een aantal vormen aanwezig. De default variant zorgt ervoor dat data, ongeacht lengte of inhoud, als  ‘xxxx’ getoond wordt.

Daarnaast is er een e-mailvariant die een mailadres weergeeft met de eerste letter van het mailadres, dan een aantal maal  ‘X’ afgesloten met de extensie van het mailadres (.com, .nl, .biz etc).

Om getallen (zoals salarissen, geboortedagen en dergelijke) te maskeren is er de random functie. Daarin kan je een range aangeven waarbinnen een getal, willekeurig, gekozen kan worden.

De laatste variant is een eigen variant. Daarin heb je de mogelijkheid om aan te geven hoeveel originele karakters van het begin van het veld mogen blijven staan, welke waarde er dan getoond moet worden en hoeveel karakters er van het laatste deel van het veld over moeten blijven. Als voorbeeld gaan we een functie gebruiken op landen. Daarbij houden we de vijf eerste karakters, dan de waarde XYZ en tot slot de laatste twee karakters. Dat geeft het volgende resultaat:

Encryptie van back-ups

De back-up van uw data kan ook versleuteld worden. Mocht iemand niet direct bij uw data komen maar onverhoopt wel bij de back-up, dan is daar ook een extra drempel opgeworpen. Afhankelijk van uw licentie kunt u deze feature activeren of niet. Om een back-up op te slaan met encryptie heeft u een master key nodig op de database en een certificaat welke gebruikt wordt bij de back-up. In het back-up commando geeft u het certificaat op samen met het encryptie algoritme. Via de interface kunt u deze encryptie aanzetten.

Welke functionaliteit zit in welke versie?

Zoals in de inleiding aangegeven hieronder een matrix met daarin de verschillende versies van SQL Server met de verschillende encryptie varianten. Aangegeven is wat de minimale editie is die nodig is om een specifieke encryptievariant te kunnen gebruiken.

Encryptie
Database
Transparant
Data
Encryption
Always
Encrypted
Column
level
encryption
Dynamic
Data
Masking
Back-up
encryptie
SQL Server 2012 Enterprise Express
SQL Server 2014 Enterprise Express Standard
SQL Server 2016 Enterprise Enterprise Express Express Standard
SQL Server 2016 SP1 Enterprise Express Express Express Standard
SQL Server 2017 Enterprise Express Express Express Standard