Mamy skrypt wiersza polecenia PHP do wersji bazy danych. Ten skrypt uruchamiamy za każdym razem, gdy programista doda nową poprawkę do bazy danych.
Skrypt uruchamia łatkę za pomocą wiersza polecenia MySQL:
system('mysql --user=xxx --password=xxx < patch.sql');
Jednak MySQL 5.6 wydaje teraz następujące ostrzeżenie:
Ostrzeżenie: użycie hasła w interfejsie wiersza poleceń może być niepewne
Co jest oczywiście prawdą, ale może, ale nie musi stanowić problemu dla użytkownika.
- Jaka jest zatem bezpieczna alternatywa?
- Alternatywnie, czy można wyłączyć to ostrzeżenie?
Pamiętaj, że nie chcę polegać na zewnętrznym pliku hasła.
mysql
php
command-line-interface
Benzoes
źródło
źródło
Odpowiedzi:
W najnowszej wersji GA MySQL, tj. Wersji 5.6 , możesz to zrobić za pomocą komendy mysql_config_editor, jak opisano w http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html
Zasadniczo polega na: zaszyfrowaniu poświadczeń użytkownika / hasła przy użyciu aliasu hosta, a następnie skorzystania z aliasu hosta, umieszczenia tych informacji w pliku konfiguracyjnym w katalogu domowym, a następnie, gdy jest to potrzebne, zamiast robienia czegoś podobnego :
zamiast tego piszesz:
tym samym unikając umieszczania hasła w skrypcie w postaci czystego tekstu.
Aby to zadziałało, musisz (tylko raz) zdefiniować
myhostalias
jako:Możesz używać różnych ścieżek logowania dla różnych kont i / lub hostów, jak chcesz. Całkiem dobry pomysł, jeśli mnie zapytasz.
Przypominam, że uważam, że ta funkcjonalność NIE istnieje w żadnej wersji poniżej 5.6.
źródło
mysql_config_editor
, więc nie przynosi to niestety większej wartości. Staram się również unikać ręcznego programowania przez programistę, dlatego muszę utrzymywać zarówno plik konfiguracyjny PHP, jak i konfigurację mysql.Użyj opcji
--defaults-file
lub--defaults-extra-file
. Możesz w nim podać identyfikator użytkownika i hasło. Ma taki sam format jak/etc/my.cnf
.Czytając dalej, mówisz, że nie chcesz polegać na zewnętrznym pliku hasła, ale jest to jedyny naprawdę bezpieczny sposób. Wszystko inne pozostawi ślady w tabeli procesów lub coś takiego. Możesz nawet umieścić plik z hasłem w kontroli wersji, jeśli naprawdę chcesz. Uczyń go 600 (lub 400) i czytelnym tylko dla mysql lub użytkownika, na którym działa.
źródło
mysql --defaults-file c:\some\dirs\my.cnf
mysql
klienta konsoli?Masz 4 opcje na http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html
-pyour_pass
lub--password=your_pass
w wierszu polecenia-p
lub--password
w wierszu polecenia bez określonej wartości hasła. W takim przypadku program kliencki żąda hasła interaktywnie:MYSQL_PWD
zmiennej środowiskowejDla twoich potrzeb
MYSQL_PWD
może być opcją, ale nie jest już bezpieczniejsza. Naprawdę powinieneś odrodzić się interaktywnie--password
i przesłać hasło interaktywnie, ale to dość skomplikowane rozwiązanie tego problemu.źródło
man ps
has-E Display the environment as well.
Z adresu URL, do którego podłączyłem: Tę metodę określania hasła do MySQL należy uznać za wyjątkowo niepewną i nie należy jej używać. Niektóre wersje ps zawierają opcję wyświetlania środowiska uruchomionych procesów. W niektórych systemach, jeśli ustawisz MYSQL_PWD, twoje hasło będzie widoczne dla każdego innego użytkownika, który uruchamia ps. Nawet w systemach bez takiej wersji ps nierozsądne jest zakładanie, że nie ma innych metod, za pomocą których użytkownicy mogliby badać środowiska procesów.ps
i zobaczyć argument wiersza poleceń dla każdego procesu każdego użytkownika. Aleps e
wyświetla tylko środowisko dla własnych procesów (chyba że jesteś rootem). Jest tylko nieznacznie bezpieczniejszy, ale nadal jest bardziej bezpieczny.Jeśli twój skrypt PHP ma już otwarte połączenie z bazą danych, dlaczego po prostu nie
mysqli_multi_query()
zaimportujesz pliku .sql? Jeśli składnia pliku .sql jest poprawna, oczywiście ...źródło