mysql (mariadb) ПОМИЛКА 1698 (28000): Доступ заборонено користувачеві 'root' @ 'localhost'


23

Я працюю над Xubuntu 15.04. Я вже встановив MariaDB-сервер у різних системах, і мене завжди просили кореневий пароль під час встановлення. Однак цього разу я не пам’ятаю, щоб мене просили пароль. Коли я намагаюся увійти без пароля (або порожнього пароля), я отримую Access denied for user 'root'@'localhost'помилку. Я спробував повністю видалити пакунок

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

Коли я перевстановився, мені все одно не задавали пароль для кореня.

Я спробував mysqld --skip-grant-tablesпідхід від mysql, як виправити відмовлений доступ для користувача 'root' @ 'localhost' . Я можу змінити пароль для кореневого користувача в базі даних mysql - принаймні, змінилося хеш-значення - але я все одно не можу увійти з новим паролем після перезавантаження сервера mysql. Я все одно отримую ту саму помилку.

Користувача debian-sys-maint не існує. Отже, я не можу використовувати це, щоб щось виправити.

Будь-які ідеї, що ще я міг би спробувати?


Корисна нитка з тим же питанням на StackOverflow: stackoverflow.com/questions/39281594 / ...
Кевін - відновлять Моніці

Відповіді:


36

Потрібно скинути пароль. так для того

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

9
Неочевидна «магія» цього підходу полягає в тому, що користувач кореневої операційної системи може входити в базу даних без необхідності вказувати пароль, оскільки plugin: auth_socketвін за умовчанням включений. Іншими словами, немає необхідності використовувати так, --skip-grant-tablesяк це було б необхідно в минулих версіях MySQL. (Технічно цей захід не "скидає пароль"; він вимикає плагін.)
Бен Джонсон

1
+1, чи можете ви пояснити причину?
A1Gard

4
Такий підхід спричинить проблеми пізніше. Якщо ви вимкнете плагін, щоденна робота в Cron зламається, оскільки передбачається, що він може увійти в систему за допомогою цього плагіна. Детальну інформацію див. У моїй відповіді.
колан

11

Ідея нового налаштування полягає в тому, що ви взагалі не повинні використовувати паролі. Докладніше див. Плагін аутентифікації UNIX_SOCKET .

Особливо актуальним є вміст /usr/share/doc/mariadb-server-10.0/README.Debian.gz в Ubuntu 16.04:

У нових встановленнях не встановлюється кореневий пароль і більше не створюється користувач debian-sys-maint. Натомість кореневий обліковий запис MariaDB встановлений для автентифікації за допомогою сокета unix, наприклад, будь-яке виклик mysqld через root або через sudo дозволить користувачеві побачити підказку mysqld.

Ви ніколи не можете видалити "корінь" користувача mysql. Хоча для нього не встановлено жодного пароля, плагін unix_auth гарантує, що він може бути запущений лише локально як користувач root.

Вхідні дані в /etc/mysql/debian.cnf вказують користувача, який використовується сценаріями init для зупинки сервера та проведення логротації. Це раніше був користувачем debian-sys-maint, який більше не використовується, оскільки root може працювати безпосередньо.

Отже, якщо ви вимкнете цей плагін для root та встановите пароль, щоденне завдання cron зламається, оскільки передбачається, що він увійде як root без пароля, але з плагіном.

Пізніше воно говорить:

Сценарії повинні працювати, оскільки користувач має необхідні дотації та бути ідентифікованими через unix_socket.

Таким чином, схоже, що паролі більше не повинні використовуватися програмами.


1
Я щойно стикався з тією самою проблемою, яку ви описуєте: "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."Неочевидне значення включеного плагіну UNIX_SOCKET Authentication (який зараз є за замовчуванням) полягає в тому, що здатність аутентифікуватись як користувача кореневої бази даних з паролем відключена. Ніде на mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin не зазначається таке значне обмеження. Відповідно, неможливо увійти як root, наприклад, через SSH.
Бен Джонсон

2

Я вирішив проблему, відповівши на це повідомлення:

Неможливо скинути кореневий пароль MySQL (MariaDB)

Треба змінити поле плагіна для mysql.user для всіх коренів на порожній рядок.


Це питання описано тут: percona.com/blog/2016/03/16/…
antonu17

3
Такий підхід спричинить проблеми пізніше. Якщо ви вимкнете плагін, щоденна робота в Cron зламається, оскільки передбачається, що він може увійти в систему за допомогою цього плагіна. Детальну інформацію див. У моїй відповіді.
колан

1

Я зробив це, запустивши цю команду, відразу після встановлення:

$ sudo mysql_secure_installation

На першому кроці пароль порожній, тому просто натисніть Enter.


1
Це не пусто, якщо вже встановлено, що мій забутий pw… тому все ще не можу увійти
Дейв Еверітт

0

У мене був такий самий випуск про raapberry pi з натяжкою. Моїм рішенням було створити нового користувача з усіма привілеями, виконавши наступне:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Тепер я можу ввійти та користувач "адміністратор" як суперпользователь.

Я сподіваюся, що це допоможе комусь.


0

Просто використовувати sudo mysql -u root- ось і все


Детальніше: новіші версії аутентифікуються на mysql за допомогою системи автентифікації. Тож якщо ви можете надіслати sudo на ОС, він передбачає, що ви також є коренем db. Ви можете підтвердити це, видавши sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Ви повинні побачити щось подібне (можливо, auth_socketв інших дистрибутивах)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

Я ввійшов як root, але для мене ця команда все ще хоче пароль паролю MariaDB…, який я забув :-(
Дейв Еверітт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.