Mam działającą bazę danych PostgreSQL. Teraz chciałbym zautomatyzować niektóre operacje na mojej bazie danych, ale mam problem z hasłem.
Używam następującego skryptu bash:
#!/bin/bash
export PGPASSWORD="postgres"
sudo -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"
Po uruchomieniu skryptu bash pojawia się następujący błąd:
psql: fe_sendauth: no password supplied
Próbowałem nawet skonfigurować plik .pgpass w moim katalogu domowym, ale bezskutecznie:
*:*:*:postgres:postgres
Uruchomiłem następujące polecenie:
sudo chmod 0600 .pgpass
Niemniej jednak nie wydaje się, aby którakolwiek z metod działała. Czy ktokolwiek ma jakiś pomysł? Czy zapomniałem coś zrobić?
postgresql
ubuntu-12.04
alibaba
źródło
źródło
sudo su -c psql postgres psql ...
zamiast tego..pgpass
Jest w swoim katalogu domowym? Nie w tympostgres
użytkownika?Odpowiedzi:
sudo
nie zachowuje większości zmiennych środowiskowych. Jeśli chcesz określić zmienne środowiskowe dla polecenia uruchamianego podsudo
, zrób to jednaksudo
:To, czy
sudo
zezwala na to, zależy od zasad bezpieczeństwa obowiązujących w Twojej witrynie.Nie polecam tego podejścia, ponieważ ujawnia hasło w historii wiersza poleceń i na liście procesów. Jest o wiele lepiej użyć
.pgpass
pliku, lub najlepiej ustawićpg_hba.conf
się dopeer
uwierzytelnianialocal
połączeń z użytkownikiempostgres
.Można użyć
.pgpass
pliku, ale musi to być.pgpass
od użytkownika jesteśsudo
„ing do użytkownika, a nie jesteśsudo
ING z ;~postgres/.pgpass
w tym przypadku musiałoby być . Pomyśl o tym:psql
działa jakpostgres
nie wie, że prowadził ją przezsudo
z konta, to nie wiem, co konto użytkownika, a nawet gdyby tak się stało, że nie ma prawa do odczytu jako użytkownikpostgres
do~youruser/.pgpass
.Dodatkowo
-w
jest taki sam jak--no-password
. Nie ma sensu wymieniać obu.źródło
-E
opcji, która zachowa twoje środowisko (w tymPGPASSWORD
). Zapobiega to wyświetlaniu się na liście procesów.