web-dev-qa-db-fra.com

Mysqldump lancé par cron et sécurité par mot de passe

J'ai écrit un script pour sauvegarder mes bases de données MySQL en utilisant:

mysqldump --opt --all-databases -u user -pmypassword > myDump.sql

Un cron le lance tous les soirs et scp le résultat sur un autre serveur. mypassword apparaît en clair dans mon script, tout le monde peut le voir avec les droits appropriés. On m'a également parlé de problèmes/proc (où la course cmd peut être vue).

La documentation MySQL dit:

La spécification d'un mot de passe sur la ligne de commande doit être considérée comme non sécurisée. Voir Section 7.6, "Protection de votre mot de passe".

Je n'ai trouvé cette section magique de 7.6 nulle part.

Quelle est la bonne pratique pour gérer la sécurité automatique de mysqldump et de mot de passe?

48
kheraud

Citant les documents MySQL ( http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html ):

Enregistrez votre mot de passe dans un fichier d'options. Par exemple, sous Unix, vous pouvez répertorier votre mot de passe dans la section [client] du fichier .my.cnf de votre répertoire personnel:

[client]
password=your_pass

Pour protéger le mot de passe, le fichier ne doit être accessible à personne d'autre qu'à vous-même. Pour vous en assurer, définissez le mode d'accès aux fichiers sur 400 ou 600. Par exemple:

Shell> chmod 600 .my.cnf

Pour nommer à partir de la ligne de commande un fichier d'options spécifique contenant le mot de passe, utilisez le --defaults-file=file_name option, où file_name est le nom complet du chemin d'accès au fichier.

56
Sahil Muthoo

pour ajouter à la réponse de Sahil ci-dessus, utilisez --defaults-extra-file

--defaults-extra-file est utilisé pour indiquer à un programme de lire un seul fichier d'options spécifique en plus des fichiers d'options standard.

tandis que --defaults-file est lu à la place du fichier my.cnf par défaut.

23
troseman

La réponse acceptée stocke le mot de passe dans un fichier texte brut, qui peut être lu par toute personne disposant d'un accès administratif (root). Si votre base de données se trouve dans un environnement d'hébergement partagé, cela n'est pas souhaitable.

Une meilleure option serait d'utiliser mysql_config_editor pour créer un chemin de connexion chiffré nommé mysqldump. Selon la documentation MySQL :

mysql_config_editor crypte le fichier .mylogin.cnf afin qu'il ne puisse pas être lu en texte clair, et son contenu décrypté par les programmes clients est utilisé uniquement en mémoire. De cette façon, les mots de passe peuvent être stockés dans un fichier au format non clair et utilisés plus tard sans jamais avoir besoin d'être exposés sur la ligne de commande ou dans une variable d'environnement.

La commande suivante créera votre chemin de connexion mysqldump:

mysql_config_editor set --login-path=mysqldump --Host=your_hostname --user=your_username --password

Vous serez invité à entrer votre mot de passe et le chemin de connexion que vous avez créé sera stocké au format crypté. mysqldump utilisera automatiquement ce chemin de connexion chaque fois que vous l'appellerez à l'avenir, sauf si vous spécifiez un chemin de connexion différent avec le --login-path option de ligne de commande.

Voici comment vous invoqueriez mysqldump après avoir créé un chemin de connexion chiffré:

mysqldump database_name > output_file
5
blendenzo

Toutes les réponses ici sont en morceaux donc partager ne commande complète qui fera le nécessaire et doit être utilisé si la base de données est de grande taille, --single-transaction et --lock-tables sont très importants ici

mysqldump --defaults-extra-file=/home/dangi/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz;

Remarque: La réponse est en plus de la réponse Avibodha et sahil, ils ont déjà fait le point. Je mets juste leur réponse en un seul morceau de code avec important measure should be taken at time of backing up live database

4
Kuldeep Dangi

Consultez Garder les mots de passe sécurisés pour une bonne réponse. Vous pouvez stocker votre mot de passe dans le fichier my.cnf en modifiant les autorisations sur ce fichier pour garder le mot de passe sécurisé.

Vous pouvez également consulter le dernier commentaire sur cette page:

MYSQL_PWD = "tinkerbell" mysqldump -ubackup --all-databases> dump.sql

2
Jesse

La méthode suivante fonctionne pour moi sur une machine Windows, si vous avez installé 2 versions de MySQL et que vous ne savez pas quel my.ini est utilisé lorsque vous exécutez mysqldump, cela vous aidera également:

1, C:\ProgramData\MySQL\MySQL Server 5.6\my.ini, bien [client], remplacez-le par:

[client]
user=my_user
password=my_password

2, utilisez cette commande:

C:\Program Files\MySQL Server 5.6\bin> mysqldump --default-extra-file = "C:\ProgramData\MySQL\MySQL Server 5.6\my.ini" -u my_user db_to_export> db_to_export.sql

1
Zinan Xing