Доступ запрещен для пользователя '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;
Но это не помогло. У тебя есть идея?
Я не нашел ответа на подобные вопросы.
Ответы
Ответ 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
Надеюсь, что это поможет:)
Ответ 7
Запустите mysql_upgrade.
Проверь это
SHOW GRANTS FOR 'root'@'localhost';
говорит
GRANT ALL PRIVILEGES ON ... WITH GRANT OPTION
Убедитесь, что таблица существует _mysql.proxies_priv_.
Доступ запрещен для пользователя 'root' @'localhost' при попытке предоставить привилегии. Как я могу предоставить привилегии?
Ответ 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