ЛР №10
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Национальный исследовательский университет «МИЭТ»
Факультет «Микроприборы и системы управления» (МПСУ)
Кафедра «Вычислительная техника» (ВТ)
Лабораторная работа №10 по дисциплине
«Базы данных»
Тема: «Пользователи и роли в SQL Server»
Цель работы: получить навыки создания пользователей, назначения им ролей и привилегий в MS SQL Server.
Продолжительность работы: 4 часа.
Выполнила студентка группы «ИВТ-44»: Никитина София Геннадьевна
Преподаватель: Немченко Дмитрий Игоревич
2021 г.
Содержание
Выполнение работы 3
Задание 1 3
Задание 2 6
Задание 3 7
Вывод 6
Выполнение работы
Задание 1. Для базы данных, созданной на Л.р.№№7-9, на основании выделенных при проектировании ИЛМ в рамках Л.р.№2 пользователей и их информационных потребностей, сформировать при помощи SQL-запросов соответствующие им роли, запросы занести в отчет.
Задание 2. Внести в БД (и в отчет) функции, позволяющие:
- добавлять новых пользователей и назначать им данные роли;
- переназначать пользователям роли;
- удалять пользователей при условии, что они имеют заданную роль. Задание 3. Проверить работоспособность созданных функций и занести результат в отчет.
Рисунок 1. ИЛМ базы данных.
Задание 1
Выберем ранее созданную БД для дальнейшей работы с ней.
USE [БД№7]
Создадим пользователей на сервере с логином и паролем.
EXEC sp_addlogin 'AngryAunt', '1111', 'БД№7'
EXEC sp_addlogin 'AngryUncle', '2222', 'БД№7'
EXEC sp_addlogin 'SadBoy', '3333', 'БД№7'
Рисунок 2. Пользователи на сервере.
Добавим роли бухгалтера, декана и студента в нашу базу данных. db_owner – роль владельца базы данных. С его подключением он может управлять привилегиями для этих ролей.
EXEC sp_addrole 'accountant', db_owner
EXEC sp_addrole 'dean', db_owner
EXEC sp_addrole 'student', db_owner
Рисунок 3. Роли в базе данных.
Подключим пользователей к базе данных посредством заданной роли.
EXEC sp_adduser 'AngryAunt', 'ТамараВасильевна', 'accountant'
EXEC sp_adduser 'AngryUncle', 'ДеканДеканович', 'dean'
EXEC sp_adduser 'SadBoy', 'НикитаЛитвинков', 'student'
Рисунок 4. Пользователи в базе данных.
Студенту необходимо подавать документы на льготу, прописывать дату выдачи и т.п. Пропишем право на добавление и обновление для всей таблицы.
GRANT Select, Update, Insert ON Льгота
TO student;
Декану предоставляется право на обновление данных, назначенных бухгалтером, в случае изменения количества студентов, групп и т.д., а также сведения о студентах
GRANT Select, Update ON Факультет
TO dean;
GRANT Select, Update ON Группа
TO dean;
GRANT Select ON Студент
TO dean;
Бухгалтеру предоставляются все привилегии к каждой из таблиц, чтобы контролировать изменение данных, составлять учет по всем таблицам. Однако бухгалтеры не могут изменять льготу у студентов, только просматривать.
GRANT ALL PRIVILEGES ON Студент
TO accountant;
GRANT ALL PRIVILEGES ON Родственник
TO accountant;
GRANT ALL PRIVILEGES ON ВидРодственника
TO accountant;
GRANT ALL PRIVILEGES ON Группа
TO accountant;
GRANT ALL PRIVILEGES ON Факультет
TO accountant;
GRANT Select ON Льгота
TO accountant;
Задание 2
Добавим еще пользователя.
EXEC sp_addlogin 'VeryAngryAunt', '4444', 'БД№7'
Назначим его бухгалтером.
EXEC sp_adduser 'VeryAngryAunt', 'ВалентинаМихайловна', 'accountant'
Переназначим роль. Для этого удалим его из роли.
EXEC sp_droprolemember 'accountant', 'ВалентинаМихайловна'
Создадим новую роль.
EXEC sp_addrole 'test', db_owner
Назначим бывшему бухгалтеру роль «тест».
EXEC sp_addrolemember 'test', 'ВалентинаМихайловна'
Убедимся в этом:
Рисунок 5. Назначение новой роли.
C помощью курсора @pers и временной таблицы #person удалим пользователей, имеющих роль “test”
CREATE TABLE #person (DBrole varchar(60) NOT NULL, MBname varchar(60), SSID varchar(100))
INSERT INTO #person
EXEC sp_helprolemember 'test'
DECLARE @pers varchar(60)
SELECT @pers = (SELECT MBname from #person)
EXEC sp_droprolemember 'test', @pers
EXEC sp_dropuser @pers
DROP TABLE #person;
При повторном обращении возникает ошибка. Следовательно, пользователь удален.
Рисунок 6. Ошибка отсутствия роли и пользователя.
Задание 3
Зайдем в систему как студент и попробуем изменить таблицу Студент.
EXECUTE AS LOGIN = 'SadBoy'
Update Студент SET Пол = 'мужской' WHERE Фамилия = 'Литвинков'
Выдается ошибка, т.к. нет разрешения.
Рисунок 7. Ошибка из-за недоступности привилегий.
Попробуем изменить то, что разрешено.
Рисунок 8. Таблица «Льгота» до изменения.
EXECUTE AS LOGIN = 'SadBoy'
Update Льгота SET ДатаВыдачи = '20000506' WHERE НомерСтуденческого = '1032'
Изменение прошло успешно.
Рисунок 9. Таблица «Льгота» после изменения.
Вывод
Получили навыки создания пользователей, назначения им ролей и привилегий в MS SQL Server.