Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Informazioni su SQL Server sempre crittografato

La sicurezza è uno dei requisiti più importanti per un sistema basato sui dati. La crittografia è uno dei modi per proteggere i dati. Wikipedia definisce la crittografia come:

Crittografia è il processo di codifica di un messaggio o di un'informazione in modo tale che solo le parti autorizzate possano accedervi e quelle che non sono autorizzate no.

In SQL Server 2016, Microsoft ha introdotto una funzionalità di crittografia denominata Always Encrypted . In questo articolo vedremo cosa Sempre crittografato è e come può essere utilizzato per crittografare e decrittografare i dati, con l'aiuto di semplici esempi.

Che cos'è SQL Server Always Encrypted?

Sempre crittografato è una funzionalità di sicurezza che consente all'applicazione client di gestire le chiavi di crittografia e decrittografia, garantendo così che solo l'applicazione client possa decrittografare e utilizzare dati sensibili.

Esistono diverse tecniche di crittografia, tuttavia non sono sicure come Sempre crittografate . Ad esempio, la crittografia a chiave simmetrica viene utilizzata per crittografare i dati sul lato del database. Uno svantaggio di questo approccio è che se un altro amministratore di database ha la chiave di decrittazione, può accedere ai dati.

D'altra parte, in caso di Sempre crittografato , i dati vengono crittografati sul lato client e il server del database riceve una versione crittografata dei dati. Pertanto, i dati non possono essere decifrati alla fine del database. Solo il client che ha crittografato i dati può decrittografarli.

Tipi di chiavi

La funzionalità SQL Server Always Encrypted utilizza due tipi di chiavi:

  • Chiave di crittografia della colonna (CEK)

Viene sempre posizionato sul server del database. I dati sono effettivamente crittografati utilizzando la colonna CEK. Tuttavia, se qualcuno sul lato database ha accesso a CEK, può decrittografare i dati.

  • Chiave principale della colonna (CMK)

Questa chiave viene posizionata sul lato client o su qualsiasi archivio di terze parti. CMK viene utilizzato per proteggere il CEK, aggiungendo un ulteriore livello di sicurezza. Chiunque abbia accesso a CMK può effettivamente decrittografare il CEK che può quindi essere utilizzato per decifrare i dati effettivi.

Tipi di crittografia

  • Deterministico

Questo tipo di crittografia genererà sempre testo crittografato simile per lo stesso tipo di dati. Se desideri implementare la ricerca e il raggruppamento in una colonna di tabella, utilizza la crittografia deterministica per quella colonna.

  • Randomizzato

La crittografia randomizzata genererà testo crittografato diverso per lo stesso tipo di dati, ogni volta che si tenta di crittografare i dati. Utilizza la crittografia randomizzata se la colonna non viene utilizzata per il raggruppamento e la ricerca.

Configurazione Sempre crittografato Utilizzo di SSMS

Possiamo configurare SQL Server Always Encrypted tramite SSMS. Ma prima, dobbiamo creare un database e aggiungere una tabella al database. Esegui il seguente script per farlo:

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
)

Nello script sopra, creiamo un nuovo database chiamato Scuola . Il database ha quattro colonne:StudentId , Nome , Password e SSN . Puoi vedere che le colonne Password e SSN hanno un COLLATE. È necessario specificare il COLLATE per la colonna che si desidera Always Encrypted . Il tipo di crittografia è specificato come “Latin1_General_BIN2”.

Proviamo ora ad aggiungere due record nella tabella Studente.

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

A questo punto non abbiamo configurato Sempre crittografato su una qualsiasi delle colonne della tabella Studente, quindi se provi a selezionare i record dalla tabella Studenti, vedrai i valori dei dati effettivi anziché i valori crittografati. Eseguire la query seguente per selezionare i record:

SELECT * FROM Student

L'output è simile a questo:

Configuriamo ora SSMS per abilitare Sempre crittografato . Come abbiamo detto prima, Sempre crittografato crea chiavi di crittografia di colonna e chiavi master di colonna.

Per visualizzare le chiavi di crittografia delle colonne e le chiavi master delle colonne esistenti, per il database della scuola, vai su Database -> Scuola -> Sicurezza -> Chiavi sempre crittografate come mostrato nella figura seguente:

Dato che non hai alcun record crittografato nel set di dati, non vedrai alcun CEK o CMK nell'elenco.

Abilitiamo ora la crittografia sulle colonne Password e SSN della tabella Studente. Per fare ciò, fare clic con il tasto destro su Database -> Scuola. Dal menu a discesa, seleziona Crittografa colonne opzione come mostrato nella figura seguente:

Fai clic su Avanti pulsante su Introduzione finestra. Dalla Selezione della colonna finestra, controllare le colonne Password e SSN. Per la colonna Password, seleziona il tipo di crittografia come Randomizzata . Per la colonna SSN, scegli Deterministico . Questo è mostrato nella schermata seguente:

Fai clic su Avanti pulsante su Configurazione chiave master finestra. Per impostazione predefinita, la chiave principale è memorizzata sul computer client come mostrato di seguito:

Fai clic su Avanti pulsante su Impostazioni di esecuzione e il Riepilogo finestre. Se tutto va bene, dovresti vedere i seguenti Risultati finestra.

Ora se vai di nuovo su Database -> Scuola -> Sicurezza -> Chiavi sempre crittografate, dovresti vedere la CEK e la CMK appena create come mostrato nella figura seguente:

Ora prova a selezionare i record dalla tabella Studenti.

SELECT * FROM Student

L'output è simile a questo.

Dall'output, puoi vedere che le colonne Password e SSN sono state crittografate.

Recupero dei dati decrittografati

La query SELECT ha restituito dati crittografati. Cosa succede se si desidera recuperare i dati in forma decrittografata? A tale scopo, crea una nuova finestra di query in SSMS e quindi fai clic su Cambia connessione icona nella parte superiore di Esplora oggetti come mostrato nella figura seguente:

Verrà visualizzata la finestra di connessione a SQL Server. Seleziona Opzioni pulsante in basso a destra come mostrato di seguito:

Dalla finestra che appare, fai clic su Parametri di connessione aggiuntivi scheda in alto a sinistra e inserisci "Column Encryption Setting =Enabled" nella casella di testo come mostrato nella schermata seguente. Infine, fai clic su Connetti pulsante.

Ora esegui di nuovo la seguente query SELECT:

SELECT * FROM Student

Nei risultati, vedrai i record restituiti in forma decrittografata come mostrato di seguito:

Conclusione

Sempre E crittografato è una delle ultime funzionalità di sicurezza di SQL Server. In questo articolo, abbiamo brevemente esaminato cosa Sempre E crittografato è e come abilitarlo utilizzando SQL Server Management Studio. Abbiamo anche visto un esempio di base di crittografia e decrittografia dei dati utilizzando Sempre E crittografato caratteristica.