He contraseña de MySQL guardado en un archivo foo.php
, por ejemplo P455w0rd
, cuando trato de usarlo:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Ambas opciones aún solicitan contraseña, ¿cuál es la forma correcta de enviar la contraseña stdin
?
-p
y su contraseña./proc
pueda leerlas trivialmente mientras el programa se esté ejecutando . Para eso~/.my.cnf
es a, correctamente modificado a 0600Respuestas:
Debes tener mucho cuidado al pasar las contraseñas a las líneas de comando, ya que, si no tienes cuidado, terminarás dejándolo abierto al uso de herramientas como
ps
.La forma más segura de hacer esto sería crear un nuevo archivo de configuración y pasarlo a
mysql
usar ya sea el--defaults-file=
o la--defaults-extra-file=
opción de línea de comandos.La diferencia entre los dos es que este último se lee además de los archivos de configuración por defecto, mientras que se utiliza con el anterior, sólo el archivo de un pasado como argumento.
Su archivo de configuración adicional debe contener algo similar a:
Asegúrese de que se asegure este archivo.
Entonces corre:
fuente
argv
para sobrescribir los parámetros dados a la-p
bandera. Al menos eso es lo que se llegó a la conclusión aquí, junto con otra información relevante: unix.stackexchange.com/questions/78757/...--login-path
ahora que es compatible. No es mucho mejor que esto, pero es un poco menos de texto sin formato (aunque la barrera para convertir el contenido a texto sin formato es baja).export MYSQL_PWD=muhpassword
) y ejecutar el comando sin el-p
. Ver Variables de entorno del programa MySQL . A pesar de las terribles advertencias del manual , esto es bastante seguro . A menos que comience warez extraño en el mismo caparazón más tarde. Así que nos encontramos:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
La
mysql
utilidad de cliente puede tener una contraseña en la línea de comandos, ya sea con la-p
o--password=
las opciones.Si usa
-p
, no debe haber ningún espacio en blanco después de la letra de opción:Prefiero las opciones largas en los scripts, ya que se auto documentan:
fuente
/proc/$pid/cmdline
través delps
comando. Es cierto que mysql sobrescribe la contraseña en argv durante el inicio, pero siempre hay una ventana de tiempo en la que otro usuario puede observar la contraseña. También, en algunos sistemas el sobreescribiendo argv no podría funcionar.Si desea comenzar
mysql
con una contraseña siempre que primero tenga que buscar la contraseña en una variable:Entonces puede comenzar su
mysql
comando con:fuente
MYSQL_PWD
variable de entorno que se leemysql
si no especifica-p
. Y en Linux esto es un método seguro, ya que el entorno de un usuario no pueda ser leída por otros usuarios unprivilleged - en contraste con el vector argumento.