Tenemos un script de línea de comandos PHP para versionar una base de datos. Ejecutamos este script cada vez que un desarrollador ha agregado un nuevo parche de base de datos.
El script ejecuta el parche con la línea de comando MySQL:
system('mysql --user=xxx --password=xxx < patch.sql');
Sin embargo, MySQL 5.6 ahora emite la siguiente advertencia:
Advertencia: el uso de una contraseña en la interfaz de línea de comandos puede ser inseguro
Lo cual es obviamente cierto, pero podría o no ser un problema para el usuario.
- ¿Qué es lo seguro? alternativa entonces?
- Alternativamente, ¿es posible deshabilitar esta advertencia?
Tenga en cuenta que no quiero tener que confiar en un archivo de contraseña externo.
mysql
php
command-line-interface
Benjamín
fuente
fuente
Respuestas:
En la versión GA reciente de MySQL, es decir, la versión 5.6 , puede hacerlo a través del comando mysql_config_editor, como se describe en http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html
Básicamente, lo que hace es: encriptar sus credenciales de usuario / pase con un alias de host, y luego usar el alias de host, poner esta información en un archivo de configuración en su directorio de inicio, y luego, cuando lo necesite, en lugar de hacer algo como :
en su lugar escribes:
evitando así poner su contraseña en algún script en texto sin formato.
Para que esto funcione, primero debe (solo una vez) definirlo
myhostalias
como:Puede usar diferentes rutas de inicio de sesión para diferentes cuentas y / o hosts como desee. Muy buena idea si me preguntas.
Como nota, creo que esta funcionalidad NO existe en ninguna versión por debajo de 5.6.
fuente
mysql_config_editor
, por lo que desafortunadamente no aporta mucho más valor. También estoy tratando de evitar que el desarrollador lo haga manualmente, por lo que tengo que mantener tanto el archivo de configuración de PHP como la configuración de mysql.Use la opción
--defaults-file
o--defaults-extra-file
. Puede especificar el ID de usuario y la contraseña en él. Tiene el mismo formato que/etc/my.cnf
.Leyendo más, usted dice que no quiere tener que depender de un archivo de contraseña externo, pero esa es la única forma realmente segura. Cualquier otra cosa dejará rastros en la tabla de proceso o algo así. Incluso puede poner el archivo de contraseña en el control de versiones si realmente lo desea. Hágalo 600 (o 400) y legible solo por mysql o el usuario con el que se está ejecutando.
fuente
mysql --defaults-file c:\some\dirs\my.cnf
mysql
cliente de la consola?Tiene 4 opciones por http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html
-pyour_pass
o--password=your_pass
en la línea de comando-p
o--password
en la línea de comando sin un valor de contraseña especificado. En este caso, el programa cliente solicita la contraseña de forma interactiva:MYSQL_PWD
variable de entornoPara sus necesidades,
MYSQL_PWD
puede ser una opción, pero no es más segura. Realmente debería generar un proceso interactivo--password
y enviar la contraseña de forma interactiva, pero esa es una solución bastante compleja para este problema.fuente
man ps
tiene-E Display the environment as well.
desde la URL he vinculado a: Este método de especificar la contraseña de MySQL debe ser considerado extremadamente inseguro y no se debe utilizar. Algunas versiones de ps incluyen una opción para mostrar el entorno de los procesos en ejecución. En algunos sistemas, si configura MYSQL_PWD, su contraseña se expone a cualquier otro usuario que ejecute ps. Incluso en sistemas sin tal versión de ps, no es prudente suponer que no hay otros métodos por los cuales los usuarios puedan examinar los entornos de proceso.ps
y ver el argumento de la línea de comandos para cada proceso de cada usuario. Perops e
solo muestra el entorno para sus propios procesos (a menos que sea root, por supuesto). Es solo marginalmente más seguro, pero aún así es más seguro.Si su script PHP ya tiene una conexión de base de datos abierta, ¿por qué no lo usa
mysqli_multi_query()
para importar el archivo .sql? Si la sintaxis del archivo .sql es válida, por supuesto ...fuente