- •Лабораторная работа №1 Установка именованного экземпляра sql Server 2005.
- •Лабораторная работа №2 Работа со скриптами в sql Server Management Studio sqlCmd.
- •Лабораторная работа №3 Работа с утилитой bcp.Exe в Microsoft sql Server 2005.
- •Лабораторная работа №4 Перенос файлов баз данных.
- •Лабораторная работа №5 Создание базы данных при помощи команды create database. Использование файловых групп для оптимизации работы базы данных.
- •Лабораторная работа №6. Увеличение размера базы данных.Уменьшение размера базы данных.
- •Лабораторная работа №7. Назначение прав на обекты sql Server 2005.
- •Лабораторная работа №8. Шифрование информации в таблицах баз данных sql Server 2005.
- •Лабораторная работа №9. Резервное копирование и восстановление базы данных.
Лабораторная работа №8. Шифрование информации в таблицах баз данных sql Server 2005.
Задание:
В соответствии с новой политикой организации, информация о заработной плате сотрудникам за предыдущие периоды должна храниться только в зашифрованном виде с использованием алгоритма шифрования AES с длиной ключа не менее 256 бит.
Для этого:
1. Создать в базе данных AdventureWorks симметричный ключ PayKeyдля применения с алгоритмом AES_256. Ключ должен быть защищён паролем P@ssw0rd.
2. Создать в этой базе данных копию таблицы HumanResources.EmployeePayHistory. Новая копия должна называться HumanResources.EmployeePayHistoryEncrypted и все данные в ней должны быть зашифрованы при помощи созданного Вами симметричного ключа.
3. Выполнить запрос, который бы вернул все данные из зашифрованной таблицы HumanResources.EmployeePayHistoryEncrypted
Примечание:
Зашифрованную информацию нельзя поместить в стобцы типа int, money и т.п. Поэтому создание таблицы HumanResources.EmployeePayHistoryEncrypted придётся производить вручную. При этом можно использовать для всех столбцов этой таблицы один и тот же тип данных — nvarchar(100). Кроме того, несимвольные типы данных необходимо преобразовать в символьные (например, nvarchar(100)) перед передачей их шифрующей функции.
Решение:
К пункту 1 задания - создание симметричного ключа:
Команда на создание симметричного ключа в соответствии с поставленными условиями может выглядеть так:
USE AdventureWorks;
GO
CREATE SYMMETRIC KEY PayKey
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = 'P@ssw0rd;
GO
Убедитесь, используя SQL Server Management , что ключ был успешно создан:
Databases → AdventureWorks → Security → Symmetric Keys.
К пункту 2 задания - создание зашифрованной копии таблицы:
Команда для создания зашифрованной копии таблицы HumanResources.EmployeePayHistoryможет выглядеть так:
USE AdventureWorks;
GO
-- Создаём таблицу для вставки шифрованных данных
CREATE TABLE HumanResources.EmployeePayHistoryEncrypted
(EmployeeID nvarchar(100),
RateChangeDate nvarchar(100),
Rate nvarchar(100),
PayFrequency nvarchar(100),
ModifiedDate nvarchar(100));
GO
-- Открываем симметричный ключ
OPEN SYMMETRIC KEY PayKey DECRYPTION BY PASSWORD = 'P@ssw0rd';
GO
-- Вставляем данные в таблицу при помощи INSERT INTO
INSERT INTO AdventureWorks.HumanResources.EmployeePayHistoryEncrypted
(EmployeeID, RateChangeDate, Rate, PayFrequency, ModifiedDate)
SELECT
EncryptByKey(Key_GUID('PayKey'), CONVERT(nvarchar(100), EmployeeID)),
EncryptByKey(Key_GUID('PayKey'), CONVERT(nvarchar(100), RateChangeDate)),
EncryptByKey(Key_GUID('PayKey'), CONVERT(nvarchar(100), Rate)),
EncryptByKey(Key_GUID('PayKey'), CONVERT(nvarchar(100), PayFrequency)),
EncryptByKey(Key_GUID('PayKey'), CONVERT(nvarchar(100), ModifiedDate))
FROM AdventureWorks.HumanResources.EmployeePayHistory;
GO
Убедитесь, что в таблице EmployeePayHistoryEncrypted данные таки да зашифрованы:
SELECT * FROM EmployeePayHistoryEncrypted;
GO
К пункту 3 задания - запрос к зашифрованным данным:
Запрос, возвращающий данные из нашей зашифрованной таблицы может выглядеть так:
OPEN SYMMETRIC KEY PayKey DECRYPTION BY PASSWORD = 'P@ssw0rd';
GO
SELECT
Convert(Nvarchar(100), DecryptByKey(EmployeeID)) AS EmployeeID,
Convert(Nvarchar(100), DecryptByKey(RateChangeDate)) AS RateChangeDate,
Convert(Nvarchar(100), DecryptByKey(Rate)) AS Rate,
Convert(Nvarchar(100), DecryptByKey(PayFrequency)) AS PayFrequency,
Convert(Nvarchar(100), DecryptByKey(ModifiedDate)) AS ModifiedDate
FROM AdventureWorks.HumanResources.EmployeePayHistoryEncrypted;
GO
Откройте новую сессию подключения к Вашему SQL Server и выполните этот же запрос на выборку (SELECT ...),но без открытия симметричного ключа (OPEN SYMMETRIC KEY...)
Примечание:
В реальной жизни, возможно, потребуется произвести дополнительные преобразования, чтобы вернуть информацию в виде значений с типами данных int, money и т.п. В этом примере для простоты все данные возвращаются как nvarchar(100).
