Nous avons un script en ligne de commande PHP pour la version d'une base de données. Nous exécutons ce script chaque fois qu'un développeur ajoute 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 lance maintenant 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.
- Quelle est l' alternative sécurisée alors?
- Sinon, est-il possible de désactiver cet avertissement?
Veuillez noter que je ne veux pas avoir à me fier à un fichier de mot de passe externe.
mysql
php
command-line-interface
Benjoin
la source
la source
Réponses:
Dans la version GA récente de MySQL, c'est-à-dire la 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/fr/mysql-config-editor.html.
En gros, c’est: crypter votre utilisateur / transmettre vos informations d’identification avec un alias d’hôte, puis vous utilisez cet alias, insérez cette information dans un fichier de configuration de votre répertoire personnel, puis, au besoin, au lieu de :
vous écrivez à la place:
é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 ce
myhostalias
qui suit :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.
Comme une note, je crois, cette fonctionnalité ne pas exister dans une version 5.6 ci - dessous.
la source
mysql_config_editor
, de sorte qu'il n'apporte malheureusement pas plus de valeur. J'essaie également d'éviter que le développeur le fasse manuellement, ce qui oblige à maintenir à la fois le fichier de configuration PHP et la configuration mysql.Utilisez l' option
--defaults-file
ou--defaults-extra-file
. Vous pouvez y spécifier un identifiant et un 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 à compter sur un fichier de mot de passe externe, mais que c'est le seul moyen réellement 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. Faites-le 600 (ou 400) et lisible seulement par mysql ou l'utilisateur sous lequel il tourne.
la source
mysql --defaults-file c:\some\dirs\my.cnf
mysql
alors le client de la console?Vous avez 4 options pour http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html
-pyour_pass
ou--password=your_pass
sur la ligne de commande-p
ou--password
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
peut-être une option, mais ce n'est pas plus sûr. En réalité, vous devriez créer un processus interactif avec--password
le mot de passe et le soumettre de manière interactive, mais c'est une solution relativement complexe à ce problème.la source
man ps
A-E Display the environment as well.
partir de l'URL à laquelle j'ai lié: Cette méthode de spécification de votre mot de passe MySQL doit être considérée comme extrêmement peu sûre et ne doit pas être utilisée. Certaines versions de ps incluent une option permettant d’afficher l’environnement des processus en cours. Sur certains systèmes, si vous définissez MYSQL_PWD, votre mot de passe est exposé à tout autre utilisateur exécutant ps. Même sur les systèmes ne disposant pas d'une telle version de ps, il est déconseillé de supposer qu'il n'existe aucune autre méthode permettant aux utilisateurs d'examiner les environnements de processus.ps
et voir l’argument de la ligne de commande pour chaque processus de chaque utilisateur. Maisps e
affiche uniquement l'environnement de vos propres processus (sauf si vous êtes root bien sûr). Ce n'est que légèrement plus sécurisé, mais c'est toujours plus sécurisé.Si votre script PHP a déjà une connexion de base de données ouverte, pourquoi ne pas simplement
mysqli_multi_query()
importer le fichier .sql? Si la syntaxe du fichier .sql est valide, bien sûr ...la source