Acesso negado para usuário 'root' @ 'localhost' (usando senha: SIM) - Sem privilégios?

111

Estou continuamente recebendo esse erro.

Estou usando o mySQL Workbench e pelo que estou descobrindo é que os privilégios de esquema do root são nulos. Não há privilégios em tudo.

Estou tendo problemas nas plataformas para as quais meu servidor é usado e isso tem sido um problema repentino.

[email protected] aparentemente tem muito acesso, mas estou logado assim, mas ele apenas atribui ao localhost de qualquer maneira - localhost não tem privilégios.

Eu fiz algumas coisas como FLUSH HOSTS, FLUSH PRIVILEGESetc, mas não tive sucesso com isso ou na Internet.

Como posso obter acesso ao root de volta? Acho isso frustrante porque quando eu olho em volta as pessoas esperam que você "tenha acesso", mas eu não tenho acesso, então não posso entrar na linha de comando ou qualquer coisa eGRANT eu mesmo nada.

Ao executar SHOW GRANTS FOR rootisto é o que recebo em troca:

Código de erro: 1141. Não existe tal concessão definida para o usuário 'root' no host '%'

correr atrás
fonte
Execute SHOW GRANTS FOR rootem uma consulta, poste o resultado em sua pergunta.
NobleUplift
Você está tentando acessar o banco de dados do host local ou de outro host usando o MySQL Workbench?
Andy Jones
reinicie o servidor com --skip-grant-table e faça login com qualquer usuário e forneça todos os privilégios de root e reinicie o servidor novamente sem a opção acima
vidyadhar
@AndyJones não, está em um servidor dedicado que estou usando.
Chase
@vidyadhar, desculpe, não tenho certeza de onde faria isso.
Chase

Respostas:

52

Use as instruções para redefinir a senha do root - mas em vez de redefinir a senha do root, iremos inserir à força um registro na tabela mysql.user

No arquivo init, use isso

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
Andy Jones
fonte
1
Sinto muito, Andy, mas quando chego à etapa 6, sempre encontro um problema. Como usei um assistente de instalação, usaria "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt Tudo está onde deveria estar e o que você colocou acima, coloquei no arquivo de acordo. Eu também interrompi o serviço. Acabei de receber esta saída: prntscr.com/1ilxau E tudo (plug-ins) desligamento. Muito confuso.
Chase
2
você está executando isso como um administrador?
Andy Jones
1
Para minha surpresa estúpida, eu não estava. Depois de fazer isso, peguei este prntscr.com/1imcnj - a primeira vez que fiz nas próprias linhas (a partir da colagem), coloquei tudo em uma linha. Lamento que isso seja tão confuso para mim, não para o especialista em sql em si.
Chase
16
dá: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'erro. @AndyJones
alper
1
Estou recebendo: coluna desconhecida 'Senha' na 'lista de campos'
sricheta ruj
130

Se você tiver o mesmo problema no MySql 5.7. +:

Access denied for user 'root'@'localhost'

é porque o MySql 5.7 por padrão permite a conexão com o soquete, o que significa que você apenas conecta com sudo mysql. Se você executar sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;

então você vai ver:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Para permitir a conexão com root e senha, atualize os valores na tabela com o comando:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

Em seguida, execute o comando select novamente e você verá que ele mudou:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

E é isso. Você pode executar este processo depois de executar e concluir o sudo mysql_secure_installationcomando.

Para mariadb, use

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

para definir a senha. Mais em https://mariadb.com/kb/en/set-password/

KeitelDOG
fonte
1
Muito obrigado durante a conexão. Estabelecimento no linux mint
Lova Chittumuri
Atualizar de auth_socketpara mysql_native_passwordcorrigiu meu problema. Obrigado!
olore
1
Isso era absolutamente enfurecedor tentar descobrir e uma enorme perda de tempo. Eu gostaria que eles perguntassem isso durante mysql_secure_installation. Muito obrigado por esta resposta.
PatPeter
isso também foi útil stackoverflow.com/questions/2995054/…
Abeer Sul
42

Ele não gostou do meu privilégio de usuário, então eu o SUDO. (em bash << sudo definir usuário e senha) (fornece o nome de usuário do root e define a senha para nada) (no Mac)

sudo mysql -uroot -p
Dan Kaiser
fonte
27

