Кой може какво
Досега в приложението и в 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(*).
- Архивирането е по график, не по повод.