125 Кібербезпека / 4 Курс / 3.1_3.2_4.1_Захист інформації в інформаційно-комунікаційних системах / Лабораторнi роботи / 6 семестр / ЛР_ Захист iнформацiї в СУБД
.pdfЛабораторна робота
«ЗАХИСТ ІНФОРМАЦІЇ В СУБД. СИСТЕМА ПОВНОВАЖЕНЬ MYSQL»
Мета: створення та редагування повноважень користувачів для доступу до баз даних
MySQL.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Загальні питання захисту інформації в СУБД.
Серед трьох основних аспектів інформаційної безпеки – конфіденційність, цілісність, доступність – в контексті захисту інформації в СУБД на першому плані, безперечно, засоби захисту від несанкціонованого доступу до інформації (цілісність і доступність реалізуються переважно на інших рівнях ІКС).
Політика безпеки визначається адміністратором даних. Однак рішення захисту даних не мають обмежуватися лише рамками СУБД (див. рівні ІКС). Розмежування доступу до даних також описується в базі даних через обмеження, а інформація про це зберігається в її системному каталозі. Іноді додаткова інформація може бути отримана із операційної системи, в середовищі якої працює сервер баз даних і клієнт.
Зазвичай користувачі працюють з базами даних не напряму, а через клієнтський інтерфейс, а їх дії обмежені з метою забезпечення конфіденційності, цілісності і доступності даних, що зберігаються в базі даних, а також структури самої бази даних. СУБД розгортають в середовищі (локалізація, специфіка програмного середовища), яке приховане від користувачів, окрім адміністраторів мереж і баз даних.
Зрозуміло, що ризики зростають, якщо компанія підключає корпоративну мережу до Інтернет, надає доступ віддаленим користувачам до ресурсів внутрішньої мережі, надає все більше прав (привілеїв) зовнішнім суб’єктам.
Доступ до бази даних обмежується адміністратором з допомогою засобів контролю доступу і надається лише декільком ролям. При цьому кожній ролі будуть надані певні права і дозвіл. Ролі потім назначаються клієнтам та працівникам, тому користувач, якому не назначена жодна з ролей, не матиме доступу до БД.
Таким чином, якщо зловмисник зможе подолати захист міжмережевого екрану та інших механізмів захисту периметру мережі, та отримає можливість виконувати запити до БД, то за умови, що у нього не буде облікового запису, якому назначена одна із ролей, база даних все ще буде у безпеці. Цей процес спрощує управління доступом і гарантує, що жоден користувач (зловмисник) не зможе відразу отримати доступ до БД, а лише з допомогою облікового запису, якому назначена відповідна роль.
Повноваження користувачів в СУБД MySQL.
Система MySQL може містити багато користувачів. Користувач root з міркувань безпеки має використовуватись лише для адміністративних цілей. Кожен користувач, якому необхідно працювати в системі, має отримати обліковий запис і пароль. Вони не повинні співпадати із профілями за межами MySQL (наприклад, ім’я і пароль, які використовуються для входу в Linux чи Windows). Те саме стосується і до користувача root. Доцільно мати різні паролі для входу в систему і для MySQL, особливо, якщо мова іде про пароль користувача root.
Паролі для звичайних користувачів встановлювати не обов’язково, однак рекомендується. При створенні бази даних потрібно створити хоча б по одному обліковому записі користувача для кожної веб-програми.
MySQL підтримує досить складну систему повноважень. Повноваження – це право деякого користувача виконувати певні дії над деким об’єктом. Концепція схожа на ту, що
застосовують для прав доступу до файлів. Під час підключення користувача до MySQL йому надаються певні права, які позначають, що користувач може робити в системі, а що ні.
Принцип мінімально необхідних повноважень (привілеїв): користувач (або процес) мають володіти найменшим рівнем привілеїв, необхідними для виконання поставленого завдання. Наприклад, щоб виконати запит із веб, звичайному користувачеві не потрібні всі привілеї, якими наділено користувача root. Тому, потрібно створити ще одного користувача, якого буде наділено всіма необхідними привілеями для доступу до щойно створеної БД.
Налаштування користувачів: команда GRANT
Команди GRANT і REVOKE використовують для того, щоб надавати чи забирати права у користувачів MySQL на чотирьох рівнях привілеїв: 1) глобальний; 2) база даних; 3) таблиця; 4) стовпця.
Команда GRANT слугує для створення користувачів і надання їм привілеїв. Загальний вигляд команди:
GRANT privileges [columns] ON item
TO user_name [IDENTIFIED BY 'password'] [REQUIRE ssl_options]
[WITH [GRANT OPTION | limit_options] ]
Конструкції в квадратних дужках є необов’язковими.
privileges (повноваження), потрібно вказати через кому перелік привілеїв, чітко визначених в MySQL (перелік подано нижче).
columns (стовпці), можна використати для того, щоб назначити привілеї для конкретних стовпців, задавши або ім’я одного стовпця, або через кому список імен стовпців. item (елемент), може бути базою даних або таблицею, до якої застосовують нові привілеї. Вказавши на його місці « *.* » (або « * »), можна встановити повноваження для
всіх баз даних. Така дія називається призначенням глобальних повноважень user_name , ім’я користувача, під має здійснюватися вхід в MySQL. Важливо, щоб
воно не співпадало з іменем, під яким здійснено вхід в систему. Може також включати в себе ім’я хоста: username@hostname , що підвищить ступінь захищеності, оскільки є можливість вказати явно, звідки і до яких баз даних користувачі мають доступ.
password , пароль, необхідний для входу (дотримуватись правил використання паролів).
REQUIRE , вказує, що користувач повинен підключитись через SSL і передати додаткові опції для SSL.
WITH GRANT OPTION , дає право користувачеві надавати свої повноваження ін-
шим.
Замість WITH можна застосувати наступні конструкції:
MAX_QUERIES_PER_HOUR n
або
MAX_UPDATES_PER_HOUR n
або
MAX_CONNECTIONS_PER_HOUR n
З допомогою яких можна обмежити кількість запитів, обновлень або підключень, які користувач здатен ініціювати за голину. Корисні для обмеження завантаження індивідуальними користувачами спільно використовуваної системи.
Повноваження зберігаються в п’яти системних таблицях, розташованих в базі даних mysql : mysql.user, mysql.db, mysql.host, mysql.tables_priv, mysql. columns_priv . Замість ви-
користання команди GRANT допускається безпосередньо змінювати ці таблиці.
Типи і рівні повноважень.
В MySQL є три основних типи повноважень: звичайний користувач, адміністратор, спеціальні повноваження. Будь-який користувач може отримати будь-які повноваження.
Користувачам необхідні повноваження тільки для баз даних і таблиць, з якими вони працюють, Доступ до бази mysql має бути закритий для всіх, крім адміністратора, оскільки в ній зберігаються облікові записи користувачів, паролі.
Повноваження
SELECT
INSERT
UPDATE
DELETE
INDEX
ALTER
CREATE
DROP
Повноваження для користувачів
Застосовують до |
Опис |
|
таблиць |
Дозволяє отримувати записи із таблиць. |
|
стовпців |
||
|
||
таблиць |
Дозволяє вставляти нові записи в таблицю. |
|
стовпців |
||
|
||
таблиць |
Дозволяє змінювати значення в існуючих записах |
|
стовпців |
таблиць. |
|
таблиць |
Дозволяє видаляти існуючі записи в таблицях. |
|
таблиць |
Дозволяє створювати і видаляти індекси певних таб- |
|
лиць. |
||
|
||
|
Дозволяє змінювати структуру існуючих таблиць, до- |
|
таблиць |
даючи стовпці, перейменовуючи стовпці чи таблиці , |
|
|
змінювати тип даних в стовпцях. |
|
|
Дозволяє створювати нові бази даних або таблиці. |
|
|
Якщо командою GRANT позначена певна база даних |
|
баз даних |
або таблиця, користувач може тільки створювати ту |
|
таблиць |
чи іншу базу даних або таблицю, що передбачає спо- |
|
|
чатку її видалення. |
|
баз даних |
Дозволяє видаляти бази даних або таблиці. |
|
таблиць |
||
|
Окрім повноважень, перерахованих в таблиці, існують ще повноваження REFERENCES , EXECUTE , які тепер не застосовують, а також GRANT , які представлені опцією WITH GRANT OPTION, а не у списку privileges.
Повноваження
GREATE TEMPORARY TABLES
FILE
LOCK TABLES PROCESS
Повноваження для адміністраторів
Опис
Дозволяє використовувати ключове слово TEMPORARY в операторах
CREATE TABLE
Дозволяє поміщати в таблиці дані із файлів і навпаки. Дозволяє явне використання оператора LOCK TABLES.
Дозволяє переглядати серверні процеси, що стосуються усіх користувачів
RELOAD
REPLICATION CLIENT
REPLICATION SLAVE
SHOW DATABASES
SHUTDOWN SUPER
Дозволяє перезавантажувати таблицю привілеїв і приглушувати привілеї, хости, журнальні файли і таблиці.
Дозволяє використовувати SHOW STATUS на ведучих і ведених серверах реплікацій.
Дозволяє веденим серверам реплікації підключатися до ведучого сервера.
Дозволяє з допомогою оператора SHOW DATABASES отримувати список усіх баз даних . Без цього виводяться тільки бази даних, для яких існують інші привілеї.
Дозволяє зупиняти сервер MySQL.
Дозволяє видаляти потоки, що стосуються будь-якого користувача.
Існують також два спеціальних повноваження.
Повноваження для адміністраторів
Повноваження
ALL
USAGE
Опис
Надає всі привілеї, перераховані в талицях вище. Можна також ALL PRIVILEGES.
Не надає ніяких привілеїв. Подібним чином можна підключити користувача, дати йому можливість входити в систему, але без дозволу щонебудь робити. Зазвичай такий користувач з часом отримує певні привілеї.
Команда REVOKE.
Протилежною до команди GRANT є команда REVOKE, яка застосовується для позбавлення користувача повноважень:
REVOKE privileges [(columns)]
ON item
FROM user_name
Якщо повноваження були надані з конструкцією WITH GRANT OPTION, їх можна видалити (разом із іншими повноваженнями) наступним чином:
REVOKE ALL PRIVILEGES, GRANT
FROM user_name
Приклади використання команд GRANT і REVOKE
Для надання повноважень адміністратора можна набрати у консолі сервера MySQL (після знака «–>» відповідь сервера баз даних):
mysql> grant all -> on *
-> to botan identified by 'passl23' -> with grant option;
Ця команда надає користувачеві botan з паролем pass123 всі повноваження для всіх баз даних з правом передачі привілеїв іншим користувачам.
Якщо цей користувач в системі не потрібен, відмінити його повноваження можна
так:
mysql> revoke all -> on *
-> from botan;
Створити звичайного користувача trueman без будь-яких повноважень можна так (база даних books):
mysql> grant usage -> on books.*
-> to trueman identified by '987pass';
Для надання додаткових повноважень користувачеві trueman :
mysql> grant select, insert, update, delete, index, alter, create, drop
-> on books.* -> to trueman;
Зверніть увагу, що для надання повноважень не потрібно вказувати пароль користу-
вача trueman.
Якщо дії користувача trueman є некоректними, його повноваження можна обмежи-
ти:
mysql> revoke alter, create, drop -> on books. *
-> from trueman;
Якщо користувачу trueman взагалі не потрібно користуватись базою даних, то в нього можна забрати повноваження взагалі:
mysql> revoke all -> on books. *
-> from vlad;
ВИКОНАННЯ ЗАВДАНЬ
Завдання
1.Опрацювати теоретичні відомості.
2.Завантажити і налаштувати необхідне програмне забезпечення: інсталювати дистрибутив MySQL. (Рекомендується працювати в консолі. Якщо ж немає практики роботи
вконсолі, рекомендується завантажити один із наборів «джентльменського набору веброзробника» OpenServer, Denwer, XAMPP чи інший. Окрім власне сервера MySQL ці набори містять phpMyAdmin – браузерну утиліту для роботи із базами даних MySQL, а також веб-сервер, php-інтерпретарор для демонстрації результату запитів у вигляді простих веб-сторінок.)
3.Створити базу даних із двома таблицями (на вибір студента, наприклад, books із таблицями: book (поля: id, title, isbn, year, id_author, annotation, price), author (поля: id, firstname, lastname) ).
4. Створити користувачів із повноваженнями, які відображають такі ролі: А) boss – має змогу лише переглядати усю інформацію про книги;
Б) operator – дозволено тільки створювати та обновляти нові записи в обох таблицях;
В) guest – має змогу переглядати лише такі дані: title, year, annotation, author;
5.Побудувати SQL запити до бази даних і перевірити їх на виконання, які б демонстрували повноваження для кожного із користувачів. Тобто для кожної ролі не менше двох запитів: один, що виконується відповідно до повноважень (позитивна відповідь сервера); другий запит побудувати так, щоб порушувались права доступу згідно розданих повноважень (в цьому разі відповідне попередженні від сервера).
Зауважте, що запити до сервера здійснюються від імені користувача, для якого було створено сеанс (якщо це користувач чи процес із зовнішньої програми) або під яким було здійснено вхід в консоль.
6.Розширте повноваження користувача boss до ролі адміністратора (на практиці дуже погана ідея) і доведіть це виконанням одного довільного запиту.
7.Розширити повноваження користувача operator так, щоб він міг створювати нові таблиці. Виконати запит, що підтвердить розширені повноваження.
8.Максимально обмежте повноваження guest. Продемонструвати результат.
9*. Запропонуйте свої завдання.
Контрольні запитання
1.Поясніть аспекти інформаційної безпеки СУБД.
2.Які переваги надає система повноважень користувачів в базах даних?
3.Чому передання своїх повноважень одним користувачем іншому може спричинити прецеденти інформаційної безпеки?
4.Назвіть типи повноважень і рівні привілеїв в СУБД MySQL.
5.Який недолік може мати система повноважень бази даних, що використовується в умовах великих корпорацій і розподілених мереж?
