Ich habe eine laufende PostgreSQL-Datenbank. Jetzt möchte ich einige Vorgänge in meiner Datenbank automatisieren, aber ich habe ein Problem mit dem Kennwort.
Ich benutze das folgende Bash-Skript:
#!/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"
Wenn ich das Bash-Skript ausführe, wird folgende Fehlermeldung angezeigt:
psql: fe_sendauth: no password supplied
Ich habe sogar versucht, die .pgpass-Datei in meinem Home-Verzeichnis zu konfigurieren, aber ohne Erfolg:
*:*:*:postgres:postgres
Ich habe den folgenden Befehl ausgeführt:
sudo chmod 0600 .pgpass
Trotzdem scheint keine der Methoden zu funktionieren. Hat jemand eine Idee? Vergesse ich etwas zu tun?
postgresql
ubuntu-12.04
alibaba
quelle
quelle
sudo su -c psql postgres psql ...
stattdessen..pgpass
ist in deinem Homeverzeichnis? Nicht in der despostgres
Benutzers?Antworten:
sudo
behält die meisten Umgebungsvariablen nicht bei. Wenn Sie Umgebungsvariablen für einen Befehl angeben möchten, der unter ausgeführt wirdsudo
, gehen Sie folgendermaßen vorsudo
:Ob
sudo
dies zulässig ist oder nicht , hängt von den auf Ihrer Site geltenden Sicherheitsrichtlinien ab.Ich empfehle diesen Ansatz nicht, da das Kennwort im Befehlszeilenverlauf und in der Prozessliste angezeigt wird. Es ist viel besser, eine
.pgpass
Datei zu verwenden oder vorzugsweisepg_hba.conf
für diepeer
Authentifizierung vonlocal
Verbindungen vom Benutzer einzurichtenpostgres
.Sie können eine Verwendung
.pgpass
Datei, aber es muss das sein.pgpass
des Benutzers du bistsudo
‚ing zu, nicht dem Benutzer , den Sie sindsudo
ing aus ; es müsste~postgres/.pgpass
in diesem Fall sein. Denken Sie darüber nach:psql
Ausführen, wenn Siepostgres
nicht wissen, dass Sie es übersudo
Ihr Konto ausgeführt haben, wenn Sie nicht wissen, was Ihr Benutzerkonto ist, und selbst wenn dies der Fall ist, hat es keine Leseberechtigung als Benutzerpostgres
für~youruser/.pgpass
.Darüber hinaus
-w
ist das gleiche wie--no-password
. Es macht keinen Sinn, beides zu spezifizieren.quelle
-E
Option verwenden können, mit der Ihre Umgebung (einschließlichPGPASSWORD
) erhalten bleibt . Dies verhindert, dass es in der Prozessliste angezeigt wird.