Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Серверы БД лабораторные1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
74.24 Кб
Скачать

Лабораторная работа №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).