Tente os seguintes comandos

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, 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> 
aashish
fonte
11
No MySQL 5.7, o campo de senha no campo da tabela mysql.user foi removido, agora o nome do campo é 'authentication_string'.
Rumid
para a versão mais recente do mysql, eles mudaram o nome da coluna de senha como authentication_string
Ramesh Maharjan
sudo mysqld_safeconsegui isso /var/run/mysqld for UNIX socket file don't exists, depois mkdir -p /var/run/mysqlde sudo chown -R mysql:mysql /var/run/mysqld/funcionou e começou o daemon.
kenzotenma
1
ERROR 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/var/run/mysqld/mysqld.so
Mostafa
19

para as pessoas que estão enfrentando erros abaixo na versão do mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Abra um novo terminal

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc está parado

  3. sudo mysqld_safe --skip-grant-tables & isto irá pular todos os privilégios de nível de concessão e iniciar o mysql em modo de segurança Às vezes o processo travou apenas por causa de

grep: erro de gravação: pipe quebrado 180102 11:32:28 mysqld_safe Logging para '/var/log/mysql/error.log'.

Basta pressionar Ctrl + Z ou Ctrl + C para interromper e sair do processo

  1. mysql -u root

Bem-vindo ao monitor MySQL. Os comandos terminam com; ou \ g. Seu ID de conexão MySQL é 2 Versão do servidor: 5.7.8-rc MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle e / ou suas afiliadas. Todos os direitos reservados.

Oracle é uma marca registrada da Oracle Corporation e / ou de suas afiliadas. Outros nomes podem ser marcas registradas de seus respectivos proprietários.

Digite 'help;' ou '\ h' para obter ajuda. Digite '\ c' para limpar a instrução de entrada atual.

  1. mysql> use mysql;

Lendo as informações da tabela para completar os nomes das tabelas e colunas Você pode desligar este recurso para obter uma inicialização mais rápida com -A

Banco de dados alterado

  1. mysql> update user set authentication_string=password('password') where user='root'; Query OK, 4 linhas afetadas, 1 aviso (0,03 seg) Linhas correspondidas: 4 Alteradas: 4 Avisos: 1

  2. mysql> flush privileges; Query OK, 0 linhas afetadas (0,00 seg)

  3. mysql> quit tchau

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld do arquivo pid /var/run/mysqld/mysqld.pid finalizado. * MySQL Community Server 5.7.8-rc interrompido arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc iniciado

  1. mysql -u root -p

    Digite a senha:

    Bem-vindo ao monitor MySQL. Os comandos terminam com; ou \ g. Seu ID de conexão MySQL é 2 Versão do servidor: 5.7.8-rc MySQL Community Server (GPL)

após a versão do mysql 5.7+, a senha da coluna substituída pelo nome authentication_string da tabela mysql.user.

espero que essas etapas ajudem alguém, obrigado.

ArifMustafa
fonte
15

Eu estava usando o ubuntu 18 e simplesmente instalei o MySQL (senha: root) com os seguintes comandos.

sudo apt install mysql-server
sudo mysql_secure_installation

Quando tentei fazer o login com o usuário normal do Ubuntu, esse problema estava me ocorrendo.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Mas consegui acessar o MySQL por meio do superusuário. Usando os comandos a seguir, consegui fazer login por meio de um usuário normal.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

Então você deve conseguir fazer o login no Mysql com a conta normal.

insira a descrição da imagem aqui

Nirojan Selvanathan
fonte
5

Se você está recebendo esse erro no Workbench, mas consegue fazer login no terminal, siga estas etapas.

Primeiro, basta fazer login com sua senha atual:

sudo mysql -u root -p

Em seguida, altere sua senha porque ter uma senha de baixo nível dá erro às vezes.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Em seguida, basta sair e fazer login novamente com sua nova senha:

quit

sudo mysql -u root -p

Depois de fazer login com sucesso, digite o comando:

use mysql;

Deve mostrar uma mensagem como 'Banco de dados alterado' e digite:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

Depois desse tipo:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Em seguida, digite:

FLUSH PRIVILEGES;

Em seguida, basta sair:

quit

Agora tente fazer o login com sua nova senha em sua BANCADA. Espero que funcione. Obrigado.

