Buduję skrypt Bash dla niektórych zadań. Jednym z tych zadań jest utworzenie bazy danych MySQL z tego samego skryptu bash. W tej chwili tworzę dwie zmienne: jedną dla nazwy użytkownika sklepu i drugą dla hasła sklepu. To jest odpowiednia część mojego skryptu:
MYSQL_USER=root
MYSQL_PASS=mypass_goes_here
touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Ale zawsze pojawia się błąd informujący o odmowie dostępu dla użytkownika root BEZ HASŁA, co robię źle? Muszę zrobić to samo dla PostgreSQL.
linux
mysql
bash
postgresql
shell-scripting
ReynierPM
źródło
źródło
echo "$MYSQL_PASS"
przed przekazaniem go domysql
wiersza. Czy ma poprawne hasło?ps wwaux
.Odpowiedzi:
Zarówno w przypadku MySQL, jak i PostgreSQL możesz określić użytkownika i hasło w lokalnym pliku konfiguracyjnym. .my.cnf dla MySQL i .pgpass dla PostgreSQL. Te pliki powinny znajdować się w katalogu domowym (tj. ~ / .My.cnf).
.my.cnf:
.pgpass:
Możesz tutaj wpisać symbol wieloznaczny, zastępując dowolne pole *******.
PS: NIGDY NIE OKREŚLAJ HASŁA NA LINII POLECEŃ! Może to być doskonale widoczne w ps, jeśli twój system nie jest skonfigurowany tak, aby nie pokazywał procesów należących do innych użytkowników.
@ Thinice: Jeśli chcesz stworzyć te pliki naprawdę bezpieczne, powinieneś:
W ten sposób plik byłby tworzony z bezpiecznymi uprawnieniami od samego początku i żaden podsłuchujący nie miałby szansy wyłudzić twoje hasło.
I tak PostgreSQL odmówi użycia pliku z uprawnieniami wyższymi niż 0600.
źródło
--defaults-extra-file=filename
. Może to być przydatne, jeśli chcesz umieścić go w niestandardowym miejscu lub po prostu utworzyć plik tymczasowy. Podejrzewa, że jest podobną opcją w PostgreSQL, ale nie jestem z tym zaznajomiony.0600
To załatwi sprawę Dzięki
źródło
Jak wykonać wiersz polecenia z bezpiecznym hasłem? użyj edytora konfiguracji !!!
Począwszy od mysql 5.6.6 możesz przechowywać hasło w pliku konfiguracyjnym, a następnie wykonywać takie polecenia cli ...
--login-path zastępuje zmienne ... host, użytkownik ORAZ hasło. doskonale prawda!
źródło
upewnij się, jak piszesz swoją przepustkę, a ona nie ucieknie
--defaults-extra-file = jest dobrą rzeczą (tm) (c)
źródło
Nie umieszczaj cudzysłowów wokół hasła, ponieważ jeśli to zrobisz, są one uważane za część hasła.
źródło
Podobne pytanie istnieje na StackOverflow.
Podsumowując moją odpowiedź stamtąd.
Można
export MYSQL_PWD=yourverysecretpassword
.Zaletą tej metody w porównaniu z użyciem pliku konfiguracyjnego jest to, że nie potrzebujesz osobnego pliku konfiguracyjnego do synchronizacji ze skryptem. Masz tylko skrypt do utrzymania.
Nie ma wady tej metody.
Hasło nie jest widoczne dla innych użytkowników w systemie (byłoby widoczne, gdyby znajdowało się w wierszu poleceń). Zmienne środowiskowe są widoczne tylko dla użytkownika uruchamiającego komendę mysql i root.
Hasło będzie również widoczne dla każdego, kto może odczytać sam skrypt, więc upewnij się, że sam skrypt jest chroniony. Nie różni się to niczym od ochrony pliku konfiguracyjnego. Możesz nadal podać hasło z osobnego pliku, jeśli chcesz, aby skrypt był publicznie czytelny (
export MYSQL_PWD=$(cat /root/mysql_password)
na przykład). Nadal łatwiej jest wyeksportować zmienną niż zbudować plik konfiguracyjny.Na przykład,
źródło