web-dev-qa-db-fra.com

Comment passer le mot de passe à la ligne de commande mysql

J'ai un mot de passe MySQL enregistré dans un fichier foo.php, par exemple P455w0rd, quand j'essaye 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 à partir de stdin?

21
Kokizzu

Vous devez faire très attention à la façon dont vous passez les mots de passe aux lignes de commande car, si vous n'y faites pas attention, vous finirez par le laisser ouvert à la détection à 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 à mysql en utilisant soit le --defaults-file= ou --defaults-extra-file= option de ligne de commande.

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 à:

[client]
user=foo
password=P@55w0rd

Assurez-vous que vous sécurisez ce fichier.

Exécutez ensuite:

mysql --defaults-extra-file=<path to the new config file> [all my other options]
26
garethTheRed

L'utilitaire client mysql peut prendre un mot de passe sur la ligne de commande avec le -p ou --password= options.

Si tu utilises -p, il ne doit pas y avoir d'espace vide après la lettre d'option:

$ mysql -pmypassword

Je préfère les longues options dans les scripts car elles sont auto-documentées:

mysql --password=mypassword --user=me --Host=etc
16
Kusalananda

Si vous voulez démarrer mysql avec un mot de passe, vous devez d'abord récupérer le mot de passe dans une variable:

MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`

Ensuite, vous pouvez démarrer votre commande mysql avec:

mysql -U root -p ${MYSQLPASS} mydb -h friendserver
2
Lambert

Je n'ai pas assez de réputation pour commenter donc je vais juste mentionner vous . Je voulais juste dire que --defaults-extra-file doit être la première option lors de l'exécution de la commande mentionnée. Pour moi, cela n'a pas fonctionné autrement.

0
user8810865