Jak bezpiecznie użyć w skrypcie login i hasło do bazy MySQL

Wykonując kopię bazy lub inne cykliczne zadania za pomocą komend takich jak mysqldump i mysql pewnym problemem jest przekazywanie loginów i haseł. Szczególnie gdy chce się uniknąć przekazywania ich w linii komend bądź umieszczania w skrypcie.

Lepszym sposobem jest skorzystanie z parametru --defaults-extra-file w którym można zdefiniować parametry dla poszczególnych poleceń. Dopuszczalne są kombinacje między innymi loginu, hasła, adresu serwera, nazwy bazy. Aby lepiej zilustrować ten mechanizm utworzony zostanie zrzut bazy o nazwie istotna_baza, ale login, hasło i adres serwera będzie pobrany z zewnętrznego pliku.

W pierwszej kolejności trzeba przygotować i zapisać plik z niezbędnymi danymi dla polecenia mysqldump: login, hasło i adres serwera. Można zapisać go w dowolnym miejscu. Na potrzeby przykładu jego pełna ścieżka to ~/istotna_baza.cred.

Zwykle w pliku można umieścić też nazwę bazy danych, ale mysqldump nie radzi z tym sobie. Można to rozwiązać korzystając z kombinacji zestawów danych dla [client] i [mysqldump] ale to rozwiązanie wykracza poza zakres tego wpisu.
[mysqldump]
user="istotna_baza_uzytkownik"
password="wielce_skompikowane_haslo_do_istotnej_bazy"
host="localhost"

W pliku trzymane jest hasło, zatem możliwość jego odczytu powinien mieć tylko właściciel.

$ chmod 400 ~/istotna_baza.cred
$ ls -la ~/istotna_baza.cred
-r-------- 1 radek radek 82 Apr  2 13:19 /home/radek/istotna_baza.cred

Następnie wystarczy skorzystać z polecenia mysqldump i przekazać do niego plik z danymi do bazy i jej nazwę.

$ mysqldump --defaults-extra-file=~/istotna_baza.cred istotna_baza > ~/istotna_baza.sql