Como recupero meu nome de usuário e senha do MySQL?

158

Perdi meu nome de usuário e senha do MySQL. Como faço para recuperá-lo?

Marcel
fonte

Respostas:

186

Pare o processo do MySQL.

Inicie o processo MySQL com a opção --skip-grant-tables.

Inicie o cliente do console MySQL com a opção -u root.

Listar todos os usuários;

SELECT * FROM mysql.user;

Redefinir senha;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Mas NÃO SE ESQUEÇA a

Pare o processo MySQL

Inicie o processo MySQL normalmente (ou seja, sem a opção --skip-grant-tables)

quando tiver terminado. Caso contrário, a segurança do seu banco de dados poderá ser comprometida.

Xenph Yan
fonte
7
Pense que você não precisa reiniciar o daemon para redefinir usuários normais. apenas "DESCARREGAR PRIVILÉGIOS"; depois de atualizar a senha do usuário. --skip-grant-tables necessário apenas para redefinir a senha do usuário root! Isso geralmente não seria recomendado para uma redefinição padrão do usuário.
Amos Folarin
Qual é o significado de usar o dpkg-reconfigure mysql-server-5.5comando para redefinir a senha root do MySQL?
PhillipsK
@ Xenph, Por que você diz " Inicie o cliente do console MySQL com a opção -u root "? Não faz sentido fazer isso, pois -ué ignorado quando o servidor é iniciado --skip-grant-tables.
precisa saber é
15
No MySQL 5.7. *, Não há coluna na mysql.userchamada password, use em authentication_stringvez disso.
Adib Aroui
3
Eu achei isso + stackoverflow.com/a/35277160/1604601 muito útil
Alien Life Form
42

Infelizmente sua senha de usuário é irrecuperável. Foi hash com um hash unidirecional que, se você não souber, é irreversível. Eu recomendo ir com o Xenph Yan acima e apenas criar um novo.

Você também pode usar o seguinte procedimento do manual para redefinir a senha de qualquer conta raiz do MySQL no Windows:

  1. Faça logon no seu sistema como administrador.
  2. Pare o servidor MySQL se estiver em execução. Para um servidor que está sendo executado como um serviço do Windows, acesse o Gerenciador de serviços:

Menu Iniciar -> Painel de Controle -> Ferramentas Administrativas -> Serviços

Em seguida, encontre o serviço MySQL na lista e pare-o. Se o seu servidor não estiver sendo executado como um serviço, pode ser necessário usar o Gerenciador de Tarefas para forçá-lo a parar.

  1. Crie um arquivo de texto e coloque as seguintes instruções nele. Substitua a senha pela senha que você deseja usar.

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

    As instruções UPDATE e FLUSH devem ser escritas em uma única linha. A instrução UPDATE redefine a senha de todas as contas raiz existentes e a instrução FLUSH informa ao servidor para recarregar as tabelas de concessão na memória.

  2. Salve o arquivo. Neste exemplo, o arquivo será nomeado C: \ mysql-init.txt.
  3. Abra uma janela do console para acessar o prompt de comando:

    Menu Iniciar -> Executar -> cmd

  4. Inicie o servidor MySQL com a opção especial --init-file :

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    Se você instalou o MySQL em um local diferente de C: \ mysql , ajuste o comando de acordo.

    O servidor executa o conteúdo do arquivo nomeado pela opção --init-file na inicialização, alterando cada senha da conta raiz .

    Você também pode adicionar a opção --console ao comando se desejar que a saída do servidor apareça na janela do console e não em um arquivo de log.

    Se você instalou o MySQL usando o Assistente de Instalação do MySQL, pode ser necessário especificar uma opção --defaults-file :

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

    A configuração --defaults-file apropriada pode ser encontrada usando o Gerenciador de Serviços:

    Menu Iniciar -> Painel de Controle -> Ferramentas Administrativas -> Serviços

    Encontre o serviço MySQL na lista, clique com o botão direito do mouse e escolha a opção Propriedades. O campo Caminho para o executável contém a configuração --defaults-file .

  5. Após o servidor ser iniciado com êxito, exclua C: \ mysql-init.txt .
  6. Pare o servidor MySQL e reinicie-o novamente no modo normal. Se você executar o servidor como um serviço, inicie-o na janela Serviços do Windows. Se você iniciar o servidor manualmente, use o comando que você normalmente usa.

Agora você deve conseguir se conectar ao MySQL como root usando a nova senha.

Jake
fonte
5
@ Jake - obrigado pela resposta. Eu queria dar um joinha, mas por alguma razão o stackoverflow não me permite fazer isso por causa de pontos de reputação. sua explicação "infelizmente sua senha de usuário é irrecuperável. Ela foi dividida em hash com um hash unidirecional que, se você não sabe que é irreversível", foi a chave para meu entendimento, porque tudo o que eu li no google SOMENTE me deu instruções para alterar minha senha. senha. boas explicações são mais esclarecedoras do que apenas instruções.
dsdsdsdsd
1
@jake não consigo encontrar o mysql na lista de serviços Por favor, diga-me o que fazer?
1
Por que é seu em mysqld-ntvez de mysqld?
Pacerier
Btw, existe uma opção que não seja de arquivo --init-file? (Algo semelhante ao do mysql.exe --executecomando.)
Pacerier
34

