Zabezpečení je jedním z nejdůležitějších požadavků na systém založený na datech. Šifrování je jedním ze způsobů zabezpečení dat. Wikipedie definuje šifrování jako:
“Šifrování je proces kódování zprávy nebo informací takovým způsobem, že k nim mají přístup pouze oprávněné strany a neoprávněné osoby nikoli. “
V SQL Server 2016 společnost Microsoft představila funkci šifrování nazvanou Always Encrypted . V tomto článku uvidíme, co je Vždy šifrováno je a jak jej lze použít k šifrování a dešifrování dat pomocí jednoduchých příkladů.
Co je SQL Server Always Encrypted?
Vždy šifrováno je bezpečnostní funkce, která umožňuje klientské aplikaci spravovat šifrovací a dešifrovací klíče, čímž zajišťuje, že pouze klientská aplikace může dešifrovat a používat citlivá data.
Existuje několik šifrovacích technik, které však nejsou tak bezpečné jako Always Encrypted . Například šifrování symetrickým klíčem se používá k šifrování dat na straně databáze. Nevýhodou tohoto přístupu je, že pokud má dešifrovací klíč jakýkoli jiný správce databáze, může k datům přistupovat.
Na druhou stranu v případě Vždy šifrováno , data jsou zašifrována na straně klienta a databázový server obdrží zašifrovanou verzi dat. Data tedy nelze na konci databáze dešifrovat. Pouze klient, který data zašifroval, je může dešifrovat.
Typy klíčů
Funkce SQL Server Always Encrypted používá dva typy klíčů:
Klíč pro šifrování sloupců (CEK)
Je vždy umístěn na databázovém serveru. Data jsou ve skutečnosti šifrována pomocí sloupce CEK. Pokud však někdo na straně databáze má přístup k CEK, může data dešifrovat.
Hlavní klíč sloupce (CMK)
Tento klíč je umístěn na straně klienta nebo na libovolném úložišti třetí strany. CMK se používá k ochraně CEK a přidává další vrstvu zabezpečení. Kdokoli má přístup k CMK, může ve skutečnosti dešifrovat CEK, který pak může být použit k dešifrování skutečných dat.
Typy šifrování
Deterministické
Tento typ šifrování vždy vygeneruje podobný šifrovaný text pro stejný typ dat. Pokud chcete implementovat vyhledávání a seskupování ve sloupci tabulky, použijte pro tento sloupec deterministické šifrování.
Náhodné
Randomizované šifrování vygeneruje pro stejný typ dat jiný zašifrovaný text, kdykoli se pokusíte data zašifrovat. Pokud sloupec není používán pro seskupování a vyhledávání, použijte náhodné šifrování.
Konfigurace Vždy šifrováno Pomocí SSMS
Můžeme nakonfigurovat SQL Server Always Encrypted přes SSMS. Předtím ale musíme vytvořit databázi a přidat do databáze tabulku. Chcete-li to provést, spusťte následující skript:
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 )
Ve skriptu výše vytvoříme novou databázi s názvem Škola . Databáze má čtyři sloupce:StudentId , Jméno , Heslo a SSN . Můžete vidět, že sloupce Password a SSN mají COLLATE. Je nutné zadat COLLATE pro sloupec, který chcete Vždy šifrovat . Typ šifrování je specifikován jako „Latin1_General_BIN2“.
Zkusme nyní nejprve přidat dva záznamy do tabulky Student.
insert into Student ( Name, Password, SSN) VALUES ('John','abc123', '451236521478'), ('Mike','xyz123', '789541239654')
V tuto chvíli nemáme nakonfigurováno Vždy šifrováno v kterémkoli ze sloupců v tabulce Student, takže pokud se pokusíte vybrat záznamy z tabulky Student, uvidíte skutečné hodnoty dat spíše než zašifrované hodnoty. Chcete-li vybrat záznamy, spusťte následující dotaz:
SELECT * FROM Student
Výstup vypadá takto:
Pojďme nyní nakonfigurovat SSMS pro aktivaci Vždy šifrováno . Jak jsme již řekli, Vždy šifrováno vytvoří šifrovací klíče sloupců a hlavní klíče sloupců.
Chcete-li zobrazit stávající šifrovací klíče sloupců a hlavní klíče sloupců pro školní databázi, přejděte na Databáze -> Škola -> Zabezpečení -> Vždy šifrované klíče, jak je znázorněno na následujícím obrázku:
Vzhledem k tomu, že v datové sadě nemáte žádný zašifrovaný záznam, neuvidíte v seznamu žádné CEK ani CMK.
Pojďme nyní povolit šifrování ve sloupcích Heslo a SSN tabulky Student. Chcete-li tak učinit, klikněte pravým tlačítkem na Databáze -> Škola. Z rozbalovací nabídky vyberte Šifrovat sloupce možnost, jak je znázorněno na obrázku níže:
Klikněte na Další na Úvod okno. Z Výběr sloupců v okně, zkontrolujte sloupce Heslo a SSN. Ve sloupci Heslo vyberte typ šifrování Randomized . Pro sloupec SSN vyberte Deterministic . To je znázorněno na následujícím snímku obrazovky:
Klikněte na Další na Konfiguraci hlavního klíče okno. Ve výchozím nastavení je hlavní klíč uložen na klientském počítači, jak je znázorněno níže:
Klikněte na Další na Spustit nastavení a Přehled Okna. Pokud vše půjde dobře, měli byste vidět následující Výsledky okno.
Pokud nyní znovu přejdete na Databáze -> Škola -> Zabezpečení -> Vždy šifrované klíče, měli byste vidět nově vytvořené CEK a CMK, jak je znázorněno na následujícím obrázku:
Nyní zkuste vybrat záznamy z tabulky Student.
SELECT * FROM Student
Výstup vypadá takto.
Z výstupu můžete vidět, že sloupce Password a SSN byly zašifrovány.
Načítání dešifrovaných dat
Dotaz SELECT vrátil zašifrovaná data. Co když chcete získat data v dešifrované podobě? Chcete-li tak učinit, vytvořte v SSMS nové okno dotazu a poté klikněte na Změnit připojení ikona v horní části Průzkumníka objektů, jak je znázorněno na následujícím obrázku:
Zobrazí se okno připojení k serveru SQL. Vyberte Možnosti tlačítko vpravo dole, jak je znázorněno níže:
V okně, které se zobrazí, klikněte na Další parametry připojení z levého horního rohu a do textového pole zadejte „Nastavení šifrování sloupců =Povoleno“, jak je znázorněno na následujícím snímku obrazovky. Nakonec klikněte na Připojit tlačítko.
Nyní znovu proveďte následující SELECT dotaz:
SELECT * FROM Student
Ve výsledcích uvidíte záznamy vrácené v dešifrované podobě, jak je uvedeno níže:
Závěr
Vždy E zašifrováno je jednou z nejnovějších funkcí zabezpečení serveru SQL Server. V tomto článku jsme krátce zhodnotili to, co Vždy E zašifrováno je a jak jej povolit pomocí SQL Server Management Studio. Také jsme viděli základní příklad šifrování a dešifrování dat pomocí Vždy E zašifrováno funkce.