1. Создать базу BD и таблицу Users
sql
CREATE DATABASE db;
USE db;
CREATE TABLE Users (
UserID INT AUTO_INCREMENT PRIMARY KEY,
Username VARCHAR(50) NOT NULL,
PasswordHash VARBINARY(255) NOT NULL
);
2. Создать базы BD1, BD2, ..., BD10 (через процедуру)
sql
DELIMITER //
CREATE PROCEDURE create_10_DB()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 10 DO
SET @create_db = CONCAT('CREATE DATABASE BD', i);
PREPARE stmt FROM @create_db;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL create_10_DB();
3. Создать 10 пользователей (user1..user10) со случайным паролем (5 символов)
sql
DELIMITER //
CREATE PROCEDURE create_10_users_with_encryptedpass()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE secret_key VARCHAR(100) DEFAULT 'mysecretkey123';
WHILE i <= 10 DO
-- случайный пароль из 5 символов (буквы + цифры)
SET @pass = CONCAT(
CHAR(65 + FLOOR(RAND() * 26)), -- A-Z
CHAR(97 + FLOOR(RAND() * 26)), -- a-z
FLOOR(RAND() * 10), -- 0-9
CHAR(65 + FLOOR(RAND() * 26)), -- A-Z
FLOOR(RAND() * 10) -- 0-9
);
-- создать пользователя MySQL
SET @sql = CONCAT('CREATE USER ''user', i, '''@''localhost'' IDENTIFIED BY ''', @pass, '''');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- вставить в таблицу Users с зашифрованным паролем
INSERT INTO Users (UserID, Username, PasswordHash)
VALUES (i, CONCAT('user', i), AES_ENCRYPT(@pass, secret_key));
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL create_10_users_with_encryptedpass();
4. Настроить права: user1 → BD1, user2 → BD2 и т.д.
sql
DELIMITER //
CREATE PROCEDURE set_rights()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 10 DO
SET @sql = CONCAT('GRANT ALL ON BD', i, '.* TO ''user', i, '''@''localhost''');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL set_rights();
5. Если пароли в таблице хранятся открыто — зашифровать их
sql
DELIMITER //
CREATE PROCEDURE encrypt_passwords()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE secret_key VARCHAR(100) DEFAULT 'mysecretkey123';
WHILE i <= 10 DO
SET @pass = (SELECT PasswordHash FROM Users WHERE Username = CONCAT('user', i));
UPDATE Users
SET PasswordHash = AES_ENCRYPT(@pass, secret_key)
WHERE Username = CONCAT('user', i);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL encrypt_passwords();
Если ошибка: SET SQL_SAFE_UPDATES = 0; перед вызовом.
6. Показать расшифрованные пароли из таблицы Users
sql
SELECT
UserID,
Username,
CAST(AES_DECRYPT(PasswordHash, 'mysecretkey123') AS CHAR) AS DecryptedPassword
FROM Users;
7. Резервное копирование базы BD
Не через SQL, а через консоль MySQL:
bash
mysqldump -u root -p db > C:\backup\db_backup.sql
8. Восстановление базы BD
Через консоль MySQL:
bash
mysql -u root -p db < C:\backup\db_backup.sql