Bezpieczeństwo jest jednym z najważniejszych wymagań dla systemu opartego na danych. Szyfrowanie to jeden ze sposobów zabezpieczenia danych. Wikipedia definiuje szyfrowanie jako:
„Szyfrowanie to proces kodowania wiadomości lub informacji w taki sposób, że tylko upoważnione strony mogą uzyskać do nich dostęp, a osoby nieuprawnione nie. ”
W SQL Server 2016 firma Microsoft wprowadziła funkcję szyfrowania o nazwie Always Encrypted . W tym artykule zobaczymy, co Zawsze szyfrowane jest i jak można go używać do szyfrowania i odszyfrowywania danych za pomocą prostych przykładów.
Co to jest SQL Server Always Encrypted?
Zawsze szyfrowane to funkcja bezpieczeństwa, która pozwala aplikacji klienckiej zarządzać kluczami szyfrowania i deszyfrowania, zapewniając w ten sposób, że tylko aplikacja kliencka może odszyfrować i używać poufnych danych.
Istnieje kilka technik szyfrowania, jednak nie są one tak bezpieczne jak Zawsze szyfrowane . Na przykład szyfrowanie kluczem symetrycznym służy do szyfrowania danych po stronie bazy danych. Wadą tego podejścia jest to, że jeśli jakikolwiek inny administrator bazy danych ma klucz odszyfrowywania, może uzyskać dostęp do danych.
Z drugiej strony, w przypadku Zawsze szyfrowane , dane są szyfrowane po stronie klienta, a serwer bazy danych otrzymuje zaszyfrowaną wersję danych. Dlatego dane nie mogą zostać odszyfrowane na końcu bazy danych. Tylko klient, który zaszyfrował dane, może je odszyfrować.
Typy kluczy
Funkcja SQL Server Always Encrypted wykorzystuje dwa typy kluczy:
Klucz szyfrowania kolumny (CEK)
Zawsze jest umieszczany na serwerze bazy danych. Dane są faktycznie szyfrowane za pomocą kolumny CEK. Jeśli jednak ktoś po stronie bazy danych ma dostęp do CEK, może odszyfrować dane.
Klucz główny kolumny (CMK)
Ten klucz jest umieszczany po stronie klienta lub w pamięci innej firmy. CMK służy do ochrony CEK, dodając dodatkową warstwę bezpieczeństwa. Każdy, kto ma dostęp do CMK, może w rzeczywistości odszyfrować CEK, który może być następnie użyty do odszyfrowania rzeczywistych danych.
Typy szyfrowania
Deterministyczny
Ten rodzaj szyfrowania zawsze generuje podobny zaszyfrowany tekst dla tego samego typu danych. Jeśli chcesz zaimplementować wyszukiwanie i grupowanie w kolumnie tabeli, użyj deterministycznego szyfrowania dla tej kolumny.
Losowo
Losowe szyfrowanie wygeneruje inny zaszyfrowany tekst dla tego samego typu danych za każdym razem, gdy spróbujesz zaszyfrować dane. Użyj losowego szyfrowania, jeśli kolumna nie jest używana do grupowania i wyszukiwania.
Konfigurowanie Zawsze szyfrowane Korzystanie z SMS-ów
Możemy skonfigurować SQL Server Always Encrypted przez SSMS. Ale wcześniej musimy stworzyć bazę danych i dodać do niej tabelę. W tym celu wykonaj następujący skrypt:
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 )
W powyższym skrypcie tworzymy nową bazę danych o nazwie Szkoła . Baza danych ma cztery kolumny:Identyfikator ucznia , Nazwa , Hasło i SSN . Widać, że kolumny Hasło i SSN mają UKŁADANIE. Konieczne jest określenie COLLATE dla kolumny, która ma być Zawsze szyfrowana . Typ szyfrowania jest określony jako „Latin1_General_BIN2”.
Spróbujmy teraz najpierw dodać dwa rekordy do tabeli Student.
insert into Student ( Name, Password, SSN) VALUES ('John','abc123', '451236521478'), ('Mike','xyz123', '789541239654')
W tej chwili nie skonfigurowaliśmy Zawsze szyfrowane w dowolnej kolumnie w tabeli Student, dlatego jeśli spróbujesz wybrać rekordy z tabeli Student, zobaczysz rzeczywiste wartości danych, a nie wartości zaszyfrowane. Wykonaj następujące zapytanie, aby wybrać rekordy:
SELECT * FROM Student
Wynik wygląda tak:
Skonfigurujmy teraz SSMS, aby włączyć Zawsze szyfrowane . Jak powiedzieliśmy wcześniej, Zawsze szyfrowane tworzy klucze szyfrowania kolumn i klucze główne kolumn.
Aby zobaczyć istniejące klucze szyfrowania kolumn i klucze główne kolumny, w przypadku szkolnej bazy danych przejdź do Bazy danych -> Szkoła -> Bezpieczeństwo -> Zawsze szyfrowane klucze, jak pokazano na poniższym rysunku:
Ponieważ nie masz żadnego zaszyfrowanego rekordu w zbiorze danych, nie zobaczysz na liście żadnych CEK ani CMK.
Włączmy teraz szyfrowanie w kolumnach Hasło i SSN tabeli Uczeń. Aby to zrobić, kliknij prawym przyciskiem myszy Bazy danych -> Szkoła. Z menu wybierz Zaszyfruj kolumny opcja pokazana na poniższym rysunku:
Kliknij Dalej przycisk na Wprowadzeniu okno. Z Wyboru kolumny w oknie, sprawdź kolumny Hasło i SSN. W kolumnie Hasło wybierz typ szyfrowania Randomized . Dla kolumny SSN wybierz Deterministyczny . Jest to pokazane na poniższym zrzucie ekranu:
Kliknij przycisk Dalej przycisk na Konfiguracji klucza głównego okno. Domyślnie klucz główny jest przechowywany na komputerze klienta, jak pokazano poniżej:
Kliknij przycisk Dalej przycisk na Ustawieniach biegu i Podsumowanie okna. Jeśli wszystko pójdzie dobrze, powinieneś zobaczyć następujące Wyniki okno.
Teraz, jeśli ponownie przejdziesz do Bazy danych -> Szkoła -> Bezpieczeństwo -> Zawsze szyfrowane klucze, powinieneś zobaczyć nowo utworzone CEK i CMK, jak pokazano na poniższym rysunku:
Teraz spróbuj wybrać rekordy z tabeli Student.
SELECT * FROM Student
Wynik wygląda tak.
Z danych wyjściowych widać, że kolumny Hasło i SSN zostały zaszyfrowane.
Pobieranie odszyfrowanych danych
Zapytanie SELECT zwróciło zaszyfrowane dane. Co jeśli chcesz odzyskać dane w formie odszyfrowanej? Aby to zrobić, utwórz nowe okno zapytania w SSMS, a następnie kliknij Zmień połączenie ikonę w górnej części Eksploratora obiektów, jak pokazano na poniższym rysunku:
Pojawi się okno połączenia z serwerem SQL. Wybierz Opcje przycisk w prawym dolnym rogu, jak pokazano poniżej:
W wyświetlonym oknie kliknij Dodatkowe parametry połączenia zakładka w lewym górnym rogu i wprowadź "Ustawienie szyfrowania kolumn =Włączone" w polu tekstowym, jak pokazano na poniższym zrzucie ekranu. Na koniec kliknij Połącz przycisk.
Teraz ponownie wykonaj następujące zapytanie SELECT:
SELECT * FROM Student
W wynikach zobaczysz rekordy zwrócone w formie odszyfrowanej, jak pokazano poniżej:
Wniosek
Zawsze E zaszyfrowane to jedna z najnowszych funkcji bezpieczeństwa SQL Server. W tym artykule krótko omówiliśmy, co Zawsze E zaszyfrowane jest i jak go włączyć za pomocą programu SQL Server Management Studio. Widzieliśmy również podstawowy przykład szyfrowania i odszyfrowywania danych przy użyciu Zawsze E zaszyfrowane funkcja.