====11. Деякі можливості адміністрування в MySQL==== **Шифрування. Функції MySQL для шифрування**\\ В MySQL можна використати надійні механізми шифрування даних. Для цього використовують функції: * ENCODE(string, key) і DECODE(string, key) * AES_ENCRYPT(string, key) — шифрування AES * AES_DECRYPT(string, key) — розшифровка AES * COMPRESS() — повернення результату у бінарному виді * DES_ENCRYPT(string, key) — шифрування DES * DES_DECRYPT(string, key) — дешифровка DES * ENCODE() — шифрування рядка паролем * DECODE() — розшифровка тексту, обробленого функцією ENCODE() * ENCRYPT() — шифрування за допомогою Uniх-системного виклику crypt() * MD5() — хеширування даних алгоритмом MD-5 * SHA1() або SHA() — хеширування даних алгоритмом SHA-1 (160-біт) Алгоритм AES використовує 128-бітний ключ шифрування (в MySQL 5.7 256-бітовий ключ). Ключ задається явно, як один з параметрів функції. \\ *Функція ENCRYPT() може бути використана тільки в ОС сімейства Unix – вона шифрує дані за допомогою системного функції crypt(). Пр. INSERT INTO table VALUES ( 1, AES_ENCRYPT( 'text', 'password' ) ); Запит записує в таблицю table значення “text”, яке зашифроване на ключі “password”.\\ Формат поля, в яке записується зашифроване значення, повинен відповідати обмеженям, які накладаються крипто-алгоритмом. В даному випадку, тип повинен бути двійковим (наприклад, типу VARBINARY) і пропонувати вирівнювання згідно з 128-бітним розміром блоку алгоритму AES. Найчастіше використовують функції AES_ENCRYPT() або DES_ENCRYPT(), які забезпечують високий рівень безпеки. Їх рекомендується використовувати для покращення стійкості додатків до злому.\\ Пр. INSERT INTO t VALUES (1, AES_ENCRYPT('text','password')); Пр. SELECT AES_DECRYPT(AES_ENCRYPT('текст для шифрования', 'ключ'), 'ключ') as encryption; Результатом є текст для шифрования. **Рівні захисту інформації:** * парольний захист; * захист полів і записів таблиць БД. * встановлення прав доступу до об'єктів БД; * шифрування даних і програм; **Реалізація захисту даних в РhpMyAdmin**\\ **РhpMyAdmin** – програма для управління сервером MySQL через Web-додатки. phpMyAdmin підтримує операції MySQL (управління БД, таблицями, полями, зв'язка, індексами, користувачами, правами,…). Одночасно можна безпосередньо виконати будь-який SQL запит.\\ Забезпечення інформациійної безпеки проекту реалізується на різних рівнях. * На вході в систему «phpMyAdmin» ( вводяться логін і пароль). * На вході СУБД MySQL (визначаються права доступу). **Можливості шифруванння даних в MySQL 5.7**\\ Шифрування даних в MySQL 5.7 має переваги: * Надійне шифрування AES-256 для таблиць InnoDB * Прозорість для додатків. Відсутність коду для додатків, схем. Немає потреби змінювати тип даних; * Прозорість для админістраторів БД. Ключі не управляються админістраторами БД; * Управління ключами. Ключі можна безпечно зберігати окремо від даних, а зміна ключів є простою; **Використання logs журналів (протоколів) в MySQL**\\ **Основні журнали в MySQL:**\\ 1. бінарний лог (binary log)\\ 2. лог помилок (error log)\\ 3. лог повільних запитів (slow query log)\\ 4. лог запитів (general query log)\\ 5. лог реплікацій (relay log)\\ **Бінарний лог в MySQL 5.7**\\ Використовуєтьтся для реплікацій – копіювання даних з одного джерела на інші. * Лог містить всі зміни в БД * Не зберігає виборки (select, show). * При виконанні транзакцій (InnoDB) запис в лог виконується після команди COMMIT. * Для лога можна вказати список БД, які потрібно «логувати» і список БД, які не потрібно «логувати». Для бінарного логу можна виконати backup, а також використати для відновлення даних. Використання бінарного логу знижує продуктивність БД, але є корисним, тому не рекомендується його відключати.\\ Бінарний лог рекомендується захищати паролем, тому що може містити дані про паролі користувачів. При досягнені максимально допустимого розміру (по замовчуванню 1 Гб) створюється наступний файл. Кожний новий файл має наступний порядковий номер.\\ Для прогляду бінарного логу використовується утілита mysqlbinlog. \\ При інтенсивній роботі з базами на MySQL необхідно слідкувати за логами.\\ Наприклад, бінарний лог за сутки може набрати один гигабайт, а розмір пам'яті на серверному диску обмежений. Логи періодично потрібно чистити для того, щоб файли не займали дуже багато дискового прострору. Настройки в файлі конфігурацій my.cnf для бінарного логу в MySQL 5.7\\ ) log_bin = /var/log/mysql/mysql-bin.log -- місце розташування лога\\ max_binlog_size= 500M -- максимальний розмір (по замовчуванню 1 Гб)\\ expire_logs_days = 3 -- зберігати днів\\ **Основні команди**\\ mysqlbinlog log_file | mysql -h server_name; -- повторення дій після операції відновлення\\ PURGE BINARY LOGS TO 'mysql-bin.000'; -- видалення логів до певного файлу\\ PURGE BINARY LOGS BEFORE 'YYYY-MM-DD hh:mm:ss'; -- видалення логів до певної дати\\ **Лог помилок (error log) в MySQL 5.7**\\ Лог містить інформацію про зупинки, запуски сервера, і про критичні помилки. \\ Може містити повідомлення з попередженням warnings. Корисний у випадку збоїв.\\ Основні настройки в my.cnf:\\ log_error = /var/log/mysql/mysql.err -- Місце розташування лога\\ log_warnings = 1 -- Флаг, який вказує, що потрібно записувати в лог попередження, чи ні (якщо значення >0, то записується)\\ **Основні команди**\\ shell> mysqladmin flush-logs -- Перехід до нового файлу лога\\ shell> mv host_name.err-old backup-directory -- Копіювання «старої» частини логу (це потрібно, тому що у випадку повторного виконання fluch він буде видалий)\\ **Лог повільних запитів (slow query log)**\\ Якщо додаток працює повільно (запити до БД не ефективні), то потрібно перевірити лог повільних запитів.\\ У випадку оптимізації запитів цей лог допомагае вияснити, що необхідимо оптимізувати в першу чергу.\\ Основні настройки в my.cnf\\ log_slow_queries = /var/log/mysql/mysql_slow.log -- Місце знаходження лога\\ long_query_time = 15 -- Після якої секунди виконання запиту вважається повільним. Мінімальне значення = 1 секунда, (по замовчуванню 10 секунд)\\ log-queries-not-using-indexes -- потрібно враховувати запити, які не використовують індекси\\ log-slow-admin-statements -- потрібно вести лог повільних запитів для OPTIMIZE TABLE, ANALYZE TABLE и ALTER TABLE\\