CREATE USER Login1 FOR LOGIN Login1
GO
Примечание
Создание объекта пользователя можно также произвести при помощи графического интерфейса — из контейнера Databases à AdventureWorks à Security àUsers в Object Explorer.
60. Чтобы предоставить созданному пользователю Login1 права на чтение для объектов схемы HumanResources, можно выполнить код:
GRANT SELECT ON SCHEMA::HumanResources TO Login1
Примечание
При помощи графического интерфейса эту операцию можно произвести на вкладке Permissions свойств объекта схемы HumanResources в контейнере Databases | AdventureWorks | Security | Schemas в Object Explorer.
4. Для проверки полученных прав можно подключиться от имени логина Login1 (в меню File àNew выбрать Database Engine Query и открывшемся окне ввести имя пользователя и пароль для логина Login1). Затем в открывшемся от имени Login1 окне редактора кода ввести и выполнить запрос, например:
USE adventureworks
GO
SELECT * FROM HumanResources.Employee
Для пользователя Login1 запрос будет выполнен успешно. Если вы попробуете выполнить такой запрос от имени пользователя Login2, то вернется ошибка.
К пункту 3 - предоставление права на выполнение команды EXECUTE AS:
5. Для того, чтобы предоставить право логину Login2 выполнять команды от имени логина Login2, можно выполнить следующий код (от имени администратора сервера):
Use master
GO
GRANT IMPERSONATE ON LOGIN::Login1 TO Login2
GO
Примечание
При помощи графического интерфейса такое предоставление прав можно произвести из свойств логина Login2 (не Login1!) на вкладке Securables.
6. Для проверки успешности предоставленных прав и изменения контекста выполнения можно выполнить следующий запрос (его нужно выполнить, подключившись к серверу от имени логина Login2):
EXECUTE AS LOGIN = 'Login1';
GO
USE Adventureworks
GO
SELECT * FROM HumanResources.Employee;
GO
Задание для самостоятельной работы 4.2 Шифрование информации в таблицах баз данных
Ситуация:
В соответствии с новой политикой вашей организации информация о заработной плате сотрудникам за предыдущие периоды должна храниться только в зашифрованном виде с использованием алгоритма шифрования AES с длиной ключа не менее 256 бит.
Задание:
61. Создайте в базе данных AdventureWorks симметричный ключ PayKey для применения с алгоритмом AES_256. Ключ должен быть защищен паролем P@ssw0rd.
62. Создайте в базе данных AdventureWorks копию таблицы HumanResources.EmployeePayHistory. Новая копия должна называться HumanResources.EmployeePayHistoryEncrypted, и все данные в ней должны быть зашифрованы при помощи созданного вами симметричного ключа.
63. Выполните запрос, который бы вернул все данные из зашифрованной таблицы HumanResources.EmployeePayHistoryEncrypted.
Примечание
Зашифрованную информацию нельзя поместить в столбцы типа Int, Money и т.п. Поэтому создание таблицы EmployeePayHistoryEncrypted придется производить вручную. Для целей этого задания используйте для всех столбцов этой таблицы один и тот же тип данных — nvarchar(100). Кроме того, несимвольные типы данных необходимо преобразовать в символьные (например, nvarchar(100)) перед передачей их шифрующей функции.
Решение:
К пункту 1 — создание симметричного ключа:
Команда на создание симметричного ключа в соответствии с поставленными условиями может выглядеть так:
USE AdventureWorks
GO
CREATE SYMMETRIC KEY PayKey WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD = 'P@ssw0rd'
К пункту 2 — создание зашифрованной копии таблицы:
Код для создания зашифрованной копии таблицы HumanResources.EmployeePayHistory может выглядеть так:
USE AdventureWorks
GO
-- Создаем таблицу для вставки шифрованных данных
|