11. Деякі можливості адміністрування в MySQL

Шифрування. Функції MySQL для шифрування

В MySQL можна використати надійні механізми шифрування даних. Для цього використовують функції:

Алгоритм AES використовує 128-бітний ключ шифрування (в MySQL 5.7 256-бітовий ключ). Ключ задається явно, як один з параметрів функції.

Пр. 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 запит.
Забезпечення інформациійної безпеки проекту реалізується на різних рівнях.

Можливості шифруванння даних в MySQL 5.7
Шифрування даних в MySQL 5.7 має переваги:

Використання logs журналів (протоколів) в MySQL

Основні журнали в MySQL:
1. бінарний лог (binary log)
2. лог помилок (error log)
3. лог повільних запитів (slow query log)
4. лог запитів (general query log)
5. лог реплікацій (relay log)

Бінарний лог в MySQL 5.7
Використовуєтьтся для реплікацій – копіювання даних з одного джерела на інші.

Для бінарного логу можна виконати 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