ERRO 1698 (28000): acesso negado para o usuário 'root' @ 'localhost'

382

Estou configurando um novo servidor e continuo enfrentando esse problema.

Quando tento fazer login no banco de dados MySQL com o usuário root, recebo o erro:

ERRO 1698 (28000): acesso negado para o usuário 'root' @ 'localhost'

Não importa se eu conectar através do terminal (SSH), através do PHPMyAdmin ou de um cliente MySQL, por exemplo, Navicat. Todos eles falham.

Procurei na tabela mysql.user e obtenha o seguinte:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Como você pode ver, o root deve ter acesso.

O servidor é bastante simples, pois tentei solucionar isso por um tempo agora.

Ele está executando o Ubuntu 16.04.1 LTS com Apache, MySQL e PHP, para que ele possa hospedar sites, e o iRedMail 0.9.5-1, para que possa hospedar e-mails.

O login no banco de dados MySQL funciona bem antes de instalar o iRedMail. Eu também tentei, basta instalar o iRedMail, mas depois o root também não funciona ...

Se alguém puder me dizer como soluciono meu problema de login no MySQL ou como instalo o iRedMail, além de uma instalação existente do MySQL. E sim, eu tentei as dicas de instalação e não consigo encontrar essas variáveis ​​nos arquivos de configuração.

Folkmann
fonte
Eu segui este link e a primeira opção funcionou para mim: askubuntu.com/questions/763336/...
Mikael Arhelger
3
sudo mysql_secure_installationé a maneira mais fácil de consertar isso #
Sergey Ponomarev

Respostas:

1121

Em alguns sistemas, como o Ubuntu, o mysql está usando por padrão o plugin auth_socket do UNIX .

Basicamente significa que: db_users using it, será "auth" pelas credenciais do usuário do sistema. Você pode ver se seu rootusuário está configurado assim, fazendo o seguinte:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Como você pode ver na consulta, o rootusuário está usando o auth_socketplugin

Existem 2 maneiras de resolver isso:

  1. Você pode configurar o usuário root para usar o mysql_native_passwordplugin
  2. Você pode criar um novo db_usercom você system_user(recomendado)

Opção 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Opção 2: (substitua YOUR_SYSTEM_USER pelo nome de usuário que você possui)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Lembre-se de que se você usar a opção 2, precisará se conectar ao mysql como o nome de usuário do seu sistema ( mysql -u YOUR_SYSTEM_USER)

Nota: Em alguns sistemas (por exemplo, Debian stretch), o plugin 'auth_socket' é chamado de 'unix_socket' , portanto, o comando SQL correspondente deve ser:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Update: do comentário de @yy parece que o mysql 8.xx atualizou / substituiu o auth_socketpara caching_sha2_passwordEu não tenho uma configuração do sistema com o mysql 8.xx para testar isso, no entanto, as etapas acima devem ajudá-lo a entender o problema. Aqui está a resposta:

Uma mudança no MySQL 8.0.4 é que o novo plug-in de autenticação padrão é 'caching_sha2_password'. O novo 'YOUR_SYSTEM_USER' terá esse plug-in de autenticação e você poderá fazer login no shell bash agora com "mysql -u YOUR_SYSTEM_USER -p" e fornecer a senha para esse usuário no prompt. Não há necessidade da etapa "UPDATE user SET plugin". Para a atualização do plug-in de autenticação padrão 8.0.4, consulte https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

zetacu
fonte
5
A opção 1 funcionou para mim. Mas então eu também precisava correr sudo gedit /etc/phpmyadmin/config.inc.php. Depois, procurei AllowNoPassworde descomentei as duas linhas que a continham. Então eu consegui entrar como root sem senha.
Joe
7
A opção 2 funciona. Eu acho que é sempre uma boa prática criar um novo usuário e usar deixar o root para estar lá!
PasinduJay
2
o IDENTIFIED BY ''pouco provavelmente deve serIDENTIFIED BY 'YOUR_PASSWD'
YakovL
4
Finalmente, uma resposta que realmente funciona ! Há um zilhão de respostas por aí dizendo do mysqld_safe --skip-grant-tablesetc, e não está funcionando.
Stewart
4
Ok, como fazer isso, se sudo mysql -u root -pnão me deixar entrar?
Hrvoje T
173

