Eu criei um usuário ... mas esqueci a senha
mysql> crie usuário 'blayo' @ '%' identificado por 'right';
Qual ferramenta de linha de comando do Linux pode criptografar a senha da mesma forma que o mysql 5.5?
mysql> selecione Senha, Usuário em mysql.user ------------------------------------------ + ------- + * 920018161824B14A1067A69626595E68CB8284CB | blayo |
... para ter certeza de usar o caminho certo
$ ferramenta certa * 920018161824B14A1067A69626595E68CB8284CB
password
mysql
encryption
Philippe Blayo
fonte
fonte
blayo
? Isso é definitivamente mais rápido do que percorrer trilhões de combinações de caracteres possíveis para encontrar a correta.Respostas:
Bem, a maneira trivial (talvez trapaceira ) seria executar:
Isso produzirá uma senha usando qualquer esquema de hash de senha que sua versão do mysql use. [ EDIT : adicionado -NB, que elimina os nomes das colunas e a arte da tabela ascii.]
fonte
mysql
de ocultá-lo do histórico do bash e usá-loSET sql_log_off=ON;
imediatamente antesSELECT ...
de ocultá-lo do log do MySQL..mysql_history
) ignorando todas as instruções correspondentes*PASSWORD*
e 2. serverside for várias stmts (excetoSELECT
). Veja: MySQL 5.7 Manual - Senhas e Log e MySQL 5.7 - Manual - MySQL Client LoggingAlguns one-liners:
MySQL (pode exigir que você adicione -u (usuário) -p):
Python :
Perl :
PHP :
Ruby :
Toda saída:
fonte
Ainda me parece que o MySQL não se incomoda em ocultar senhas na linha de comando e nos logs. E essa é a única razão pela qual estou adicionando uma resposta em vez de apenas comentar na resposta do @Gilles.
Então, é claro, você pode simplesmente acessar o MySQL como administrador e definir uma nova senha para o usuário blayo, como sugerido pelo @patrix.
No entanto, a maneira padrão de fazer isso é usando a função password () do MySQL, que leva uma senha de texto sem formatação como argumento (sério?).
Se você fizer isso, você deixará a versão em texto sem formatação da senha do usuário do MySQL no histórico do bash e nos logs do MySQL, para recuperação fácil posteriormente por quem conseguir acessar esses arquivos de log.
Não seria melhor ter um pequeno utilitário que solicitasse a senha, sem ecoá-la na tela ou nos seus logs, e depois fornecer o hash compatível com o MySQL resultante?
Então, modificando um pouco a resposta de @ Gilles, que tal um pequeno script de shell que usa Python, como o seguinte. Você pode facilmente modificar isso para executar uma instrução SQL no banco de dados MySQL para definir a senha de uma só vez. Mas mesmo sem ir tão longe, basta copiar e colar o hash resultante em uma instrução SQL para atualizar a tabela de usuários:
fonte
<!-- language: lang-bsh -->
linha). Handy! Eu gosto disso. Obrigado!Mais um usando o shell:
Explicação:
echo -n
imprimir sem quebra de linhasha1sum
primeiro SHA1xxd -r -p
unhex o hashsha1sum
segundo SHA1tr '[a-z]' '[A-Z]'
converter para maiúsculasawk '{print "*" $1}'
adicione os principais *Mais detalhes:
Entre 2. e 3. uma
awk '{printf "%s", $1}'
etapa opcional pode ser inserida para remoção de nova linha e hífen. Mas o xxd os ignorará mesmo assim (obrigado a dave_thompson_085).Além disso, as etapas 5 e 6 podem ser executadas de uma só vez, substituindo-as por
{print "*" toupper($1)}
(Graças a dave_thompson_085).fonte
awk
pode fazer o maiúscula, e produzir uma linha incompleta (última) ao terminal é incovenient:.. | sha1sum | awk '{print "*" toupper($1)}'
. E você não precisa se preocupar com o NL e até o hífen noxxd -r -p
, eles são ignorados.O hash é sha1 (sha1 (senha)) . Como não há sal (que é uma falha grave de segurança), você pode procurar o hash em uma tabela .
Com apenas as ferramentas POSIX, mais
sha1sum
do GNU coreutils ou BusyBox, o sha1 (sha1 (senha)) é irritante de calcular porque osha1sum
comando imprime o resumo em hexadecimal e não há ferramenta padrão para converter em binário.O Python possui resumos padrão em suas bibliotecas padrão, por isso é uma linha única.
Ou com a senha dentro da linha única:
fonte
read
shell interno para ler uma linha; executestty echo
primeiro se quiser desativar o eco essty +echo
ligá-lo novamente. No Python, você pode usar ogetpass
móduloSe você criou um usuário e esqueceu a senha, é isso que você deve fazer e é mais fácil.
Isso também aconteceu comigo uma dúzia de vezes enquanto eu fazia 10 bilhões de coisas ao mesmo tempo. A melhor maneira de recuperar minha senha foi:
parou o servidor mysql completamente primeiro
mysqld_safe emitido - skip-grant-tables &
então entrei como root sem emitir uma senha, apenas mysql -u mysql-user (permite entrar após o mysqld_safe)
então vá para a tabela mysql> user e atualize a senha do usuário
então volte e reinicie o mysql
veja se isso funciona e deixe-nos saber.
fonte
Outro usando o shell
... que produz:
fonte
O MySQL 4.1+ usa o SHA1 duplo
Esse algoritmo pode ser facilmente portado para outros idiomas. A diferença é que os hashes de senha na "senha de seleção" sempre começam com um caractere "*".
fonte