
Вебзастосунку не потрібен адміністративний доступ до всього сервера MySQL/MariaDB. Для Joomla, WordPress та іншого сайту правильніше створити окремий обліковий запис і дозволити йому працювати лише з базою конкретного проєкту. Це не робить сайт невразливим, але помітно обмежує область доступу в разі витоку реквізитів.
Стара версія цієї інструкції радила входити як root без пароля й видавати новому користувачу всі глобальні привілеї. Для сучасного робочого сайту так робити не слід. Нижче — актуальна схема через панель хостингу, phpMyAdmin і SQL.
Користувач бази даних — не користувач Joomla
Обліковий запис MySQL/MariaDB існує на сервері СУБД і використовується застосунком для підключення. Він не має стосунку до логіна суперкористувача Joomla. Навіть якщо імена випадково збігаються, це дві незалежні системи авторизації.
Для підключення сайту потрібні ім’я акаунта БД, пароль і host. На shared-хостингу ім’я користувача може автоматично отримати префікс акаунта, тому в configuration.php потрібно використовувати повне значення з панелі.
Три способи створити користувача бази даних
Спосіб 1. Панель хостингу.
Якщо сайт знаходиться на звичайному хостингу, користувача краще створювати через штатну панель. Провайдер обмежує доступ рамками акаунта й не вимагає входити під серверним root.
Послідовність зазвичай складається з кількох дій:
- Відкрийте розділ «Бази даних».
- Створіть базу або виберіть уже наявну.
- Створіть окремого користувача й згенеруйте довгий випадковий пароль.
- Пов’яжіть користувача з потрібною базою та призначте права на неї.
- Збережіть реквізити й внесіть їх у конфігурацію 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 — погана практика. Краще точно визначити джерело підключення й додатково обмежити доступ мережевим екраном.
Як безпечно замінити або видалити користувача
Видалення користувача й видалення бази — різні операції. Якщо потрібно змінити реквізити сайту, безпечна послідовність виглядає так:
- Зробіть резервну копію бази.
- Створіть нового користувача.
- Видайте йому права на робочу БД.
- Оновіть конфігурацію сайту.
- Перевірте читання й запис даних.
- Лише після перевірки видаліть старий обліковий запис.
Такий порядок не вимагає видаляти або повторно створювати саму базу. Якщо ж потрібно видалити й БД, це має бути окремою усвідомленою дією після експорту дампа.
Типові помилки та їхні причини
Повідомлення про неможливість підключитися до бази рідко означає, що сама БД пошкоджена. Частіше причина криється в реквізитах або правах:
- Access denied — неправильний пароль, host або недостатні привілеї;
- користувача створено, але не прив’язано до потрібної бази;
- у конфігурації вказано короткий логін без обов’язкового префікса хостинг-акаунта;
- акаунт створено для
localhost, а підключення фактично приходить з іншого host; - права змінили, але застосунок усе ще використовує старі реквізити;
- після міграції вказано ім’я не тієї бази.
Починайте діагностику з панелі хостингу й файла конфігурації, а потім використовуйте SHOW GRANTS, якщо у вас є доступ до SQL-консолі або відповідного розділу phpMyAdmin.
Підсумок
Для сайту потрібен окремий користувач MySQL/MariaDB із сильним паролем і правами на конкретну базу. Використовувати root без пароля або видавати застосунку глобальні привілеї *.* не потрібно.
Перед створенням користувача корисно розібратися, як влаштована база даних. Якщо самої бази ще немає або її потрібно перенести під новим ім’ям, використовуйте інструкцію «Як створити базу даних MySQL/MariaDB».