11 votos

¿Por qué añadir un carácter a mi contraseña de MySQL me bloquea?

Puedo conectarme a través de mysql -u myuser -p mydb -h localhost con esto:

grant all privileges on mydb.* to myuser@'%' identified by
  '1234567890123456789012345678901234567890123456789012345678901234567890123456789';

Pero no después de hacer esto:

grant all privileges on mydb.* to myuser@'%' identified by
  '12345678901234567890123456789012345678901234567890123456789012345678901234567890';

¿De dónde viene este límite duro de 79 caracteres para una contraseña de base de datos?

3 votos

No sé la respuesta a su pregunta, pero hay otro límite que hay que tener en cuenta también si se hace una réplica.

0 votos

No veo ninguna limitación dura en el código: github.com/MariaDB/server/blob/

31voto

Jacob Puntos 1861

Como ha explicado Mircea Vutcovici, la contraseña sólo se almacena después del hash, lo que significa que tendrá una longitud fija cuando se almacene.
Es decir, no es obvio que deba existir tal limitación.

Creo que lo que se encontró puede ser más bien una limitación impuesta específicamente por el mysql cliente aplicación.

El get_tty_password parece leer la contraseña en char buff[80]; , lo que implicaría 79 caracteres + terminación nula.

https://github.com/MariaDB/server/blob/b4fb15ccd4f2864483f8644c0236e63c814c8beb/mysys/get_password.c#L155

(¿Existe la limitación si se utiliza un cliente diferente?)

5voto

jcollum Puntos 10236

Las contraseñas almacenadas se basan en el SHA-1 cadena hash de la contraseña suministrada. No se encriptan, sino que se hace un hash. Esto significa que todas las contraseñas tienen la misma longitud en la tabla mysql.user.

MariaDB [(none)]> grant all privileges on mydb.* to myuser@'%' identified by   '12345678901234567890123456789012345678901234567890123456789012345678901234567890';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> select host, user, password from mysql.user where user='myuser';
+------+--------+-------------------------------------------+
| host | user   | password                                  |
+------+--------+-------------------------------------------+
| %    | myuser | *B3E74714C91FEC20BA4D5225155437727FBFD6CE |
+------+--------+-------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> select password('12345678901234567890123456789012345678901234567890123456789012345678901234567890') ;
+----------------------------------------------------------------------------------------------+
| password('12345678901234567890123456789012345678901234567890123456789012345678901234567890') |
+----------------------------------------------------------------------------------------------+
| *B3E74714C91FEC20BA4D5225155437727FBFD6CE                                                    |
+----------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> SELECT UPPER(SHA1(UNHEX(SHA1("12345678901234567890123456789012345678901234567890123456789012345678901234567890"))));
+--------------------------------------------------------------------------------------------------------------+
| UPPER(SHA1(UNHEX(SHA1("12345678901234567890123456789012345678901234567890123456789012345678901234567890")))) |
+--------------------------------------------------------------------------------------------------------------+
| B3E74714C91FEC20BA4D5225155437727FBFD6CE                                                                     |
+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>

Compara el hash almacenado con el calculado como arriba:

select host, user, password from mysql.user;

Para 'localhost' hay que añadir:

grant all privileges on mydb.* to myuser@'localhost' identified by   '12345678901234567890123456789012345678901234567890123456789012345678901234567890';

También hay que añadir esta concesión porque '%' no coincide con la conexión 'localhost'.

Para conectarse es necesario proporcionar la contraseña en la línea de comandos para superar la limitación de 80 caracteres mencionada por @Håkan Lindqvist en el cliente de MySQL.

mysql -u myuser -p12345678901234567890123456789012345678901234567890123456789012345678901234567890 mydb

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: