Подтвердить что ты не робот

Доступ запрещен для пользователя 'root' @'localhost' (с использованием пароля: YES) после новой установки на Ubuntu

Сегодня я сделал логин как root в Ubuntu 14.04.1 LTS ll

а затем apt-get install mariadb-server (без sudo, но с правами root).

С mySQL -h localhost -u root --password=<PW> я получил

Доступ запрещен для пользователя 'root' @'localhost' (с использованием пароля: YES)

С mySQL -u root -p я зашел в БД и сделал

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

Но это не помогло. У тебя есть идея? Я не нашел ответа на подобные вопросы.

4b9b3361

Ответ 1

TL; DR: чтобы получить доступ к более новым версиям mysql/mariadb после того, как пользователь root, после новой установки вы должны быть в корневой оболочке (т. sudo mysql -u root или 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

получить доступ с правами суперпользователя, в то время как все остальные пользователи могут получить доступ в порядке.

Глядя на таблицу mysql.user я заметил, что для root столбец 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

Сделав это, я подумал о том, как получить доступ без необходимости делать sudo, а это просто вопрос выполнения этих запросов MySQL.

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

(заменив <password> на нужный пароль root для mysql). Это включило логин паролей для пользователя root.

В качестве альтернативы можно выполнить запрос mysql:

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

Измените учетную запись root на использование пароля для входа без изменения пароля, но это может привести к установке mysql/mariadb без пароля root.

После любого из них вам нужно перезапустить mysql/mariadb:

sudo service mysql restart

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

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, ЧТО ДЕЛАЕТ ЭТО СНИЖЕНИЕ БЕЗОПАСНОСТИ. Предположительно, разработчики MariaDB решили, что рут-доступ работает так, по уважительной причине.

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

Ответ 2

В чистом Ubuntu 16.04 LTS, имя пользователя MariaDB для локального хоста изменилось с стиля пароля на стиль sudo login...

так что просто

sudo mysql -u root

так как мы хотим войти с паролем, создать другого пользователя '

в консоли MariaDB... (вы попадаете в консоль MariaDB с 'sudo mysql -u root')

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

затем в приглашении оболочки bash,

mysql-workbench

и вы можете войти с "пользователем" с "yourpassword" на localhost

Ответ 3

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

sudo mysql_secure_installation

нажмите ввод и назначьте новый пароль для root в mysql/mariadb.

Если вы получаете сообщение об ошибке типа

ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock'

включить сервис с

service mysql start

теперь, если вы повторно введете с

mysql -u root -p

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

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

это исправило мою проблему в MariaDB.

Удачи

Ответ 4

Мне нужно было войти в Ubuntu как root, чтобы получить доступ к Mariadb как root. Это может иметь какое-то отношение к этому "Harden...", которое он предлагает вам сделать, когда вы впервые установите. Итак:

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

и вы находитесь.

Ответ 5

У меня была аналогичная проблема. В моем случае это произошло потому, что я как-то испортил мою таблицу пользователей MySQL Server.

Эта статья помогла мне: mysql-how-to-fix-Access-denied-for-user-'root '@' localhost '

В основном вы должны reset пользователя root.

Ответ 6

Новая команда для очистки привилегий:

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

Надеюсь, что это поможет:)

Ответ 8

Система, подобная Ubuntu, предпочитает использовать плагин auth_socket. Он будет пытаться аутентифицироваться, сравнивая ваше имя пользователя в БД и процесс, который делает запрос mysql; это описано здесь

Плагин сокета проверяет, совпадает ли имя пользователя сокета (имя пользователя операционной системы) с именем пользователя MySQL, заданным клиентской программой, и разрешает соединение, только если имена совпадают.

Вместо этого вы можете захотеть вернуться с mysql_native_password, который потребует пользователя/пароль для аутентификации.

О способ добиться того, что я рекомендую это вместо этого.

Ответ 9

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

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

Ответ 10

Вам просто нужно использовать sudo, чтобы заставить его работать

sudo mysql_secure_installation