Сигурността е едно от най-важните изисквания за система, управлявана от данни. Шифроването е един от начините за защита на данните. Уикипедия дефинира криптирането като:
“Шифроване е процес на кодиране на съобщение или информация по такъв начин, че само упълномощени страни да имат достъп до тях, а тези, които не са упълномощени, не могат. ”
В SQL Server 2016 Microsoft въведе функция за криптиране, наречена Винаги криптирано . В тази статия ще видим какво е Винаги криптирано е и как може да се използва за криптиране и декриптиране на данни с помощта на прости примери.
Какво е SQL Server винаги криптиран?
Винаги шифровани е функция за сигурност, която позволява на клиентското приложение да управлява ключовете за криптиране и декриптиране, като по този начин гарантира, че само клиентското приложение може да декриптира и използва чувствителни данни.
Съществуват няколко техники за криптиране, но те не са толкова сигурни, колкото Винаги криптирани . Например криптирането на симетричен ключ се използва за криптиране на данни от страна на базата данни. Недостатък на този подход е, че ако някой друг администратор на база данни има ключа за декриптиране, той може да получи достъп до данните.
От друга страна, в случай на Винаги шифровани , данните се криптират от страна на клиента и сървърът на базата данни получава шифрована версия на данните. Следователно данните не могат да бъдат дешифрирани в края на базата данни. Само клиентът, който е криптирал данните, може да ги дешифрира.
Типове ключове
Функцията SQL Server Always Encrypted използва два типа ключове:
Ключ за шифроване на колона (CEK)
Винаги се поставя на сървъра на базата данни. Данните всъщност са криптирани с помощта на колона CEK. Въпреки това, ако някой от страната на базата данни има достъп до CEK, той може да декриптира данните.
Главен ключ на колоната (CMK)
Този ключ се поставя от страна на клиента или от хранилище на трета страна. CMK се използва за защита на CEK, добавяйки допълнителен слой сигурност. Всеки, който има достъп до CMK, може действително да дешифрира CEK, който след това може да се използва за дешифриране на действителните данни.
Типове криптиране
Детерминистично
Този тип криптиране винаги ще генерира подобен криптиран текст за същия тип данни. Ако искате да приложите търсене и групиране в колона на таблица, използвайте детерминирано криптиране за тази колона.
Произволно
Произволното криптиране ще генерира различен криптиран текст за един и същи тип данни, когато се опитате да шифровате данните. Използвайте произволно криптиране, ако колоната не се използва за групиране и търсене.
Конфигуриране Винаги шифровани Използване на SSMS
Можем да конфигурираме SQL Server винаги криптиран чрез SSMS. Но преди това трябва да създадем база данни и да добавим таблица към базата данни. За да направите това, изпълнете следния скрипт:
CREATE DATABASE SchoolUse SchoolCREATE TABLE Студент ( StudentId int identity(1,1) първичен ключ, име varchar(100), Password varchar(100) COLLATE Latin1_General_BIN2 не е null, SSN varchar(20) COLLATE Latin1_General_BIN2) не null>В скрипта по-горе създаваме нова база данни с име Училище . Базата данни има четири колони:StudentId , Име , Парола и SSN . Можете да видите, че колоните Password и SSN имат COLLATE. Необходимо е да посочите COLLATE за колоната, която искате Винаги криптирана . Типът на криптиране е посочен като „Latin1_General_BIN2“.
Нека сега първо опитаме да добавим два записа в таблицата Student.
вмъкнете в ученик (име, парола, SSN)VALUES ('John','abc123', '451236521478'),('Mike','xyz123', '789541239654')Към този момент не сме конфигурирали Винаги шифровани на която и да е от колоните в таблицата Student, следователно, ако се опитате да изберете записите от таблицата Student, ще видите действителните стойности на данните, а не криптираните стойности. Изпълнете следната заявка, за да изберете записи:
ИЗБЕРЕТЕ * ОТ СтудентРезултатът изглежда така:
Нека сега да конфигурираме SSMS, за да активираме Винаги криптиран . Както казахме по-рано, Винаги криптиран създава ключове за криптиране на колони и главни ключове на колони.
За да видите съществуващите ключове за криптиране на колони и главни ключове на колони, за училищната база данни, отидете на Бази данни -> Училище -> Сигурност -> Винаги криптирани ключове, както е показано на следната фигура:
Тъй като нямате криптиран запис в набора от данни, няма да видите CEK или CMK в списъка.
Нека сега да активираме криптирането в колоните Password и SSN на таблицата Student. За да направите това, щракнете с десния бутон върху Бази данни -> Училище. От падащото меню изберете Шифроване на колони опция, както е показано на фигурата по-долу:
Щракнете върху Напред бутон на Въведение прозорец. От Избор на колона прозорец, проверете колоните за парола и SSN. За колоната Парола изберете типа на криптиране като Произволно . За колона SSN изберете Детерминистичен . Това е показано на следната екранна снимка:
Щракнете върху Напред бутон на Конфигурация на главния ключ прозорец. По подразбиране главният ключ се съхранява на клиентската машина, както е показано по-долу:
Щракнете върху Напред бутон в Настройки за стартиране и Резюме прозорци. Ако всичко върви добре, трябва да видите следните Резултати прозорец.
Сега, ако отново отидете на Бази данни -> Училище -> Сигурност -> Винаги криптирани ключове, трябва да видите новосъздадените CEK и CMK, както е показано на следната фигура:
Сега опитайте да изберете записи от таблицата Student.
ИЗБЕРЕТЕ * ОТ СтудентРезултатът изглежда така.
От изхода можете да видите, че колоните Password и SSN са криптирани.
Извличане на декриптирани данни
Заявката SELECT върна криптирани данни. Ами ако искате да извлечете данни в декриптиран вид? За да направите това, създайте нов прозорец за заявка в SSMS и след това щракнете върху Промяна на връзката икона в горната част на Object Explorer, както е показано на следната фигура:
Ще се появи прозорец за връзка със SQL Server. Изберете Опции бутон от долния десен ъгъл, както е показано по-долу:
От прозореца, който се показва, щракнете върху Допълнителни параметри на връзката раздел от горния ляв ъгъл и въведете „Настройка за шифроване на колона =активирана“ в текстовото поле, както е показано на следващата екранна снимка. Накрая щракнете върху Свързване бутон.
Сега отново изпълнете следната SELECT заявка:
ИЗБЕРЕТЕ * ОТ СтудентВ резултатите ще видите записите, върнати в декриптиран вид, както е показано по-долу:
Заключение
Винаги E шифровано е една от най-новите функции за сигурност на SQL Server. В тази статия прегледахме накратко какво Винаги E шифровано е и как да го активирате с помощта на SQL Server Management Studio. Видяхме и основен пример за криптиране и декриптиране на данни с помощта на Винаги E шифровано функция.