Saya memiliki dan menjalankan database PostgreSQL. Sekarang saya ingin mengotomatiskan beberapa operasi pada basis data saya tetapi saya memiliki masalah dengan kata sandi.
Saya menggunakan skrip bash berikut:
#!/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"
Ketika saya menjalankan skrip bash saya mendapatkan kesalahan berikut:
psql: fe_sendauth: no password supplied
Saya bahkan telah mencoba mengkonfigurasi file .pgpass di direktori home saya tetapi tidak berhasil:
*:*:*:postgres:postgres
Saya telah menjalankan perintah berikut:
sudo chmod 0600 .pgpass
Namun demikian, tampaknya tidak ada satu pun metode yang berhasil. Adakah yang punya ide? Apakah saya lupa melakukan sesuatu?
postgresql
ubuntu-12.04
Alibaba
sumber
sumber
sudo su -c psql postgres psql ...
saja..pgpass
ada di direktori home Anda ? Tidak ada dipostgres
pengguna?Jawaban:
sudo
tidak mempertahankan sebagian besar variabel lingkungan. Jika Anda ingin menentukan variabel lingkungan untuk perintah yang dijalankan di bawahsudo
, lakukan itusudo
:Apakah
sudo
mengizinkan atau tidak akan tergantung pada kebijakan keamanan yang berlaku di situs Anda.Saya tidak merekomendasikan pendekatan ini karena mengekspos kata sandi dalam sejarah baris perintah dan dalam daftar proses. Jauh lebih baik menggunakan
.pgpass
file, atau lebih baik diaturpg_hba.conf
untukpeer
otentikasilocal
koneksi dari penggunapostgres
.Anda dapat menggunakan
.pgpass
file, namun itu harus.pgpass
dari pengguna Andasudo
'ing untuk, bukan pengguna Anda sedangsudo
ing dari ; harus~postgres/.pgpass
dalam kasus ini. Pikirkan tentang hal ini:psql
berjalan sebagaipostgres
tidak tahu Anda berlari melaluisudo
dari akun Anda, ia tidak tahu apa account pengguna Anda, dan bahkan jika itu tidak memiliki izin baca sebagai penggunapostgres
untuk~youruser/.pgpass
.Selain itu,
-w
sama dengan--no-password
. Tidak ada gunanya menentukan keduanya.sumber
-E
opsi yang akan melestarikan lingkungan Anda (termasukPGPASSWORD
). Ini mencegahnya ditampilkan pada daftar proses.