J'ai un mot de passe MySQL enregistré sur un fichier foo.php
, par exemple P455w0rd
, lorsque j'essaie de l'utiliser:
$ 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)
Les deux options demandent toujours le mot de passe, quelle est la bonne façon d'envoyer le mot de passe stdin
?
-p
et votre mot de passe./proc
peut les lire trivialement tant que le programme est en cours d'exécution . C'est à cela que~/.my.cnf
sert un , correctement réglé à 0600Réponses:
Vous devez être très prudent sur la façon dont vous passez des mots de passe aux lignes de commande car, si vous ne faites pas attention, vous finirez par le laisser ouvert au reniflement à l'aide d'outils tels que
ps
.La façon la plus sûre de le faire serait de créer un nouveau fichier de configuration et de le transmettre à l'
mysql
aide de l' option de ligne de commande--defaults-file=
ou--defaults-extra-file=
.La différence entre les deux est que ce dernier est lu en plus des fichiers de configuration par défaut alors qu'avec le premier, seul le fichier transmis comme argument est utilisé.
Votre fichier de configuration supplémentaire doit contenir quelque chose de similaire à:
Assurez-vous que vous sécurisez ce fichier.
Exécutez ensuite:
la source
argv
pour écraser les paramètres donnés à l'-p
indicateur. C'est du moins ce qui est conclu ici, ainsi que d'autres informations pertinentes: unix.stackexchange.com/questions/78757/…--login-path
maintenant qu'il est pris en charge. Ce n'est pas beaucoup mieux que cela, mais c'est un peu moins de texte brut (même si la barrière pour convertir le contenu en texte brut est faible).export MYSQL_PWD=muhpassword
) et exécutez votre commande sans le-p
. Voir Variables d'environnement de programme MySQL . Malgré les avertissements désastreux du manuel , c'est plutôt sûr . À moins que vous ne commenciez un warez bizarre dans le même shell plus tard. Nous courons donc:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
L'
mysql
utilitaire client peut prendre un mot de passe sur la ligne de commande avec les options-p
ou--password=
.Si vous utilisez
-p
, il ne doit pas y avoir d'espace vide après la lettre d'option:Je préfère les longues options dans les scripts car elles sont auto-documentées:
la source
/proc/$pid/cmdline
ou via laps
commande. Il est vrai que mysql écrase le mot de passe dans argv lors du démarrage mais il y a toujours une fenêtre de temps où un autre utilisateur peut observer le mot de passe. De plus, sur certains systèmes, l'écrasement d'argv peut ne pas fonctionner.Si vous souhaitez commencer
mysql
avec un mot de passe, vous devez d'abord récupérer le mot de passe dans une variable:Ensuite, vous pouvez démarrer votre
mysql
commande avec:la source
MYSQL_PWD
variable d'environnement qui est lue parmysql
si vous ne spécifiez pas-p
. Et sous Linux, c'est une méthode sécurisée car l'environnement d'un utilisateur ne peut pas être lu par d'autres utilisateurs sans privilèges - contrairement au vecteur d'argument.