Словом, на MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
де ви замінюєте NEWPASSWORD потрібним паролем, а все інше дослівно.
Проблема тут полягає в тому, що коли MariaDB або MySQL встановлюються / оновлюються (особливо якщо в якийсь момент корінь встановлений без пароля), тоді в таблиці Користувач пароль фактично порожній (або ігнорується), а вхід в систему залежить від відповідного користувача системи користувачеві MySQL. Ви можете перевірити це наступним чином, перейшовши на системний корінь, а потім введіть:
mysql -uroot -p
Потім введіть або немає пароля, або неправильний пароль. Ви, мабуть, ввійдете. (Можливо, ви навіть зможете увійти в систему з кореня unix просто, # mysql
оскільки пароль не має значення та визначено користувача).
Отже, що відбувається? Добре, якщо ви увійдете як root і виконайте наступне:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
ви помітите auth_socket
(що може читати unix_socket
на MariaDB). Ці сокети ігнорують паролі та дозволяють відповідному користувачеві Unix без перевірки пароля. Ось чому ви можете увійти в систему за допомогою root, але не з іншим користувачем.
Таким чином, рішення полягає в тому, щоб оновити Користувачів, щоб вони не використовували auth_socket/unix_socket
і правильно встановили пароль.
Для MariaDB (<10.2, див. Коментарі нижче), що є версією Ubuntu 16 станом на 2017 рік, цього має бути достатньо. NEWPASSWORD - ваш пароль. mysql_native_password
Ви набираєте дослівно
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(Цілком можливо, що встановлення плагіна на порожній спрацювало б. YMMV. Я цього не пробував. Тому це альтернатива.)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Інакше:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
Тоді
FLUSH PRIVILEGES;
Для запису, рішення, пов’язане з видаленням користувача та відтворенням його за допомогою "%", мене повністю заблокувало з бази даних і може спричинити інші проблеми, якщо ви не отримаєте grant
твердження точно правильно - простіше просто оновити корінь, який у вас уже є.
На мій досвід, проблема трапляється лише з користувачем root, оскільки інші користувачі будуть додані вручну, не є частиною початкової установки / оновлення.