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.