sql >> Database >  >> RDS >> Sqlserver

Inzicht in SQL Server Always Encrypted

Beveiliging is een van de belangrijkste vereisten voor een gegevensgestuurd systeem. Encryptie is een van de manieren om de gegevens te beveiligen. Wikipedia definieert codering als:

Encryptie is het proces van het coderen van een bericht of informatie op een zodanige manier dat alleen geautoriseerde partijen er toegang toe hebben en degenen die niet geautoriseerd zijn niet.

In SQL Server 2016 introduceerde Microsoft een coderingsfunctie genaamd Always Encrypted . In dit artikel zullen we zien wat Always Encrypted is, en hoe het kan worden gebruikt om gegevens te versleutelen en ontsleutelen, met behulp van eenvoudige voorbeelden.

Wat is SQL Server Always Encrypted?

Altijd versleuteld is een beveiligingsfunctie waarmee de clienttoepassing de coderings- en decoderingssleutels kan beheren, zodat alleen de clienttoepassing gevoelige gegevens kan decoderen en gebruiken.

Er bestaan ​​verschillende coderingstechnieken, maar deze zijn niet zo veilig als Always Encrypted . Er wordt bijvoorbeeld symmetrische sleutelcodering gebruikt om gegevens aan de databasezijde te coderen. Een nadeel van deze benadering is dat als een andere databasebeheerder de decoderingssleutel heeft, hij toegang heeft tot de gegevens.

Aan de andere kant, in het geval van Always Encrypted , worden de gegevens aan de clientzijde versleuteld en ontvangt de databaseserver een gecodeerde versie van de gegevens. Daarom kunnen de gegevens aan het einde van de database niet worden ontcijferd. Alleen de client die de gegevens heeft versleuteld, kan deze ontsleutelen.

Sleuteltypen

SQL Server Always Encrypted-functie gebruikt twee soorten sleutels:

  • Kolomcoderingssleutel (CEK)

Het wordt altijd op de databaseserver geplaatst. De gegevens worden feitelijk versleuteld met kolom CEK. Als iemand aan de databasekant echter toegang heeft tot CEK, kan hij de gegevens ontsleutelen.

  • Kolomhoofdsleutel (CMK)

Deze sleutel wordt aan de clientzijde of op een externe opslagplaats geplaatst. CMK wordt gebruikt om de CEK te beschermen en voegt een extra beveiligingslaag toe. Wie toegang heeft tot CMK, kan de CEK daadwerkelijk ontsleutelen, die vervolgens kan worden gebruikt om de daadwerkelijke gegevens te ontcijferen.

Encryptietypes

  • Deterministisch

Dit type codering genereert altijd vergelijkbare gecodeerde tekst voor hetzelfde type gegevens. Als u zoeken en groeperen op een tabelkolom wilt implementeren, gebruikt u deterministische codering voor die kolom.

  • Gerandomiseerd

Randomized Encryption genereert verschillende versleutelde tekst voor hetzelfde type gegevens, telkens wanneer u de gegevens probeert te versleutelen. Gebruik gerandomiseerde codering als de kolom niet wordt gebruikt voor groeperen en zoeken.

Configureren Altijd versleuteld SSMS gebruiken

We kunnen SQL Server Always Encrypted configureren via SSMS. Maar daarvoor moeten we een database maken en een tabel aan de database toevoegen. Voer hiervoor het volgende script uit:

CREATE DATABASE School

Use School
CREATE TABLE Student  
(  
   StudentId int identity(1,1) primary key,  
   Name varchar(100),  
   Password varchar(100) COLLATE Latin1_General_BIN2 not null,  
   SSN varchar(20)  COLLATE Latin1_General_BIN2 not null
)

In het bovenstaande script maken we een nieuwe database aan met de naam School . De database heeft vier kolommen:StudentId , Naam , Wachtwoord , en SSN . U kunt zien dat de kolommen Wachtwoord en SSN een COLLATE hebben. Het is noodzakelijk om de COLLATE op te geven voor de kolom die u wilt Always Encrypted . Het type codering wordt gespecificeerd als "Latin1_General_BIN2".

Laten we nu eerst proberen twee records toe te voegen aan de tabel Studenten.

