Por que os hashes de senha do mysql são salvos internamente com uma estrela (asterisco)?


9

Eu estava lendo alguns internos do mysql. Ao percorrer a tabela mysql.user no meu mysqlshell, recebo

mysql> select * from mysql.user limit 1 \G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

A senha está obviamente com hash, mas por que começa com a estrela (asterisco)?

Respostas:


8

Além da senha que começa com um asterisco, aqui está o algoritmo para PASSWORD ()

SET @plaintextpassword = 'whatever password you want';
SELECT CONCAT('*',UPPER(SHA1(UNHEX(SHA1(@plaintextpassword)))));

EXEMPLO

mysql> SET @plaintextpassword = 'whatever password you want';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT UPPER(SHA1(UNHEX(SHA1(@plaintextpassword)))) PWD_CREATION;
+------------------------------------------+
| PWD_CREATION                             |
+------------------------------------------+
| D09AF2704D843A5E4E84362830C7EC1CEA40DF8A |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT PASSWORD(@plaintextpassword) PWD_FUNCTION;
+-------------------------------------------+
| PWD_FUNCTION                              |
+-------------------------------------------+
| *D09AF2704D843A5E4E84362830C7EC1CEA40DF8A |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql>

Eu aprendi esse algoritmo há muito tempo com o Hashing Algorithm no MySQL PASSWORD ()


14

Ok, encontrei sobre isso na própria documentação .

Esta foi uma alteração introduzida no mysql 4.1 para que os comprimentos de senha anteriores de 16 caracteres e os mais recentes de 40 caracteres pudessem ser suportados simultaneamente. A coluna Senha tinha 41 bytes (caracteres) e as senhas mais recentes começavam com a obrigatoriedade *de identificá-las.

A partir da documentação :

Os hashes de senha no formato 4.1 sempre começam com um caractere "*", enquanto as senhas no formato anterior à 4.1 nunca.


Esse foi o meu palpite também. Mas não retém água. Eles poderiam ter verificado o comprimento para ver se era nova vs senha antiga.
Rick James

3
@ Rick James Certamente é possível verificar o comprimento, mas existem argumentos para o uso do primeiro caractere como uma "bandeira" para permitir alterações futuras que ainda possam usar 40 caracteres, mas com um algoritmo diferente.
Monty mais duro
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.