Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zrozumienie SQL Server zawsze szyfrowane

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dodaj wiodące i końcowe zera w SQL Server

  2. Unikanie pojedynczego cudzysłowu w SQL Server

  3. Sprawdź nieudane wiadomości e-mail w programie SQL Server (T-SQL)

  4. 2 sposoby tworzenia bazy danych na serwerze połączonym przy użyciu T-SQL

  5. Jaki jest najlepszy sposób na zaimplementowanie asocjacji polimorficznej w SQL Server?