Як створити користувача MySQL/MariaDB і надати права на базу даних

Створення користувача MySQL або MariaDB

Вебзастосунку не потрібен адміністративний доступ до всього сервера MySQL/MariaDB. Для Joomla, WordPress та іншого сайту правильніше створити окремий обліковий запис і дозволити йому працювати лише з базою конкретного проєкту. Це не робить сайт невразливим, але помітно обмежує область доступу в разі витоку реквізитів.

Стара версія цієї інструкції радила входити як root без пароля й видавати новому користувачу всі глобальні привілеї. Для сучасного робочого сайту так робити не слід. Нижче — актуальна схема через панель хостингу, phpMyAdmin і SQL.

Користувач бази даних — не користувач Joomla

Обліковий запис MySQL/MariaDB існує на сервері СУБД і використовується застосунком для підключення. Він не має стосунку до логіна суперкористувача Joomla. Навіть якщо імена випадково збігаються, це дві незалежні системи авторизації.

Для підключення сайту потрібні ім’я акаунта БД, пароль і host. На shared-хостингу ім’я користувача може автоматично отримати префікс акаунта, тому в configuration.php потрібно використовувати повне значення з панелі.

Три способи створити користувача бази даних

Спосіб 1. Панель хостингу.

Якщо сайт знаходиться на звичайному хостингу, користувача краще створювати через штатну панель. Провайдер обмежує доступ рамками акаунта й не вимагає входити під серверним root.

Послідовність зазвичай складається з кількох дій:

  1. Відкрийте розділ «Бази даних».
  2. Створіть базу або виберіть уже наявну.
  3. Створіть окремого користувача й згенеруйте довгий випадковий пароль.
  4. Пов’яжіть користувача з потрібною базою та призначте права на неї.
  5. Збережіть реквізити й внесіть їх у конфігурацію CMS.

Деякі панелі створюють базу й користувача однією дією. Це нормально, якщо в результаті користувач отримує доступ лише до бази сайту, а не глобальні адміністративні права.

Спосіб 2. phpMyAdmin.

У phpMyAdmin керування акаунтами знаходиться в розділі «Облікові записи користувачів» / User accounts. Цей розділ доступний лише тоді, коли поточний обліковий запис має необхідні адміністративні повноваження. На shared-хостингу провайдер може приховати його повністю.

Під час створення користувача зверніть увагу на три параметри. Ім’я задавайте латиницею й без зайвих пробілів. Host для сайту та БД на одному сервері найчастіше localhost; значення % означає ширший набір джерел підключення й без потреби використовувати його не варто. Пароль краще генерувати менеджером паролів або самою панеллю.

Після створення акаунта призначте йому привілеї на конкретну базу. Звичайному користувачу БД у загальному випадку не потрібні глобальні привілеї — права слід видавати на потрібну базу.

Спосіб 3. SQL.

На власному сервері те саме завдання можна виконати командами SQL. У прикладі застосунок і сервер БД знаходяться на одному хості:

CREATE USER 'site_user'@'localhost'
  IDENTIFIED BY 'складний_унікальний_пароль';

GRANT ALL PRIVILEGES
  ON site_db.*
  TO 'site_user'@'localhost';

SHOW GRANTS FOR 'site_user'@'localhost';

Тут ALL PRIVILEGES обмежені рівнем site_db.*, тобто однією базою. Це принципово відрізняється від глобального *.*. Команда SHOW GRANTS дозволяє одразу перевірити, що ви видали саме ті права, які планували.

Права й параметри підключення Joomla

Які права потрібні Joomla.

Працююча CMS не лише читає й змінює рядки. Встановлення та оновлення Joomla або розширень може створювати таблиці, змінювати стовпці й видаляти застарілі структури. Тому надто жорстке обмеження привілеїв здатне призвести до помилок під час оновлення.

Практичний підхід такий: користувач сайту отримує повний набір необхідних прав у межах однієї бази, але не глобальні права на весь сервер. Додаткове посилення має сенс лише тоді, коли ви розумієте сценарії оновлення й готові їх тестувати.

Що змінити в Joomla після зміни користувача.

Якщо сайт уже працював під іншим обліковим записом, спочатку створіть новий і видайте йому права, а старий поки не видаляйте. Потім змініть реквізити підключення й перевірте сайт.

public $host = 'localhost';
public $user = 'site_user';
public $password = 'новий_пароль';
public $db = 'site_db';

Після збереження відкрийте кілька сторінок сайту, увійдіть в адміністративну панель і виконайте дію, яка записує дані, наприклад збереження тестового матеріалу без фактичної зміни контенту. Лише після такої перевірки варто видаляти старого користувача.

Що означає частина @localhost.

У MySQL-сумісних СУБД акаунт визначається поєднанням імені та host. Умовні 'site_user'@'localhost' і 'site_user'@'%' — різні акаунти з потенційно різними правами.

Якщо застосунок знаходиться на іншому сервері, потрібно використовувати значення, що відповідає реальній мережевій схемі та політиці хостингу. Відкривати віддалений доступ із будь-якої адреси лише заради усунення помилки Access denied — погана практика. Краще точно визначити джерело підключення й додатково обмежити доступ мережевим екраном.

Як безпечно замінити або видалити користувача

Видалення користувача й видалення бази — різні операції. Якщо потрібно змінити реквізити сайту, безпечна послідовність виглядає так:

  1. Зробіть резервну копію бази.
  2. Створіть нового користувача.
  3. Видайте йому права на робочу БД.
  4. Оновіть конфігурацію сайту.
  5. Перевірте читання й запис даних.
  6. Лише після перевірки видаліть старий обліковий запис.

Такий порядок не вимагає видаляти або повторно створювати саму базу. Якщо ж потрібно видалити й БД, це має бути окремою усвідомленою дією після експорту дампа.

Типові помилки та їхні причини

Повідомлення про неможливість підключитися до бази рідко означає, що сама БД пошкоджена. Частіше причина криється в реквізитах або правах:

  • Access denied — неправильний пароль, host або недостатні привілеї;
  • користувача створено, але не прив’язано до потрібної бази;
  • у конфігурації вказано короткий логін без обов’язкового префікса хостинг-акаунта;
  • акаунт створено для localhost, а підключення фактично приходить з іншого host;
  • права змінили, але застосунок усе ще використовує старі реквізити;
  • після міграції вказано ім’я не тієї бази.

Починайте діагностику з панелі хостингу й файла конфігурації, а потім використовуйте SHOW GRANTS, якщо у вас є доступ до SQL-консолі або відповідного розділу phpMyAdmin.

Підсумок

Для сайту потрібен окремий користувач MySQL/MariaDB із сильним паролем і правами на конкретну базу. Використовувати root без пароля або видавати застосунку глобальні привілеї *.* не потрібно.

Перед створенням користувача корисно розібратися, як влаштована база даних. Якщо самої бази ще немає або її потрібно перенести під новим ім’ям, використовуйте інструкцію «Як створити базу даних MySQL/MariaDB».

Add comment

Знайшли помилку або неточність?

Выделите фрагмент текста и нажмите Ctrl + Enter. Также можно воспользоваться кнопкой ниже.

Знайшли помилку або неточність?

Виділений фрагмент буде додано до повідомлення автоматично. За потреби додайте пояснення.

Форма захищена від автоматичних надсилань

Дані використовуються лише для перевірки та виправлення матеріалу.