Онлайн час в Google Meet
Лого на 91. НЕГ „Проф. Константин Гълъбов“

12. клас · Избираем модул · Урок 8

Контрол на достъпа. Архивиране и възстановяване

Потребители и права в MySQL — CREATE USER, GRANT и REVOKE по принципа на най-малките права; архив с mysqldump или Export, възстановяване с Import и проверка, че наистина е върнато всичко.

Кой може какво

Досега в приложението и в phpMyAdmin влизате като един потребител, който може всичко — да създава, чете, променя и трие. За учебна база това е удобно. За истинска система е опасно: от базата на училището четат дневникът, столът, библиотеката, сайтът за родители — и всяка от тези програми, ако влиза като „всичко“, може при грешка или пробив да изтрие всичко.

В Модул 4 видяхте ролите на SQL Server (db_datareader, db_backupoperator). Идеята в MySQL е същата, само синтаксисът е по-прост: потребители и права върху обекти.

Принцип на най-малките права

Всеки потребител — човек или програма — получава точно правата, които са му нужни за работата, и нищо повече. Ако сайтът за родители само показва оценки, той получава SELECT върху изглед с оценките, а не достъп до таблиците.

Потребители и права в MySQL

-- потребител: име @ откъде може да се свързва
CREATE USER 'uchitel'@'localhost' IDENTIFIED BY 'Silna-Parola-1';
CREATE USER 'sait'@'localhost'    IDENTIFIED BY 'Druga-Parola-2';

-- права: КАКВО, ВЪРХУ КАКВО, НА КОГО
GRANT SELECT ON school.* TO 'uchitel'@'localhost';                 -- чете всичко
GRANT INSERT, UPDATE ON school.marks TO 'uchitel'@'localhost';     -- пише само оценки
GRANT SELECT ON school.v_uspeh TO 'sait'@'localhost';              -- само изгледа

-- отнемане
REVOKE UPDATE ON school.marks FROM 'uchitel'@'localhost';

-- проверка и изтриване
SHOW GRANTS FOR 'sait'@'localhost';
DROP USER 'sait'@'localhost';
ПравоПозволяваНа кого е нужно
SELECTчетене — може да се ограничи до таблица или изгледна всеки, който прави справки
INSERT, UPDATEдобавяне и промяна на редове в посочените таблицина този, който въвежда данни
DELETEизтриване на редоверядко — и много внимателно
CREATE, ALTER, DROPпромяна на структурата — таблици, изгледи, индексисамо на администратора
ALL PRIVILEGESвсичко върху обектана администратора на базата, не на програмите

Обектът в GRANT

  • school.marks — една таблица или изглед.
  • school.* — всички таблици в базата school.
  • *.* — целият сървър; така изглежда root и така не бива да изглежда никой друг.
  • Частта след @ е откъде: 'localhost' — само от същата машина; '%' — отвсякъде. Същото име с различен адрес е различен потребител.

Архивиране

Правата пазят от чужди грешки. От вашите собствени (и от повреден диск, и от криптовирус) пази само архивът (backup). В MySQL най-простият архив е дъмп (dump): текстов файл със SQL оператори, които построяват базата наново от нулата.

# от командния ред на сървъра (или XAMPP\mysql\bin):
mysqldump -u root -p school > school-2026-09-16.sql

# всички бази наведнъж
mysqldump -u root -p --all-databases > vsichko.sql

В phpMyAdmin същото е Експорт → метод „Бърз“, формат SQL → бутонът дава файла за сваляне. Отворете го в текстов редактор — вътре няма нищо тайнствено:

-- откъс от school-2026-09-16.sql
DROP TABLE IF EXISTS `marks`;
CREATE TABLE `marks` (
  `id` int NOT NULL AUTO_INCREMENT,
  `student_id` int DEFAULT NULL,
  `subject_id` int DEFAULT NULL,
  `mark` decimal(3,2) NOT NULL,
  `date` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `student_id` (`student_id`)
);
INSERT INTO `marks` VALUES (1,1,1,6.00,'2026-02-10'),(2,1,2,5.50,'2026-02-12'), ...;

CREATE VIEW `v_uspeh` AS select ... ;
  • Структурата: CREATE TABLE с типове, ключове и индекси.
  • Данните: по един INSERT на таблица с всички редове.
  • Изгледите, тригерите и процедурите — ако сте отметнали да се включат.
  • Не съдържа потребителите и правата — те са в системната база mysql и се архивират отделно.

Възстановяване и график

Възстановяването е обратното: файлът се изпълнява. От командния ред — mysql -u root -p school < school-2026-09-16.sql; в phpMyAdmin — избирате базата, раздел Импорт, посочвате файла, „Изпълни“. Заради DROP TABLE IF EXISTS в началото на всяка таблица архивът замества каквото е останало.

ВъпросОтговор за училищна база
Колко честовсяка нощ автоматично; ръчно — преди всяка промяна на структурата
Къдена друга машина или диск — архив на същия диск изчезва заедно с него
Колко копияпоне последните 7 дневни и по едно от всеки месец
Кой проверяваедин човек, по график, с възстановяване на тестова база
Какво се записвадата, файл, размер, брой редове по таблици — за да има с какво да се сравнява

Какво трябва да запомниш

  • CREATE USER 'име'@'хост' IDENTIFIED BY …; GRANT право ON база.обект TO потребител; REVOKE отнема.
  • Най-малки права: приложението получава SELECT върху изгледи, не ALL върху базата; root е само за администратора.
  • Изгледът е инструмент за права — показва колоните и редовете, които потребителят трябва да вижда.
  • Архивът на MySQL е дъмп: текстов файл с CREATE TABLE и INSERT; прави се с mysqldump или Export, връща се с mysql или Import.
  • Архивът не съдържа потребителите; той се пази на друго място и се проверява с възстановяване и COUNT(*).
  • Архивирането е по график, не по повод.