Доступ заборонено користувачеві '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.