Pero no es eso inseguro,
No hay una escala absoluta de "seguro", de hecho, ni siquiera es un vector o propiedad escalar. (IT) La seguridad consiste en garantizar que su tecnología no haga las cosas que no pretende hacer, mientras continúa haciendo las cosas que debería. Esta es una manera muy larga de decir que debería habernos dicho cuál es el modelo de amenaza.
Dejando a un lado las muchas preguntas sobre cómo su aplicación persiste la contraseña y si necesita una contraseña y el hecho de que su método depende de que el usuario root no tenga una contraseña ...
Su método actual expondrá la contraseña (brevemente) a otros usuarios a través de 'ps' en Unix / Linux (y probablemente algo similar en MSWindows - no nos dijo en qué sistema operativo se encuentra, pero la etiqueta 'bash' tipo de implica Unix / Linux). Y si se ejecutó directamente en la línea de comandos, estará presente en los registros de auditoría y en su historial de shell, aunque usted dijo que esto estaba en un script. Hay una ruta potencial y las explotaciones de alias que un tercero podría usar (si tienen acceso) para subvertir el comportamiento, aunque está empezando a ser un poco esotérico.
Entonces, considerando solo el problema descrito de forma aislada y restringido por las únicas herramientas disponibles que son bash, entonces:
echo "grant all on database.* to 'user'@'localhost' identified by '$PW';" | mysql
es ligeramente mejor (de forma predeterminada, echo
es una función bash incorporada y, por lo tanto, no inicia un nuevo proceso con una línea de comandos).