insert into Student ( Name, Password, SSN)
VALUES ('John','abc123', '451236521478'),
('Mike','xyz123', '789541239654')

Op dit moment hebben we Always Encrypted niet geconfigureerd op een van de kolommen in de tabel Student, dus als u de records uit de tabel Student probeert te selecteren, ziet u de werkelijke gegevenswaarden in plaats van de versleutelde waarden. Voer de volgende query uit om records te selecteren:

SELECT * FROM Student

De uitvoer ziet er als volgt uit:

Laten we nu SSMS configureren om Always Encrypted in te schakelen . Zoals we eerder zeiden, Altijd versleuteld maakt kolomcoderingssleutels en kolomhoofdsleutels.

Als u de bestaande kolomcoderingssleutels en kolomhoofdsleutels wilt zien, gaat u voor de schooldatabase naar Databases -> School -> Beveiliging -> Altijd versleutelde sleutels zoals weergegeven in de volgende afbeelding:

Omdat je geen versleutelde records in de dataset hebt, zie je geen CEK of CMK in de lijst.

Laten we nu versleuteling inschakelen voor de kolommen Wachtwoord en SSN van de tabel Studenten. Klik hiervoor met de rechtermuisknop op Databases -> School. Selecteer in het vervolgkeuzemenu Kolommen versleutelen optie zoals weergegeven in de onderstaande afbeelding:

Klik op Volgende knop op de Introductie raam. Uit de Kolomselectie venster, controleer dan de kolommen Wachtwoord en SSN. Selecteer voor de kolom Wachtwoord het coderingstype als Gerandomiseerd . Kies voor SSN-kolom Deterministisch . Dit wordt getoond in de volgende schermafbeelding:

Klik op Volgende knop op de Hoofdsleutelconfiguratie raam. Standaard wordt de hoofdsleutel op de clientcomputer opgeslagen, zoals hieronder weergegeven:

Klik op Volgende knop op de Instellingen uitvoeren en de Samenvatting ramen. Als alles goed gaat, ziet u de volgende Resultaten venster.

Als je nu weer naar Databases -> School -> Beveiliging -> Always Encrypted Keys gaat, zou je de nieuw gemaakte CEK en CMK moeten zien, zoals weergegeven in de volgende afbeelding:

Probeer nu records te selecteren uit de tabel Studenten.

SELECT * FROM Student

De uitvoer ziet er als volgt uit.

Aan de uitvoer kunt u zien dat de kolommen Wachtwoord en SSN zijn versleuteld.

Ontsleutelde gegevens ophalen

De SELECT-query heeft versleutelde gegevens geretourneerd. Wat als u gegevens in ontsleutelde vorm wilt ophalen? Maak hiervoor een nieuw queryvenster in SSMS en klik vervolgens op Verbinding wijzigen pictogram bovenaan Objectverkenner zoals weergegeven in de volgende afbeelding:

Het SQL Server-verbindingsvenster verschijnt. Selecteer Opties knop van rechtsonder, zoals hieronder weergegeven:

Klik in het venster dat verschijnt op Extra verbindingsparameters tabblad van linksboven en voer "Kolomcoderingsinstelling =ingeschakeld" in het tekstvak in, zoals weergegeven in de volgende schermafbeelding. Klik ten slotte op de knop Verbinden knop.

Voer nu opnieuw de volgende SELECT-query uit:

SELECT * FROM Student

In de resultaten ziet u de records die in gedecodeerde vorm worden geretourneerd, zoals hieronder weergegeven:

Conclusie

Altijd E versleuteld is een van de nieuwste beveiligingsfuncties van SQL Server. In dit artikel hebben we kort besproken wat Altijd E versleuteld is en hoe u deze kunt inschakelen met behulp van SQL Server Management Studio. We zagen ook een eenvoudig voorbeeld van het versleutelen en ontsleutelen van gegevens met behulp van Altijd E versleuteld functie.


  1. Oracle Date datatype, getransformeerd naar 'YYYY-MM-DD HH24:MI:SS TMZ' via SQL

  2. Er is een netwerkgerelateerde of instantiespecifieke fout opgetreden bij het tot stand brengen van een verbinding met SQL Server

  3. Vertraagde duurzaamheid in SQL Server 2014

  4. Update het configuratiebestand met uw nieuwe database-instellingen