Uma melhoria para a resposta mais útil aqui:

1] Não há necessidade de reiniciar o servidor mysql
2] Preocupação com a segurança de um servidor MySQL conectado a uma rede

Não há necessidade de reiniciar o servidor MySQL.

use FLUSH PRIVILEGES;após a atualização mysql.user para alterar a senha.

A instrução FLUSH informa ao servidor para recarregar as tabelas de permissões na memória para que ele note a alteração da senha.

O --skip-grant-optionspermite que qualquer pessoa se conectar sem uma senha e com todos os privilégios. Como isso é inseguro, convém

use --skip-grant-tables em conjunto com --skip-networking para impedir que clientes remotos se conectem.

from: reference: resetting-Permissions-generic

ThinkingMonkey
fonte
@ThinkingMonkey, isso não pressupõe que o usuário conectado atual tenha privilégios para modificar mysql.user? Muitas vezes, porém, esse não é o caso.
Pacerier
6

Embora você não possa recuperar diretamente uma senha do MySQL sem forçar brutalidade, pode haver outra maneira - se você usou o MySQL Workbench para se conectar ao banco de dados e salvou as credenciais no "cofre", você está certo.

No Windows, as credenciais são armazenadas em % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - criptografadas com CryptProtectData (sem nenhuma entropia adicional). Descriptografar é fácil:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

Ou você pode conferir este thread do DonationCoder para obter o código fonte + executável de uma implementação rápida e suja.

snemarch
fonte
2
Isso foi perfeito. Existe um exe com o código fonte no thread snemarch mencionado para recuperar a senha da minha conta de usuário armazenada no meu cofre do MySQL Workbench. Embora esses outros métodos provavelmente também funcionariam se eu tivesse direitos de ler ou atualizar a tabela de usuários.
RobbZ
Mas, relativamente falando, pouquíssimas pessoas estão usando o Workbench.
Pacerier
Aqui é outra aplicação que pode ser executado depois de construir com o Visual Studio para recuperar informações de usuário e senha armazenados do Workbench: github.com/wclear/MySQLWorkbenchPasswordViewer
bnp887
6

Faça isso sem tempo ocioso

Execute o seguinte comando no Terminal para conectar-se ao DBMS (você precisa de acesso root):

sudo mysql -u root -p;

execute a senha de atualização do usuário de destino (por exemplo, o nome de usuário mousavie a senha devem ser 123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

Neste ponto, você precisa fazer um flush para aplicar as alterações:

FLUSH PRIVILEGES;

Feito! Você fez isso sem parar ou reiniciar o serviço mysql.

SMMousavi
fonte
5

Se você possui acesso root ao servidor em que o mysql está executando, você deve parar o servidor mysql usando este comando

sudo service mysql stop

Agora inicie o mysql usando este comando

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

Agora você pode fazer login no mysql usando

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

Instruções completas podem ser encontradas aqui http://www.techmatterz.com/recover-mysql-root-password/

Sajjad Ashraf
fonte
3

Entre no MySql do windows cmd usando o usuário existente:

mysql -u nome de usuário -p
Digite a senha: ****

Em seguida, execute o seguinte comando:

mysql> SELECT * FROM mysql.user;

Depois disso, copie a senha md5 criptografada para o usuário correspondente e existem vários aplicativos descriptografados por senha online disponíveis na web. Usando essa senha descriptografada e use-a para fazer login na próxima vez. ou atualize a senha do usuário usando o comando flow:

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Em seguida, faça o login usando a nova senha e usuário.

Syeful Islam
fonte
0

Se você tiver o ODBC configurado, poderá obter a senha no arquivo de configuração do ODBC. Isso está no /etc/odbc.ini para Linux e na pasta Software / ODBC no registro no Windows (existem vários - pode demorar um pouco)

samplesize1
fonte
0

Salve o arquivo. Neste exemplo, o arquivo será nomeado C: \ mysql-init.txt. solicitando permissões administrativas para salvar o arquivo

user12261119
fonte
-1

Apesar de uma rigorosa lógica, interpretação, science'ish computador da pergunta do op seria exigir tanto "Como posso recuperar o meu nome de usuário MySQL" e "password" - eu pensei que poderia ser útil a alguém para também abordar a OR interpretação. Em outras palavras ...

1) Como recupero meu nome de usuário MySQL?

OU

2) senha

Essa última condição já parece ter sido amplamente abordada, então não vou me preocupar com isso. A seguir, é apresentada uma solução para o caso "Como recupero meu nome de usuário MySQL" sozinho. HIH.

Para encontrar o seu nome de usuário do mysql, execute os seguintes comandos no shell do mysql ...

SELECT Usuário FROM mysql.user;

irá imprimir uma tabela de todos os usuários do mysql.

brilho
fonte
1
Esta é uma resposta tardia e você deve publicá-las somente se a sua solução for claramente diferente da já publicada ou aceita. Não é neste caso, especialmente que sua resposta duplica uma resposta aceita.
m.cekiera