Tanmoy Bhowmick
fonte
4

Eu enfrentei este problema ao instalar o Testlink no servidor Ubuntu, segui estes passos

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

Agora pare a instância e comece novamente, ou seja

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
Shridhar S Chini
fonte
2

Bem, a maneira mais fácil de redefinir a senha root é:

  • reinicie a opção mysqld --skip-grant-tables . Isso permite que qualquer pessoa se conecte sem uma senha e com todos os privilégios. Por ser inseguro, você pode querer usar --skip-grant-tables em conjunto com --skip-networking para evitar que clientes remotos se conectem.

  • Conecte-se ao servidor mysqld com este comando:

  • shell> mysql Emita as seguintes instruções no cliente mysql. Substitua a senha pela senha que você deseja usar.

  • mysql> UPDATE mysql.user SET Password = PASSWORD ('MyNewPass') -> WHERE User = 'root'; mysql> FLUSH PRIVILEGES;

  • Pare o servidor e reinicie-o normalmente (sem as opções --skip-grant-tables e --skip-networking).

Fonte da documentação do Mysql e experiência pessoal:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html

Aneesh Vijendran
fonte
1

Resolvi o mesmo problema executando o Workbench como administrador.

... Acho que é por causa de restrições aos computadores da empresa, no meu caso ...

Igor Šćepanović
fonte
0

Experimente os seguintes passos para resolver este problema:

  1. Abra o terminal / prompt de comando e navegue até a pasta bin da pasta de instalação do MySQL. Em seguida, execute o comandomysqld --console .
  2. Se você pode ver essa linha 171010 14:58:22 [Note] --secure-file-priv está definida como NULL. As operações relacionadas à importação e exportação de dados são desabilitadas, após a execução do comando acima no prompt de comando.
  3. Então você precisa verificar se o mysqld está bloqueado pelo Firewall do Windows ou outro programa.
  4. Se estiver bloqueado pelo Firewall do Windows, será necessário desbloqueá-lo e salvar as configurações.
  5. Para desbloquear o aplicativo mysqldou mysql, siga as etapas abaixo:
    1. Vá para o prompt de comando e digite wf.mscpara abrir as configurações do firewall.
    2. Clique em Permitir um aplicativo ou recurso pelo Firewall do Windows.
    3. Verifique se as instâncias mysqldou mysqldestão disponíveis na lista e marque a caixa de seleção do domínio, público e privado, e salve as configurações.
  6. Retorne à pasta bin e tente o comando da etapa 1 novamente.
  7. Deve funcionar bem e não apresentar erros.

Deve ser possível executar o console MySQL sem problemas agora!

Srinivas Krithvik
fonte
0

Resolvi o mesmo problema usando o próximo sql e reiniciando o servidor MySQL:

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';
Oleksandr Tsurika
fonte
0

Trabalhei em Acesso negado para o usuário 'root' @ 'localhost' (usando a senha: SIM) por várias horas, encontrei a seguinte solução,

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections
Veera Prasad
fonte
0

Não acho que você precise escapar do --init-fileparâmetro:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

Deveria estar:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt

Jordânia
fonte
0

para o problema acima, sua senha no sistema deve coincidir com a senha que você passou no programa porque quando você executa o programa ele verifica a senha do sistema assim que você atribuiu o root como um usuário então dá um erro e ao mesmo tempo o registro não é excluído do banco de dados.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Mantenha a senha do seu sistema como jacob234 e execute o código.

Koyel Sharma
fonte
0

Comigo estava o mesmo problema, mas foi causado, porque eu estava usando o servidor mysql em 32 (bit) e o workbench rodava em versão 64 (bit). o servidor e o ambiente de trabalho precisam ter a mesma versão.

xpress

xpress
fonte
0

Para mim, eu estava usando MYSQLWorkbench e a porta era 3306 MAMP usando 8889

Abdullah Tahan
fonte
0

Eu estava enfrentando o mesmo problema ao tentar conectar o banco de dados Mysql usando o aplicativo Laravel. Eu gostaria de recomendar que verifique a senha do usuário. A senha do MySQL não deve ter caracteres especiais como # , & , etc ...

Mohit Ramani
fonte
No bluehost, a remoção de caracteres especiais da senha realmente corrigiu o problema.
Mena