
1 / 8
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
Кафедра 41
ПРЕПОДАВАТЕЛЬ
Доцент, канд. техн. наук |
|
|
|
Е. Л. Турнецкая |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
Лабораторная работа №8
Пользовательские привилегии
по курсу: Базы данных
СТУДЕНТКА ГР. № |
Z0411 |
|
14.05.23 |
|
М. В. Карелина |
|
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Номер студенческого билета: 2020/3477
Санкт-Петербург
2023
Цель работы:
получение практических навыков по администрированию СУБД MySQL
Порядок выполнения работы
1. Внимательно изучите материалы раздела.
2. Выполните упражнения по администрированию СУБД с помощью консольного клиента и программными средствами приложения MySQL Workbench.
3. Выявите на основе анализа предметной области выбранного варианта не менее трех пользователей с разными привилегиями, в частности, администратор БД, аналитик, бухгалтер, рядовой пользователь. Опишите в текстовом или табличном формате права каждого по доступу к БД, в частности, полный спектр прав, на доступ к конкретной таблице, на модификацию объектов БД и т.д.
4. Назначьте права доступа каждому пользователю. Среду выполнения администрирования выберите самостоятельно. Команды в отчете должны быть представлены в текстовом формате. Результаты их выполнения в виде скриншотов с поясняющими подписями. Не забывайте вручную обновлять настройки сервера, чтобы продемонстрировать изменения. В обязательном порядке должны присутствовать следующие команды.
4.1. Создание пользователя
CREATE USER 'user2' IDENTIFIED BY '123456';
Присвоение всех привилегий во всех БД и таблицах
4.2. Создание пользователя без привилегий
CREATE USER 'user3' IDENTIFIED BY '123456';
GRANT USAGE ON *.* TO user3 WITH GRANT OPTION;
4.3. Просмотр прав пользователей
USE mysql;
SELECT * FROM user;
4.4. Передача выборочных прав пользователю
GRANT SELECT,INSERT, UPDATE,DELETE, CREATE, ALTER, DROP
ON *.*
TO user2
WITH GRANT OPTION;
4.5. Удаление привилегий для одного пользователя.
REVOKE ALL PRIVILEGES ON *.* FROM 'user2';
5. Создайте 2 роли и назначьте на них пользователей: один пользователь на одну роль и несколько - на другую.
6. Покажите список ролей на доступ к БД.
7. Добавьте еще две команды самостоятельно.
Вариант 8
Обслуживание рейсов в аэропорту
Аэропорт обслуживает рейсы разных авиакомпаний. У каждой авиакомпании есть несколько рейсов. Авиакомпании предоставляют самолеты различного типа (вместимости). Самолеты характеризуются типом, годом выпуска, количеством мест и фирмой-производителем. В один город могут быть несколько рейсов в разное время, осуществляемых различными авиакомпаниями. Самолеты обслуживаются экипажем: 27 командир корабля, второй пилот, штурман, бортинженер и стюардессы. О сотрудниках хранится следующая информация: Ф.И.О., должность, квалификация, экипаж. Рейс имеет свой номер, пункт отправления, пункт прибытия, время вылета, время в пути, тип самолета, название авиакомпании, обслуживающей данный рейс. Билет на самолет имеет свой номер и № рейса, ФИО пассажира, № места, стоимость, дата продажи, дата бронирования. Пассажир, приобретая билет на самолет, сообщает о себе паспортные данные. Клиент может забронировать билет по Интернету и выкупить его за 3 часа до вылета.
В данной лабораторной работе будет использована модель данных, спроектированная в прошлых работах (Рис. 1).
Рисунок 1 - Модель данных в среде MySQL Workbench
Важными функциями СУБД являются противодействие несанкционированному доступу к БД и обеспечение безопасного хранения данных, основанные многоуровневой системы обеспечения безопасности.
Пользователи, имеющие доступ к данным, объединены в группы с определенными ролями: администратор данных, администратор БД, пользователь БД, гость и т.д. При подключении нового пользователя ему назначают именно роль, права доступа которой будут определять пользовательские привилегии.
Привилегия (privilege) – разрешение на использование определенной услуги управления данными для доступа к объекту данных, предоставляемое идентифицированному пользователю.
Роль – это именованная совокупность привилегий, которые могут быть предоставлены пользователям или другим ролям. В зависимости от уровня привилегий пользователи обладают разными правами на один и тот же объект: одни могут лишь просматривать данные, другие – только добавлять, третьи – осуществлять чтение, вставку и запись.
Упражнение. Просмотр всех пользователей с помощью системной таблицы БД mysql.
Откроем консольный клиент Command Line Client – Unicode.
Введем пароль (Рис. 2) и начнем взаимодействие с сервером.
Рисунок 2 - Подключение к серверу
Используем системную БД mysql, в которой указаны все авторизованные пользователи (Рис. 3):
mysql> use mysql;
Database changed
mysql> select user, host from user;
Рисунок 3 - Просмотр авторизованных пользователей
Выполним команду:
mysql> SELECT * FROM mysql.user\G;
Фрагменты ответа сервера показаны на Рис. 4-5.
mysql> SELECT * FROM mysql.user\G;
Рисунок 4 - Фрагмент ответа сервера по привилегиям пользователя Gviqli
Рисунок 5 - Фрагмент ответа сервера по привилегиям пользователя root
Посмотрим список глобальных привилегий (Рис. 6):
SELECT * FROM information_schema.user_privileges;
Рисунок 6 - Просмотр глобальных привилегий
Выведем список привилегии на базы данных (Рис. 7):
mysql> SELECT * FROM mysql.db\G;
Модификатор \G оптимизирует вывод для отображения в консоли.
Рисунок 7 - Фрагмент списка привилегии на базы данных
Просмотрим права, назначенные на таблицы (Рис. 8).
SELECT * FROM mysql.tables_priv;
Рисунок 8 - Права пользователей на таблицы
Посмотрим права, назначенные на поля (Рис. 9).
SELECT * FROM mysql.columns_priv;
Рисунок 9 - Отсутствие прав доступа пользователей к полям
Упражнение. Проверка полномочий к данным через БД information_schema.
Через БД information_schema, доступной только для чтения, узнают множество метаданных – системной информации. Информация о доступе на БД (схемы), таблицы и столбцы доступны в таблицах schema_privileges, table_privileges и column_privileges.
Выполним запрос по проверке привилегий к БД (Рис. 10).
SELECT * FROM information_schema.schema_privileges;
Рисунок 10 - Просмотр привилегий к БД information_schema
Выполним запрос по проверке привилегий по доступу к таблицам БД information_schema (Рис. 11).
SELECT * FROM information_schema.table_privileges;
Рисунок 11 - Просмотр прав доступа к таблицам БД information_schema
Выполним запрос по проверке привилегий по доступу к полям БД.
SELECT * FROM information_schema.column_privileges;
Рисунок 12 - Отсутствие привилегий по доступу пользователей к полям
Выполним запрос по проверке привилегий по доступу к таблицам этой БД для конкретного пользователя, например, mysql.sys@localhost (Рис. 13).
SELECT * FROM information_schema.column_privileges WHERE GRANTEE="'mysql.sys'@'localhost' ";
Рисунок 13 - Отсутствие привилегий по доступу пользователя к полям
Упражнение. Предоставление доступа пользователю MySQL
Доступ предоставляется командами:
GRANT SELECT
ON `some_db`.*
TO 'some_user'@'somehost.somedomain';
FLUSH PRIVILEGES;
Создадим БД test_db. Добавим пользователя test_user, который работает только на локальном сервере (localhost) с правами на выполнение выборок данных из БД с помощью инструкции SELECT.
CREATE SCHEMA testt_DB;
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'secrett';
Выполним команды для предоставления доступа (Рис. 14).
GRANT SELECT ON `testt_DB`.* TO 'test_user'@'localhost';
FLUSH PRIVILEGES;
Рисунок 14 - Реализация прав пользователя test_user@localhost
Проверим запись о наличии нового пользователя в БД mysql (Рис. 15).
USE mysql;
SELECT user, host FROM user;
Рисунок 15 - Запись о новом пользователе в системной БД mysql
Упражнение. Проверка текущих полномочий пользователя.
Часто возникает задача выяснить полномочия учетной записи или определить, кому предоставлен доступ к базе или таблице.
Для просмотра привилегий выполним команду (Рис. 16).
USE testt_db;
SHOW GRANTS FOR 'test_user'@'localhost';
Рисунок 16 - Список привилегий пользователя test_user@localhost
Предоставим права на таблицу table_users.
Добавим в БД новую таблицу:
CREATE TABLE `testt_db`.`table_userss` (id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(20) NOT NULL, password VARCHAR(32));
Выдадим права доступа пользователю.
GRANT SELECT ON `testt_db`.`table_userss` TO 'test_user'@'localhost';
Предоставим доступ к столбцу:
GRANT SELECT (id, user_name), UPDATE (user_name) ON `testt_db`.`table_users` TO 'test_user'@'localhost';
В этом примере пользователю дано право читать идентификатор, читать и менять имя пользователя, а парольный хэш доступен не будет.
Проверим права пользователя (Рис. 17).
SHOW GRANTS FOR 'test_user'@'localhost'\G;
Рисунок 17 - Просмотр новых привилегий пользователя test_user@localhost
Упражнение. Смена пароля.
Для изменения пароля учетной записи пользователя применим команду ALTER USER (Рис. 18):
ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'new_password';
Рисунок 18 - Смена пароля
Упражнение. Отзыв полномочий у пользователя.
REVOKE SELECT ON 'somedb'.* FROM 'someuser'@'somehost';
***************************
REVOKE ALL PRIVILEGES ON 'somedb'.* FROM 'someuser'@'somehost';
***************************
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'someuser'@'somehost';
Отзовем все привилегии у пользователя 'test_user'@'localhost'
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'test_user'@'localhost';
Проверим права пользователя (Рис. 19).
SHOW GRANTS FOR 'test_user'@'localhost'\G;
Рисунок 19 - Удаление прав пользователя
Упражнение. Удаление пользователя.
Для удаления пользователя используется команда
DROP USER 'some_user'@'somehost.somedomain';
Выполним команды по удалению пользователя:
DROP USER 'test_user'@'localhost';
FLUSH PRIVILEGES;
Проверим список пользователей в системной БД mysql (Рис. 20):
use mysql;
select user, host from user;
Рисунок 20 - Результат выполнения команды по удалению пользователя
Упражнение. Реализация БД на сервере на принципах low-code
Запустим MySQL Workbench.
Осуществим подключение к серверу БД графического клиента MySQL Workbench. Перейдем на вкладку подключения.
На панели Shemas нажмем ПКМ и в контекстном меню выберем Create Shemas (Рис. 21).
Рисунок 21 - Создание новой схемы данных
В открывшемся окне введем название новой БД: new_schema и выставим следующие параметры (Рис. 22).
Charset:utf8, Collation:utf8_general_ci.
Рисунок 22 - Определение параметров новой БД new_schema
Нажмем кнопку Apply. После автогенерации программного кода по созданию БД нажмем Apply. В новом окне мастера генерации скрипта выведена информация об успешном выполнении команды: Execute SQL Statements. Нажмем Finish.
Обновим список БД на сервере и найдите в нем созданную БД (Рис. 23).
Рисунок 23 - Результат создания БД на принципах low-code
Упражнение. Администрирование пользователей в среде MySQL Workbench
Перейдем на вкладку Administration (Рис. 24).
Рисунок 24 - Вкладка Administration
В разделе MANAGMENT активируем Users and Privileges (Рис. 25). На рисунке показано, что пользователь root обладает привилегией подключения с localhost во время сеанса с сервером.
Рисунок 25 - Исходные данные по пользователям и привилегиям
Добавим нового пользователя по доступу к БД new_schema. Нажмем на кнопку Add Account.
На вкладке Login установим параметры для нового пользователя, введя имя пользователя NARUTO и пароль (Рис. 26).
Рисунок 26 - Установка параметров для подключения нового пользователя
Перейдем на вкладку Administrative Roles (Рис. 27). Изучим списки предлагаемых по умолчанию ролей пользователя и глобальных привилегий. Для выбора ролей пользователя достаточно поставить галочку в чекбокс напротив названия роли. Ничего не отмечаем на этой вкладке, только внимательно изучим предлагаемые варианты.
Рисунок 27 - Список предлагаемых по умолчанию ролей пользователя
Перейдем на вкладку Shemas Privileges, чтобы самостоятельно определить набор привилегий нового пользователя. Добавление привилегий происходит в несколько этапов.
Нажмем на кнопку Add Entry.
Выберем БД из выпадающего списка всех БД на сервере ту, к которой будет доступ у нового пользователя, в частности new_schema (Рис. 28).
Рисунок 28 - Выбор БД, на которую будут выданы разрешения пользователю
Определим разрешения (Рис. 29) и нажмем Apply.
Рисунок 29 - Установление прав на манипулирование и создание объектов БД
Откроем вкладку для создания нового запроса.
Выполним команды:
use new_schema;
SHOW GRANTS FOR 'NARUTO'@'%';
На Рис. 30 показан результат выполнения инструкций.
Рисунок 30 - Просмотр прав пользователя newuser на работу с БД
Таким образом, рассмотрены варианты администрирования СУБД MySQL двумя способами: с помощью консольного клиента и программными средствами приложения MySQL Workbench.
Теперь на основе анализа предметной области Автосалон выявим троих пользователей с разными привилегиями: администратор БД, который занимается поддержкой данной ИС и обладает всеми привилегиями, операционный директор, который ведет учет сотрудников, определяет им заработную плату, а также вносит в базу информацию о поступлениях товара в автосалон, продавец-консультант, который должен обладать информацией о наличии товара на складе и его количестве, а также добавлять в базу информацию о сделках и клиентах и бизнес-аналитик, который может только просматривать данные (и пользоваться процедурами и функциями).
Создадим этих пользователей и назначим права доступа каждому пользователю. Для этого воспользуемся программными средствами приложения MySQL Workbench.
Создание администратора БД:
use `аэропорт`;
create user 'admin'@'localhost' identified by 'admin';
grant all privileges on `аэропорт`.* to 'admin'@'localhost';
Создание операционного директора:
use `аэропорт`;
create user 'director'@'%' identified by 'director';
grant select, insert, update, delete, trigger on `аэропорт`.`сотрудники` to 'director'@'%';
grant select, insert, update, delete, trigger on `аэропорт`.`скидка` to 'director'@'%';
grant select, insert, update, delete, trigger on `аэропорт`.`авиакомпания` to 'director'@'%';
grant select, insert, update, delete, trigger on `аэропорт`.`самолет` to 'director'@'%';
grant select, insert, update, delete, trigger on `аэропорт`.`рейс` to 'director'@'%';
grant select on `аэропорт`.`билет` to 'director'@'%';
grant select on `аэропорт`.`пассажиры` to 'director'@'%';
grant execute on `аэропорт`.* to 'director'@'%';
Создание менеджера по продажам:
use `аэропорт`;
create user 'salesman'@'%' identified by 'salesman';
grant select on `аэропорт`.`авиакомпания` to 'salesman'@'%';
grant select on `аэропорт`.`рейс` to 'salesman'@'%';
grant select on `аэропорт`.`самолет` to 'salesman'@'%';
grant select, insert, update, delete, trigger on `аэропорт`.`пассажиры` to 'salesman'@'%';
grant select, insert, update, delete, trigger on `аэропорт`.`билет` to 'salesman'@'%';
grant execute on `аэропорт`.* to 'salesman'@'%';
Создание аналитика:
use `аэропорт`;
create user 'analitic'@'%' identified by 'analitic';
grant select on `аэропорт`.* to 'salesman'@'%';
grant execute on `аэропорт`.* to 'analitic'@'%';
Просмотрим всех пользователей (Рис. 31).
USE mysql;
SELECT * FROM user;
Рисунок 31 - Просмотр всех пользователей и их прав
Заберем у бизнес-аналитика все права, а потом «уволим» его и заблокируем ему доступ в БД.
REVOKE ALL PRIVILEGES ON `аэропорт`.* FROM 'analitic'@'%';
DROP USER 'analitic'@'%';
FLUSH PRIVILEGES;
Просмотрим теперь всех пользователей (Рис. 32).
USE mysql;
SELECT * FROM user;
Рисунок 32 - Просмотр всех пользователей и их прав
Создадим пользователя без привилегий, а затем удалим его.
CREATE USER 'kiba'@'%' IDENTIFIED BY '1234';
GRANT USAGE ON *.* TO 'kiba'@'%' WITH GRANT OPTION;
DROP USER 'kiba'@'%';
FLUSH PRIVILEGES;
Создадим две роли – директор и менеджера по продажам – и назначим на роль директора одного пользователя, а на роль менеджера – двоих пользователей (из уже созданного списка продавцов:
use `аэропорт`;
create role if not exists 'director';
grant select, insert, update, delete, trigger on `аэропорт`.`самолет` to 'director';
grant select, insert, update, delete, trigger on `аэропорт`.`скидка` to 'director';
grant select, insert, update, delete, trigger on `аэропорт`.`рейс` to 'director';
grant select, insert, update, delete, trigger on `аэропорт`.`сотрудники` to 'director';
grant select, insert, update, delete, trigger on `аэропорт`.`авиакомпания` to 'director';
grant select on `аэропорт`.`пассажиры` to 'director';
grant select on `аэропорт`.`билет` to 'director';
grant execute on `аэропорт`.* to 'director';
create role if not exists 'salesman';
grant select, trigger on `аэропорт`.`авиакомпания` to 'salesman';
grant select on `аэропорт`.`рейс` to 'salesman';
grant select on `аэропорт`.`самолет` to 'salesman';
grant select, insert, update, delete, trigger on `аэропорт`.`пассажиры` to 'salesman';
grant select, insert, update, delete, trigger on `аэропорт`.`билет` to 'salesman';
grant execute on `аэропорт`.* to 'salesman';
create USER 'hokage'@'%' IDENTIFIED BY 'lista';
CREATE USER 'aburame'@'%' IDENTIFIED BY 'shino';
CREATE USER 'nara'@'%' IDENTIFIED BY 'shikamaru';
GRANT 'director' TO 'hokage'@'%';
GRANT 'salesman' TO 'aburame'@'%', 'nara'@'%';
Рисунок 33 - Список ролей и пользователей
Вывод
В ходе выполнения данной лабораторной работы были получены практические навыки по администрированию СУБД MySQL с помощью консольного клиента и программными средствами приложения MySQL Workbench. На основе анализа предметной области Аэропорт было выявлено четыре пользователя с разными привилегиями: администратор БД, который занимается поддержкой данной ИС и обладает всеми привилегиями, операционный директор, который ведет учет сотрудников и вносит в базу информацию о самолетах, рейсах и авиакомпаниях, менеджер по продажам, который должен обладать информацией о пассажирах, рейсах, самолетов и авиакомпаниях, а также оформлять билеты. Также мы создали две роли и назначили на них созданных пользователей.
Особых проблем при выполнении данных работ не возникло.