Acesso negado para o usuário 'root' @ 'localhost' (usando a senha: SIM) após nova instalação no Ubuntu

124

Hoje fiz um login como root no Ubuntu 14.04.1 LTS ll

e então apt-get install mariadb-server(sem sudo, mas como root).

Com mySQL -h localhost -u root --password=<PW>eu tenho

Acesso negado para o usuário 'root' @ 'localhost' (usando senha: SIM)

Com mySQL -u root -peu entrei no banco de dados e fiz

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

Mas isso não ajudou. Você tem alguma ideia? Não encontrei resposta para perguntas semelhantes.

SQL-Neuling
fonte
Você já tentou redefinir a senha do root?
Bar Ozgur

Respostas:

277

TL; DR: Para acessar versões mais recentes de mysql / mariadb após como usuário root, após uma nova instalação, você precisa estar em um shell de root (ou seja sudo mysql -u root, ou mysql -u rootdentro de um shell iniciado por su -ou sudo -iprimeiro)


Tendo acabado de fazer a mesma atualização, no Ubuntu, tive o mesmo problema.

O que era estranho era que

sudo /usr/bin/mysql_secure_installation

Aceitaria minha senha e permitiria que eu a definisse, mas não consegui fazer login como rootpor meio do mysqlcliente

Eu tive que começar o mariadb com

sudo mysqld_safe --skip-grant-tables

para obter acesso como root, enquanto todos os outros usuários ainda podem acessar corretamente.

Olhando para a mysql.usertabela, notei que para root a plugincoluna está configurada para unix_socketenquanto todos os outros usuários estão configurados para 'mysql_native_password'. Uma olhada rápida nesta página: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ explica que o Unix Socket permite o login combinando uido processo que executa o cliente com o do usuário no mysql.usertabela. Em outras palavras, para acessar o mariadb, rootvocê precisa estar logado como root.

Com certeza reiniciando meu daemon mariadb com autenticação necessária, posso fazer o login como root com

sudo mysql -u root -p

ou

sudo su -
mysql -u root -p

Tendo feito isso pensei em como acessar sem ter que fazer o sudo, que é apenas uma questão de executar essas consultas mysql

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

(substituindo <password>pela senha de root do mysql desejada). Esta senha habilitada faz login para o usuário root.

Como alternativa, execute a consulta mysql:

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

Irá mudar a conta root para usar login com senha sem mudar a senha, mas isso pode deixar você com uma instalação mysql / mariadb sem senha root.

Depois de qualquer um desses, você precisa reiniciar o mysql / mariadb:

sudo service mysql restart

E voila, tive acesso de minha conta pessoal via mysql -u root -p

OBSERVE QUE FAZER ISSO ESTÁ REDUZINDO A SEGURANÇA Presumivelmente, os desenvolvedores do MariaDB optaram por ter o acesso root funcionando assim por um bom motivo.

Pensando nisso, estou muito feliz de ter que fazer sudo mysql -u root -pisso, então estou voltando para isso, mas pensei em postar minha solução porque não consegui encontrar nenhuma em outro lugar.

DorianFM
fonte
7
"para acessar mariadb como root, você precisa estar logado como root." - Esta frase deve estar no topo da resposta.
Philipp Ludwig
1
por que você executa o GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; comando duas vezes antes de liberar privvies?
Blairg23
4
Deve estar em algum lugar mais visível, como grandes letras vermelhas durante a instalação ou algo assim ... Só perdi algumas horas de vida tentando configurar o servidor que preciso o mais rápido possível ....
Gall Annonim
1
aliás, se você for preguiçoso como eu, pode economizar dois segundos comsudo service mysql restart
Zeisi
1
Obrigado pela dica, ótimo para dev, mas como reverter isso de volta ao original?
Sam
42

No Ubuntu 16.04 LTS limpo, o login raiz do MariaDB para localhost mudou de estilo de senha para estilo de login sudo ...

então, apenas faça

sudo mysql -u root

já que queremos fazer o login com senha, crie outro usuário 'usuário'

no console MariaDB ... (você obtém no console MariaDB com 'sudo mysql -u root')

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

em seguida, no prompt do shell bash,

mysql-workbench

e você pode fazer o login com 'usuário' com 'sua senha' no localhost

Curycu
fonte
12

Experimente o comando

sudo mysql_secure_installation

pressione Enter e atribua uma nova senha para root em mysql / mariadb .

Se você receber um erro como

ERROR 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/var/run/mysqld/mysqld.sock'

habilitar o serviço com

service mysql start

agora se você entrar novamente com

mysql -u root -p

se você seguir o problema, entre com sudo sue mysql -u root -pagora aplique as permissões para root

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

isso corrigiu meu problema no MariaDB .

Boa sorte

IsraelM17
fonte
10

resposta aceita do superusuário :

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

Eu tive que estar logado no Ubuntu como root para acessar o Mariadb como root. Pode ter algo a ver com o "Harden ..." que ele solicita que você faça na primeira instalação. Assim:

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

e você está dentro.

Joe C
fonte
2

O novo comando para liberar os privilégios é:

FLUSH PRIVILEGES

O antigo comando FLUSH ALL PRIVILEGES não funciona mais.

Você receberá um erro semelhante a este:

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

Espero que isto ajude :)

Sylvain
fonte
0

Sistema como o Ubuntu prefere usar o plugin auth_socket . Ele tentará autenticar comparando seu nome de usuário no banco de dados e o processo que faz a solicitação do mysql; está descrito aqui

O plugin de soquete verifica se o nome de usuário do soquete (o nome de usuário do sistema operacional) corresponde ao nome de usuário MySQL especificado pelo programa cliente para o servidor e permite a conexão apenas se os nomes corresponderem.

Em vez disso, você pode querer voltar com mysql_native_password , que exigirá usuário / senha para autenticação.

Sobre o método para conseguir isso, eu recomendo isso .

Nguyen
fonte