Nous avons un script de ligne de commande PHP pour versionner une base de données. Nous exécutons ce script chaque fois qu'un développeur a ajouté un nouveau correctif de base de données.
Le script exécute le correctif avec la ligne de commande MySQL:
system('mysql --user=xxx --password=xxx < patch.sql');
Cependant, MySQL 5.6 émet désormais l'avertissement suivant:
Avertissement: l'utilisation d'un mot de passe sur l'interface de ligne de commande peut être non sécurisée
Ce qui est évidemment vrai, mais pourrait ou non être un problème pour l'utilisateur.
Veuillez noter que je ne veux pas avoir à me fier à un fichier de mot de passe externe.
Dans la récente version GA de MySQL, c'est-à-dire version 5.6 , vous pouvez le faire via la commande mysql_config_editor, comme décrit dans http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html
Fondamentalement, cela fait: crypter vos informations d'identification utilisateur/passe avec un alias d'hôte, puis vous utilisez l'alias d'hôte, placez ces informations dans un fichier de configuration dans votre répertoire personnel, puis, lorsque vous en avez besoin, au lieu de faire quelque chose comme :
mysqldump -uroot --password=mycleartextpass mydatabase > dumpfile.sql
vous écrivez à la place:
mysqldump --login-path=myhostalias mydatabase > dumpfile.sql
évitant ainsi de mettre votre mot de passe dans un script en texte clair.
Pour que cela fonctionne, vous devez d'abord (une seule fois) définir myhostalias
comme:
mysql_config_editor set --login-path=myhostalias --Host=mysqlhost.localnet.com --user=root --password
Vous pouvez utiliser différents chemins de connexion pour différents comptes et/ou hôtes à votre guise. Assez bonne idée si vous me demandez.
À titre d'information, je crois que cette fonctionnalité n'existe [~ # ~] pas [~ # ~] dans toutes les versions inférieures à 5.6.
Utilisez le --defaults-file
ou --defaults-extra-file
option. Vous pouvez y spécifier l'ID utilisateur et le mot de passe. Il a le même format que /etc/my.cnf
.
En lisant plus loin, vous dites que vous ne voulez pas avoir à vous fier à un fichier de mot de passe externe, mais c'est le seul moyen vraiment sécurisé. Tout le reste laissera des traces dans la table de processus ou quelque chose. Vous pouvez même mettre le fichier de mot de passe dans le contrôle de version si vous le souhaitez vraiment. Rendez-le 600 (ou 400) et lisible uniquement par mysql ou l'utilisateur sous lequel il s'exécute.
Vous avez 4 options par http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html
-pyour_pass
ou --password=your_pass
option sur la ligne de commande-p
ou --password
option sur la ligne de commande sans valeur de mot de passe spécifiée. Dans ce cas, le programme client sollicite le mot de passe de manière interactive:MYSQL_PWD
variable d'environnementPour vos besoins, MYSQL_PWD
pourrait être une option, mais ce n'est pas plus sûr. Vous devriez vraiment lancer un processus interactif avec --password
et soumettre le mot de passe de manière interactive, mais c'est une solution assez complexe à ce problème.
Si votre script PHP a déjà une connexion à la base de données ouverte, pourquoi ne pas simplement utiliser mysqli_multi_query()
pour importer le fichier .sql? Si la syntaxe du fichier .sql est valable, bien sûr ...