PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Jalankan file batch dengan perintah psql tanpa kata sandi

Teruslah membaca, opsi terbaik datang terakhir . Tapi mari kita perjelas beberapa hal terlebih dahulu.

Hanya diamkan permintaan sandi

Jika masalah Anda hanya permintaan kata sandi, Anda dapat membungkamnya. Saya mengutip manualnya di sini:

-w
--no-password

Jangan pernah mengeluarkan prompt kata sandi. Jika server memerlukan otentikasi kata sandi dan kata sandi tidak tersedia dengan cara lain seperti .pgpass file, upaya koneksi akan gagal. Opsi ini dapat berguna dalam pekerjaan batch dan skrip di mana tidak ada pengguna yang memasukkan kata sandi. (...)

Anda mungkin tidak memerlukan sandi

Biasanya ini tidak perlu. Pengguna super basis data default postgres biasanya sesuai dengan pengguna sistem dengan nama yang sama. Menjalankan psql dari akun ini tidak memerlukan kata sandi jika metode otentikasi peer atau ident diatur di pg_hba.conf . Anda mengajukan. Anda mungkin memiliki baris seperti ini:

local    all    postgres    peer

Dan biasanya juga:

local    all    all         peer

Artinya, setiap lokal pengguna dapat masuk ke semua database sebagai pengguna database dengan nama yang sama tanpa password.
Namun , ada kesalahpahaman umum di sini. Mengutip lagi:

Metode ini hanya didukung pada koneksi lokal .

Penekanan saya yang berani.
Anda terhubung ke localhost , yang bukan "koneksi lokal" , meskipun memiliki kata "lokal" di dalamnya. Ini adalah koneksi TCP/IP ke 127.0.0.1. Wikipedia di localhost:

Pada sistem komputer modern, localhost sebagai nama host diterjemahkan ke alamat IPv4 di 127.0.0.0/8 (loopback) blok bersih, biasanya 127.0.0.1 , atau ::1 di IPv6.

Solusi sederhana untuk koneksi lokal

Hilangkan parameter -h dari psql doa. Mengutip manual di psql sekali lagi:

Jika Anda menghilangkan nama host, psql akan terhubung melalui soket domain Unix ke server di host lokal, atau melalui TCP/IP ke localhost pada mesin yang tidak memiliki soket domain Unix.

Windows

... tidak memiliki soket domain Unix, pg_hba.conf baris dimulai dengan local tidak berlaku di Windows. Di Windows Anda terhubung melalui localhost secara default, yang membawa kita kembali ke awal.

Jika persyaratan keamanan Anda lemah, Anda bisa mempercayai semua koneksi melalui localhost :

host    all    all    127.0.0.1/32     trust

Saya hanya akan melakukan itu untuk debugging dengan koneksi jarak jauh mati. Untuk keamanan lebih, Anda dapat menggunakan otentikasi SSPI di Windows. Tambahkan baris ini ke pg_hba.conf untuk koneksi "lokal":

host    all    all    127.0.0.1/32     sspi

Jika Anda benar-benar membutuhkan kata sandi

Anda bisa setel variabel lingkungan , tapi ini tidak disarankan , terutama untuk Windows. Panduan:

PGPASSWORD berperilaku sama dengan parameter koneksi kata sandi. Penggunaan variabel lingkungan ini tidak disarankan untuk alasan keamanan, karena beberapa sistem operasi mengizinkan pengguna non-root untuk melihat variabel lingkungan proses melalui ps; sebagai gantinya pertimbangkan untuk menggunakan ~/.pgpass file (lihat Bagian 32.15).

Panduan tentang psql :

Sebuah conninfo string adalah alternatif untuk menentukan parameter koneksi:

 $ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"

Atau URI , yang digunakan sebagai pengganti nama database:

 $ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require

File Kata Sandi

Tetapi biasanya lebih baik menyiapkan .pgpass berkas daripada memasukkan kata sandi ke dalam file skrip.
Baca bab singkat dalam manual dengan cermat. Secara khusus, perhatikan bahwa di sini ...

Nama host localhost cocok dengan kedua TCP (nama host localhost ) dan soket domain Unix (pghost kosong atau direktori soket default) yang berasal dari mesin lokal.

Jalur yang tepat tergantung pada sistem. File ini dapat menyimpan kata sandi untuk beberapa kombinasi peran dan port (klaster DB):

localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...

Di Windows mesin mencari file di:

%APPDATA%\postgresql\pgpass.conf

%APPDATA% biasanya diselesaikan menjadi:C:\Documents and Settings\My_Windows_User_Name\Application Data\ .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa menghasilkan string unik per catatan dalam tabel di Postgres?

  2. Indeks GIN pada kolom smallint[] tidak digunakan atau operator kesalahan tidak unik

  3. Pemeran tipe data Postgres

  4. Menerapkan dan Mengelola PostgreSQL 11:Baru di ClusterControl 1.7.1

  5. SequelizeConnectionError:sertifikat yang ditandatangani sendiri