Доступ заборонено користувачеві 'root' @ 'localhost' (використовуючи пароль: ТАК) після нової установки на Ubuntu


124

Сьогодні я зробив логін як root на Ubuntu 14.04.1 LTS ll

а потім apt-get install mariadb-server(без судо, але як корінь).

З mySQL -h localhost -u root --password=<PW>мене дісталося

Доступ заборонено користувачеві 'root' @ 'localhost' (використовуючи пароль: ТАК)

З mySQL -u root -pя ввійшов у БД і зробив

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

Але це не допомогло. У вас є ідеї? Я не знайшов відповіді на подібні запитання.


Ви спробували перевстановити пароль для root?
Ozgur Bar

Відповіді:


277

TL; DR: Щоб отримати доступ до новіших версій mysql / mariadb після як кореневого користувача, після нової інсталяції вам потрібно бути в кореневій оболонці (тобто sudo mysql -u rootабо mysql -u rootвсередині оболонки, започаткованої su -або sudo -iспочатку)


Щойно зробивши те саме оновлення, в Ubuntu у мене виникла та сама проблема.

Що дивно, це було

sudo /usr/bin/mysql_secure_installation

Я прийняв би свій пароль і дозволив би його встановити, але я не зміг увійти як rootчерез mysqlклієнта

Мені довелося починати з маріадби

sudo mysqld_safe --skip-grant-tables

щоб отримати доступ як root, в той час як всі інші користувачі все ще могли отримати штраф.

Дивлячись на mysql.userтаблицю, яку я помітив, для кореня встановлено pluginстовпець, unix_socketтоді як для всіх інших користувачів встановлено значення "mysql_native_password". Швидкий погляд на цю сторінку: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ пояснює, що Unix Socket дозволяє входити в систему шляхом узгодження uidпроцесу, що працює під керуванням клієнта, та з користувачем у програмі.mysql.user стіл. Іншими словами, щоб отримати доступ до mariadb, оскільки rootви повинні бути авторизовані як root.

Звичайно, достатньо перезапустити мого демона mariadb з потрібною автентифікацією, з якою я можу ввійти як root

sudo mysql -u root -p

або

sudo su -
mysql -u root -p

Зробивши це, я подумав про те, як отримати доступ без того, щоб робити судо, що просто питання запуску цих запитів mysql

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(замінивши <password>потрібний пароль root mysql). Це ввімкнуло вхід пароля для кореневого користувача.

Альтернативно виконується запит mysql:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

Змінить кореневий обліковий запис, щоб використовувати логін для входу без зміни пароля, але це може залишити вас з встановленням mysql / mariadb без пароля root.

Після будь-якого з них вам потрібно перезапустити mysql / mariadb:

sudo service mysql restart

І вуаля, я мав доступ зі свого особистого рахунку через mysql -u root -p

ЗАБУДУЙТЕ ЗАМОВЛЕННЯ, ЩО РОБОТИ ЦЬОГО СКЛАДАЄТЬСЯ БЕЗПЕЧНОСТІ Імовірно, розробники MariaDB вирішили працювати з кореневим доступом так, як це, з усієї причини.

Думаючи про це, я дуже радий sudo mysql -u root -pтому, що я переходжу до цього, але я подумав, що опублікую своє рішення, оскільки не можу знайти його в іншому місці.


7
"щоб отримати доступ до mariadb як root, ви повинні увійти як root." - Це речення має бути у верхній частині відповіді.
Філіпп Людвіг

1
чому ти запускаєш GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; команду двічі перед промиванням privvies?
Blairg23

4
Це повинно бути десь більш помітним, як великі червоні літери під час встановлення чи щось таке ... Просто витрачено кілька годин життя, намагаючись налаштувати сервер, який мені потрібен якнайшвидше ....
Gall Annonim

1
btw, якщо ти лінивий, як я, ти можеш зекономити, як дві секунди,sudo service mysql restart
zeisi

1
Дякую за підказку, чудово підходить для розробника, але як повернути це назад до оригіналу?
Сем

42

У чистому Ubuntu 16.04 LTS, кореневий логін MariaDB для localhost змінено зі стилю пароля на стиль входу в судо ...

так, просто робіть

sudo mysql -u root

оскільки ми хочемо увійти з паролем, створимо іншого користувача "користувача"

в консолі MariaDB ... (ви отримуєте в консолі MariaDB з 'sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

то в підказці bash shell,

mysql-workbench

і ви можете увійти за допомогою "user" за допомогою "yourpassword" у localhost


12

Спробуйте команду

sudo mysql_secure_installation

натисніть Enter і призначте новий пароль для root у mysql / mariadb .

Якщо ви отримаєте помилку типу

ПОМИЛКА 2002 (HY000): не вдається підключитися до локального сервера MySQL через сокет '/var/run/mysqld/mysqld.sock'

включити послугу за допомогою

service mysql start

тепер, якщо ви знову входите з

mysql -u root -p

якщо ви дотримуєтеся проблеми, введіть sudo suі mysql -u root -pтепер застосуйте дозволи до root

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

це вирішило мою проблему в MariaDB .

Удачі



3

Мені довелося увійти в Ubuntu як root, щоб отримати доступ до Mariadb як root. Це може мати щось спільне з тим "Харденом ...", що підкаже вам зробити під час першого встановлення. Так:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

і ти в.


2

Нова команда для очищення привілеїв:

FLUSH PRIVILEGES

Стара команда FLUSH ALL PRIVILEGESвже не працює.

Ви отримаєте помилку, яка виглядає приблизно так:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

Сподіваюся, це допомагає :)



0

Така система, як Ubuntu, вважає за краще використовувати плагін auth_socket . Він спробує аутентифікувати, порівнявши ваше ім'я користувача в БД і процес, який робить запит mysql; це описано тут

Плагін сокета перевіряє, чи відповідає ім'я користувача сокета (ім'я користувача операційної системи) імені користувача MySQL, визначеному клієнтською програмою для сервера, і дозволяє підключення, лише якщо імена відповідають.

Натомість ви можете скористатися mysql_native_password , який вимагає для користувача / пароля для автентифікації.

Щодо методу досягнення цього, я рекомендую це замість цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.