Wir haben ein PHP-Befehlszeilenskript, um eine Datenbank zu versionieren. Wir führen dieses Skript immer dann aus, wenn ein Entwickler einen neuen Datenbank-Patch hinzugefügt hat.
Das Skript führt den Patch mit der MySQL-Befehlszeile aus:
system('mysql --user=xxx --password=xxx < patch.sql');
MySQL 5.6 gibt jetzt jedoch die folgende Warnung aus:
Warnung: Die Verwendung eines Kennworts in der Befehlszeilenschnittstelle kann unsicher sein
Das ist natürlich wahr, könnte aber für den Benutzer ein Problem sein oder auch nicht.
- Was ist der sichere Alternative?
- Ist es alternativ möglich, diese Warnung zu deaktivieren?
Bitte beachten Sie, dass ich nicht auf eine externe Passwortdatei angewiesen sein möchte.
mysql
php
command-line-interface
Benjamin
quelle
quelle
Antworten:
In der aktuellen GA-Version von MySQL, dh Version 5.6 , können Sie dies mit dem Befehl mysql_config_editor tun, wie in beschrieben http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html beschrieben
Grundsätzlich bedeutet dies: Verschlüsseln Sie Ihre Benutzer- / Pass-Anmeldeinformationen mit einem Host-Alias, und verwenden Sie dann den Host-Alias, speichern Sie diese Informationen in einer Konfigurationsdatei in Ihrem Home-Verzeichnis, und führen Sie sie dann bei Bedarf aus, anstatt wie folgt vorzugehen :
Sie schreiben stattdessen:
Dadurch vermeiden Sie, Ihr Passwort in ein Skript im Klartext einzugeben.
Damit dies funktioniert, müssen Sie zunächst (nur einmal) Folgendes definieren
myhostalias
:Sie können verschiedene Anmeldepfade für verschiedene Konten und / oder Hosts verwenden, wie Sie möchten. Ziemlich gute Idee, wenn du mich fragst.
Als Hinweis, glaube ich, ist diese Funktionalität nicht unter 5.6 in jeder Version vorhanden sein.
quelle
mysql_config_editor
, damit es leider nicht viel mehr Wert bringt. Ich versuche auch zu vermeiden, dass der Entwickler es manuell macht, und muss daher sowohl die PHP-Konfigurationsdatei als auch die mysql-Konfiguration pflegen .Verwenden Sie die Option
--defaults-file
oder--defaults-extra-file
. Sie können die Benutzer-ID und das Kennwort angeben. Es hat das gleiche Format wie/etc/my.cnf
.Wenn Sie weiterlesen, sagen Sie, dass Sie sich nicht auf eine externe Passwortdatei verlassen müssen möchten, aber das ist der einzig wirklich sichere Weg. Alles andere hinterlässt Spuren in der Prozesstabelle oder so. Sie können die Kennwortdatei sogar in die Versionskontrolle aufnehmen, wenn Sie dies wirklich möchten. Machen Sie es 600 (oder 400) und lesbar nur für MySQL oder den Benutzer, unter dem es ausgeführt wird.
quelle
mysql --defaults-file c:\some\dirs\my.cnf
mysql
Konsolen-Client zurück?Sie haben 4 Optionen pro http://dev.mysql.com/doc/refman/5.1/de/password-security-user.html
-pyour_pass
oder--password=your_pass
in der Befehlszeile-p
oder--password
in der Befehlszeile, ohne dass ein Kennwortwert angegeben wurde. In diesem Fall fordert das Client-Programm das Passwort interaktiv an:MYSQL_PWD
UmgebungsvariablenMYSQL_PWD
Möglicherweise ist dies eine Option für Ihre Anforderungen, aber nicht sicherer. Eigentlich sollte ein interaktiver Prozess gestartet--password
und das Passwort interaktiv übermittelt werden, aber das ist eine ziemlich komplexe Lösung für dieses Problem.quelle
man ps
hat-E Display the environment as well.
ich von der URL verknüpft: Diese Methode der Angabe Ihrer MySQL Passwort extrem unsicher betrachtet werden müssen und sollten nicht verwendet werden. Einige Versionen von ps enthalten eine Option zum Anzeigen der Umgebung ausgeführter Prozesse. Wenn Sie auf einigen Systemen MYSQL_PWD festlegen, ist Ihr Kennwort jedem anderen Benutzer zugänglich, der ps ausführt. Selbst auf Systemen ohne eine solche Version von ps kann nicht davon ausgegangen werden, dass es keine anderen Methoden gibt, mit denen Benutzer Prozessumgebungen untersuchen können.ps
das Befehlszeilenargument für jeden Prozess jedes Benutzers anzeigen und ausführen . Zeigt jedochps e
nur die Umgebung für Ihre eigenen Prozesse an (es sei denn, Sie sind root). Es ist nur unwesentlich sicherer, aber es ist immer noch sicherer.Wenn Ihr PHP-Skript bereits eine offene Datenbankverbindung hat, warum
mysqli_multi_query()
importieren Sie nicht einfach die .sql-Datei? Wenn die Syntax der .sql-Datei gültig ist, natürlich ...quelle