¿Cómo puedo hacer que el cliente MySQL lea la contraseña de mylogin.cnf?

11

Estoy tratando de hacer que el cliente mysql se conecte a un servidor mysql sin requerir que la contraseña se proporcione de forma interactiva. Pasos tomados:

1) Primero cree un archivo mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) Archivo creado con éxito:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Conéctese usando el cliente mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

¿Hay algún valor / configuración predeterminado en alguna parte que haga que el cliente ignore la contraseña en mylogin.cnf? Las propiedades de usuario y host se leyeron correctamente del archivo.

Puedo conectarme bien si proporciono la contraseña en la línea de comando:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

La versión del cliente MySQL es 5.6.22, la versión del servidor MySQL es 5.6.22, tanto en Oracle Linux 6. El cliente y el servidor están en diferentes hosts.

Gracias

Lefteris Koutsoloukas
fuente

Respuestas:

2

De cualquier forma que haga esto, probablemente tendrá una contraseña guardada en algún lugar. Incluso la ruta de inicio de sesión de MySQL 5.6 es fácilmente descifrable por cualquiera que tenga la motivación. Esa advertencia decía que esta sería una solución fácil.

En su secuencia de comandos de entorno (p. Ej. ~/.profileO ~/.bashrc), establezca

alias mysql='mysql -uUser -pPasswd -hHostname'

(por supuesto, ingrese su Usuario, Contraseña y Nombre de host deseados).

Después de volver a iniciar sesión en la shell, debería poder simplemente hacer

mysql

... que usará su alias y se conectará a la base de datos e ignorará las contraseñas en los .my.cnfarchivos.

Nota de seguridad: si hay otros usuarios en su servidor, es posible que desee chmod 700 su script de perfil para que otros usuarios no puedan acceder fácilmente a la contraseña. Cualquier administrador con root o sudo podrá verlo todavía; no hay forma de evitar eso.

Joshua Huber
fuente
Esta es una solución al problema real, pero estoy bien con esto. Acepto esta respuesta con el descargo de responsabilidad para futuros lectores de que la forma correcta de hacerlo es la respuesta de Nawaz, pero eso no funciona en mi entorno por una razón desconocida. ¡Gracias!
Lefteris Koutsoloukas
1
-1 esto no responde a la consulta del OP ni evita almacenar una contraseña en un archivo. la contraseña ahora se almacena en .profile en lugar de .mylogin.cnf. Pero ahora el comando ps muestra la contraseña.
milagro173
@miracle, valide su afirmación de que ps revelará la contraseña. En mis sistemas, la contraseña se muestra enmascarada como xxxxxxx en la salida ps. Si su cliente MySQL no está actuando como el mío, publique qué versión y distribución de mysql está ejecutando. ¿Y tiene una mejor respuesta a la pregunta real del OP?
Joshua Huber
2
@joshua: Pautas para el usuario final para la seguridad de la contraseña : "Use una opción -pyour_passu --password=your_passen la línea de comando (...) Esto es conveniente pero inseguro ".
milagro173
10

use el siguiente comando para establecer primero la ruta de inicio de sesión

mysql_config_editor set --login-path = lgpath --user = root -p
contraseña

y luego use el siguiente comando para iniciar sesión en mysql

mysql --login-path = lgpath

La ayuda sobre las opciones de ruta de inicio de sesión de mysql puede ser vista por

mysql_config_editor set --help

Nawaz Sohail
fuente
Intenté establecer una ruta de inicio de sesión explícitamente como sugirió, pero desafortunadamente tiene el mismo comportamiento: $ mysql_config_editor print --all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpath ERROR 1045 (28000): acceso denegado para el usuario '<usuario>' @ '<host>' (usando la contraseña: NO)
Lefteris Koutsoloukas
3

Tuve el mismo problema que OP, pero las respuestas en este hilo me confundieron. El enlace de Vinay Mandala realmente funcionó para mí. Publicado aquí para mayor claridad.

Mi problema:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Demuestra que mysql_config_editorno maneja caracteres especiales en la contraseña correctamente.

Solución:

Cuando le mysql_config_editorsolicite la contraseña, asegúrese de ponerla entre comillas dobles (") . Luego, puede iniciar sesión correctamente.

quexy
fuente
1

Recibía este error, excepto que decía (usando la contraseña: SÍ)

La razón mencionada por Giovanni fue debido a un "#" en la contraseña. Descubrí que una solución alternativa es insertar comillas alrededor de su contraseña cuando se le solicite. La misma restricción existe con las contraseñas de texto sin formato que usan .my.cnf.

gamorten
fuente
0

La respuesta de Nawaz es correcta. Tengo poco que agregar. Le sugiero que haga algunos intentos con la variable de entorno MYSQL_TEST_LOGIN_FILE para crear un nuevo archivo de configuración, en caso de que el archivo predeterminado esté dañado. Úselo también --no-defaultspara omitir .cnfarchivos. Si la contraseña contiene el carácter #, mysql login-pathno funciona.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test
Giovanni
fuente
Esta variable de entorno no se estableció. Lo configuré pero obtuve exactamente el mismo comportamiento. Se ignoró la contraseña en mylogin.cnf.
Lefteris Koutsoloukas
¿Estás seguro del usuario que mysqles el comando exec mysql? De lo contrario, cambie el propietario de mylogin.cnfy debería funcionar :)
Iazel
0

Me encuentro con un problema similar al del póster original. Sospecho que tiene que ver con los caracteres de la contraseña que no se cifran / descifran correctamente.

Para confirmar, intente cambiar la contraseña a algo simple y vea si este problema desaparece.

Plazgoth
fuente
Tuve el mismo problema. Como señaló Plazgoth , tenía un carácter especial en la contraseña y no funcionaba. Lo que funcionó para mí es la sugerencia del usuario bglad en esta publicación
Vinay Mandala
0

Tuve este problema con un script de shell. Mi script estaba cambiando el valor de $ HOME y esto causó que --login-path = *** pareciera ignorarse. Cuando dejé de cambiar el valor de $ HOME, comenzó a funcionar.

dbCarl
fuente
0

NOTA: si está intentando ejecutar el usuariopath bajo Linux root , no puede simplemente usarlo sudo. Debe iniciar sesión como IE raíz

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

También como se menciona en otras publicaciones aquí. Debe usar comillas dobles alrededor de su mysqlcontraseña si contiene algo más que caracteres alfanuméricos.

Zak
fuente