Verifique aqui:

NOVA versão do MYSQL faz desta maneira.

No novo my-sql, se a senha for deixada vazia durante a instalação, será baseada no auth_socketplug - in.

A maneira correta é fazer login no my-sql com sudoprivilégio.

$ sudo mysql -u root -p

E, em seguida, atualize a senha usando:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Uma vez feito isso, stop and starto servidor mysql.

$  sudo service mysql stop
$  sudo service mysql start

Para detalhes completos, você pode consultar este link .

Comente por qualquer dúvida.

Nandesh
fonte
4
Isso funcionou para mim usando o Ubuntu 18. Muito obrigado.
Peter Drinnan
10
Também funcionou no ubuntu 18.04
sgtkuncoro
2
Exatamente o que eu estava procurando. Obrigado :) Trabalhou no Ubuntu 18
Manthan_Admane
2
isso funcionou como um encanto, lubuntu 19.04
Kvvaradha 30/07/19
3
Isso funciona bem. O link é útil.
kjohri 26/01
9

Eu estava tendo esse problema em uma VM Debian 8 com a qual estava interagindo através do Putty na área de trabalho do Windows 10.

Tentei as várias sugestões aqui, mas nada funcionou e estou executando o MariaDB no host Debian. No final, descobri que não podia iniciar o servidor db no modo de segurança, mas não precisava e os seguintes comandos realmente funcionaram para mim, ou seja, permitindo que um usuário MySql recém-criado efetue login no servidor MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Se o acima não funcionar muito bem para você, siga as etapas descritas na postagem do zetacu acima ( zetacu ) e siga meus passos.

Agora você deve poder usar um cliente de terminal remoto e efetuar logon com segurança no mysql usando o comando:

mysql -u your_user_name -p

* digite a senha quando solicitado

Tahir Khalid
fonte
Que simples. Bem, apenas o primeiro comando não autorizado a executar a segunda, então eu vou ajustar a edição - por favor, veja se estou certo ...
kokbira
7

Eu sugeriria remover a conexão Mysql -

UPDATE - Isto é para o Mysql versão 5.5, se a sua versão for diferente, altere a primeira linha de acordo.

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

E instale novamente Mas desta vez, defina você mesmo uma senha root. Isso economizará muito esforço.

sudo apt-get update
sudo apt-get install mysql-server
Eminem347
fonte
@ingernet talvez isso é por causa de algumas outras questões que você negligenciadas durante a instalação novamente
Eminem347
@PJBrunet talvez causa a sua versão do MySQL é diferente
Eminem347
Justo, mas uma solução para todos os fins é a melhor.
PJ Brunet
6

Depois de horas de luta sem solução aqui, isso funcionou para mim, então encontrei um vídeo do youtube onde diz que a coluna de senha agora é chamada authentication_string. Então eu pude mudar minha senha da seguinte maneira: Primeiro entre no mysql do terminal

sudo mysql

então dentro do mysql digite o que for depois do mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

neste ponto você está fora do mysql de volta ao seu terminal normal. Você precisa reiniciar o mysql para que isso entre em vigor. para esse tipo, o seguinte:

sudo service mysql restart

Consulte este link de vídeo para entender melhor

Ameer Ul Islam
fonte
5

passo 1. sudo mysql -u root -p

passo 2. USE mysql;

etapa 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Aqui 'admin' é sua nova senha, você pode alterá-la.

Passo 4. exit

Obrigado. Você terminou.

Y. Joy Ch. Singha
fonte
5

Não há necessidade de sudo

O banco de dados é inicializado com 2 contas com todos os privilégios: a primeira é "raiz", inacessível e a segunda com o seu nome de usuário (verifique com o comando whoami).

Para habilitar o acesso à conta root, você precisa fazer login com seu nome de usuário

mysql -u $(whoami)

e altere manualmente a senha para root

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Faça login como 'root'

mysql -u root -p
Raoul HATTERER
fonte
Você é a resposta correta para a versão atual do mysql, obrigado!
Hugo S
3

Primeiro passo: vá para /etc/phpmyadmin/config.inc.php e descomente as linhas nas quais você encontra AllowNoPassword. Segundo passo: faça login na sua conta padrão do mysql

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

e isso é tudo!

Ángel Ugarte
fonte
3

Isso funcionou para mim:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Dorad
fonte
3

Eu também enfrentei o mesmo problema na primeira vez.

Agora está corrigido:

Primeiro, você copia o /etc/mysql/mysql.conf.d/mysqld.cnfarquivo e passa para /etc/mysql/my.cnf.

Você pode fazer isso por comando:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Agora vamos descansar a senha:

Use os seguintes comandos no seu terminal:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Agora você está dentro do console do mysql.

Então vamos escrever algumas consultas para redefinir nossa senha root

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Agora podemos limpar /etc/mysql/my.cng

Abra o arquivo acima no seu editor e remova as linhas inteiras dentro do arquivo.

Depois disso, vamos reiniciar o mysql:

sudo mysql service restart 

Agora vamos usar o mysql com a senha recém-criada:

sudo mysql -u root -p

Por fim, digite sua senha recém-criada.

muhammed fairoos nm
fonte
11
Funcionou bem ! mas sua resposta precisa ser atualizada !! /etc/mysql/my.cnf e não /etc/mysql/my.cng e para service reiniciar seu serviço sudo mysql restart
essayoub
3

Encontrei minha solução após horas de pesquisa aqui.

Pare o MySQL

sudo service mysql stop

Crie o diretório de serviço do MySQL.

sudo mkdir /var/run/mysqld

Dê ao usuário do MySQL permissão para gravar no diretório de serviço.

sudo chown mysql: /var/run/mysqld

Inicie o MySQL manualmente, sem verificações de permissão ou rede.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Faça login sem uma senha.

 mysql -uroot mysql

Atualizar senha

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Desative o MySQL.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Inicie o serviço MySQL normalmente.

sudo service mysql start
Sanjun Dev
fonte
Isso me deu um prompt do mysql quando NADA MAIS! Obrigado!
UserX
2

Você deseja acessar o MySQL com o usuário root, mas não está fornecendo a senha correta do root.

Se você precisar definir uma nova senha para root , o site do MySQL possui uma ótima documentação sobre como fazê-lo: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Vou não mostrar o processo aqui , porque a documentação MySql no link acima é clara e concisa .

Cristian Gonçalves
fonte
Obrigado pela resposta, mas como não consegui fazê-lo funcionar, decidi instalar o iRedMail com um banco de dados pgSQL.
Folkmann 2/09/16
Roger Folkman! É bom saber que você resolveu seu problema de qualquer maneira.
Cristian Gonçalves
Links quebram. O mysql.com teve muitos links quebrados ao longo dos anos. Você deve copiar e colar as informações relevantes aqui, o que é bom, desde que você atribua a fonte.
Ganso
1

os: Ubuntu18.04

mysql: 5.7

  1. adicione skip-grant-tablesao final do arquivo mysqld.cnf

  2. cp o my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. redefinir a senha
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. remova o skip-grant-tablesdo my.cnf
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. abra o mysql
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. verifique a política de senha
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. alterar a configuração do validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

note que você deve saber que erro causado por quê? validate_password_policy?

você deve redefinir sua senha para preencher a política ou alterá-la.

iamcxl
fonte
0

Isso aconteceu comigo também. O problema está no repositório mysql que já vem com a distribuição Linux. Então, quando você simplesmente faz: $ sudo apt install mysql-server ele instala o mysql a partir de seu repositório padrão, o que gera esse problema. Então, para superar isso, você precisa desinstalar o mysql instalado $ sudo apt remove mysql* --purge --auto-remove

Então baixe o mysql repo no site oficial do mysql MySQL APT Repo Siga a documentação deles sobre como adicionar o repo e instalá-lo. Isso não dá problema. Também como respondido por @zetacu, você pode verificar se o mysql root agora realmente usa o plugin mysql_native_password

sudip
fonte
0

No meu caso,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Tenho certeza de que minha senha estava correta, caso contrário, o código de erro seria ERROR 1045 (28000): Access denied for user

então eu me conecto usando o sudo,

dev@Dev-007:~$ sudo mysql -u root -p

desta vez funcionou para mim. veja os documentos

e depois altere a senha root,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

depois reinicie o servidor usando sudo /etc/init.d/mysql restart

Mohideen bin Mohammed
fonte