Загрузка данных


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