sql >> Databasteknik >  >> RDS >> Sqlserver

Förstå SQL Server alltid krypterad

Säkerhet är ett av de viktigaste kraven för ett datadrivet system. Kryptering är ett av sätten att säkra data. Wikipedia definierar kryptering som:

Kryptering är processen att koda ett meddelande eller information på ett sådant sätt att endast auktoriserade parter kan komma åt det och de som inte är auktoriserade inte kan.

I SQL Server 2016 introducerade Microsoft en krypteringsfunktion som heter Alltid krypterad . I den här artikeln kommer vi att se vad Alltid krypterat är, och hur det kan användas för att kryptera och dekryptera data, med hjälp av enkla exempel.

Vad är SQL Server Always Encrypted?

Alltid krypterad är en säkerhetsfunktion som gör att klientapplikationen kan hantera krypterings- och dekrypteringsnycklarna, vilket säkerställer att endast klientapplikationen kan dekryptera och använda känslig data.

Det finns flera krypteringstekniker, men de är inte lika säkra som Alltid krypterade . Till exempel används symmetrisk nyckelkryptering för att kryptera data på databassidan. En nackdel med detta tillvägagångssätt är att om någon annan databasadministratör har dekrypteringsnyckeln kan han komma åt data.

Å andra sidan, vid Alltid krypterad , data krypteras på klientsidan och databasservern tar emot en chiffrerad version av data. Därför kan data inte dechiffreras i databasens ände. Endast klienten som krypterade data kan dekryptera den.

Nyckeltyper

SQL Server Always Encrypted-funktionen använder två typer av nycklar:

  • Column Encryption Key (CEK)

Den placeras alltid på databasservern. Data krypteras faktiskt med kolumn CEK. Men om någon på databassidan har tillgång till CEK kan han dekryptera datan.

  • Column Master Key (CMK)

Denna nyckel är placerad på klientsidan eller någon tredje parts lagring. CMK används för att skydda CEK och lägger till ett extra lager av säkerhet. Den som har tillgång till CMK kan faktiskt dekryptera CEK som sedan kan användas för att dechiffrera den faktiska datan.

Krypteringstyper

  • Deterministisk

Den här typen av kryptering kommer alltid att generera liknande krypterad text för samma typ av data. Om du vill implementera sökning och gruppering i en tabellkolumn, använd deterministisk kryptering för den kolumnen.

  • Randomiserad

Randomiserad kryptering genererar olika krypterad text för samma typ av data när du försöker kryptera data. Använd randomiserad kryptering om kolumnen inte används för gruppering och sökning.

Konfigurerar Alltid krypterad Använda SSMS

Vi kan konfigurera SQL Server alltid krypterad via SSMS. Men innan dess måste vi skapa en databas och lägga till en tabell i databasen. Kör följande skript för att göra det:

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

I skriptet ovan skapar vi en ny databas med namnet Skola . Databasen har fyra kolumner:StudentId , Namn , Lösenord och SSN . Du kan se att kolumnerna Lösenord och SSN har en COLLATE. Det är nödvändigt att ange COLLATE för den kolumn som du vill ha Alltid krypterad . Typen av kryptering anges som "Latin1_General_BIN2".

Låt oss nu först försöka lägga till två poster i elevtabellen.

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

Vi har vid denna tidpunkt inte konfigurerat Alltid krypterat på någon av kolumnerna i elevtabellen, därför kommer du att se de faktiska datavärdena snarare än de krypterade värdena om du försöker välja posterna från elevtabellen. Kör följande fråga för att välja poster:

SELECT * FROM Student

Utdatan ser ut så här:

Låt oss nu konfigurera SSMS för att aktivera Alltid krypterad . Som vi sa tidigare, Alltid krypterad skapar kolumnkrypteringsnycklar och kolumnhuvudnycklar.

För att se de befintliga kolumnkrypteringsnycklarna och kolumnhuvudnycklarna, för skoldatabasen, gå till Databaser -> Skola -> Säkerhet -> Alltid krypterade nycklar som visas i följande figur:

Eftersom du inte har någon krypterad post i datamängden kommer du inte att se några CEK eller CMK i listan.

Låt oss nu aktivera kryptering i kolumnerna Lösenord och SSN i ​​elevtabellen. För att göra det, högerklicka på Databaser -> Skola. I rullgardinsmenyn väljer du Kryptera kolumner alternativ som visas i bilden nedan:

Klicka på Nästa knappen på Introduktion fönster. Från kolumnval fönster, kontrollera Lösenord och SSN kolumner. För kolumnen Lösenord väljer du krypteringstypen som Randomiserad . För SSN-kolumn, välj Deterministisk . Detta visas i följande skärmdump:

Klicka på Nästa knappen på Konfiguration av huvudnyckel fönster. Som standard lagras huvudnyckeln på klientdatorn enligt nedan:

Klicka på Nästa knappen på Körinställningar och Sammanfattning fönster. Om allt går bra bör du se följande resultat fönster.

Om du nu igen går till Databaser -> Skola -> Säkerhet -> Alltid krypterade nycklar, bör du se de nyskapade CEK och CMK som visas i följande figur:

Försök nu att välja poster från elevtabellen.

SELECT * FROM Student

Utgången ser ut så här.

Från utgången kan du se att kolumnerna Lösenord och SSN har krypterats.

Hämtar dekrypterad data

SELECT-frågan returnerade krypterad data. Vad händer om du vill hämta data i dekrypterad form? För att göra det skapa ett nytt frågefönster i SSMS och klicka sedan på Ändra anslutning ikonen överst i Objektutforskaren som visas i följande figur:

SQL Server-anslutningsfönstret visas. Välj Alternativ knappen nere till höger som visas nedan:

I fönstret som visas klickar du på Ytterligare anslutningsparametrar fliken uppe till vänster och ange "Column Encryption Setting =Enabled" i textrutan som visas i följande skärmdump. Klicka slutligen på Anslut knappen.

Utför nu följande SELECT-fråga igen:

SELECT * FROM Student

I resultaten kommer du att se posterna som returneras i dekrypterad form enligt nedan:

Slutsats

Alltid E krypterad är en av de senaste säkerhetsfunktionerna i SQL Server. I den här artikeln granskade vi kort vad Alltid E krypterad är och hur man aktiverar det med SQL Server Management Studio. Vi såg också ett grundläggande exempel på att kryptera och dekryptera data med Alltid E krypterad funktion.


  1. FEL 2006 (HY000):MySQL-servern har försvunnit

  2. Hur ACOS() fungerar i MariaDB

  3. Koda ditt första API med Node.js och Express:Anslut en databas

  4. Hur man listar databaser och tabeller i PostgreSQL