Mencipta sambungan ke jadual postgresql jauh. Sambungan ke subd. Menyediakan hak akses pangkalan data

0

Saya buntu. Kami mempunyai asas data postgres 9.2, yang telah kami gunakan untuk beberapa waktu. Sekarang kita perlu dapat menyambung kepadanya dari luar rangkaian kita.

Jadi kami mengkonfigurasi alamat IP luaran dan ujian yang kami boleh sambungkan ke port 5432 dengannya hos jauh melalui telnet. Jadi ini membuktikan bahawa sambungan rangkaian kerja, tembok api, dsb. Semuanya bagus.

Apabila saya cuba berhubung dengan:
PSQL -h db.host.com -d dbname -p 5432 -U pengguna

Saya akan kembali Psql: Pelayan menutup sambungan tanpa diduga.

Saya menyemak itu
listen_addresses = "*" ditetapkan dalam postgresql.conf

Dan dalam pg_hba.conf kami mempunyai baris yang berbunyi (untuk tujuan ujian sahaja)
hos semua semua 0.0.0.0/0 md5

Dan saya memuatkan semula pangkalan data untuk menguji perubahan yang dipilih.
Jadi ini sepatutnya membenarkan sambungan dari mana-mana sumber.

Versi psql pada pelayan pangkalan data ialah 9.2.14, dan pada klien ialah 9.2.13.

Sebarang cadangan atau idea?

  • 1 jawapan
  • Menyusun:

    Aktiviti

1

Saya ingin mencuba beberapa perkara untuk mendapatkan maklumat lanjut:

    Postgres tail log masuk ke pelayan untuk melihat apa yang berlaku di sana apabila disambungkan.

    Jalankan psql --version untuk memastikan ia lebih kurang sepadan dengan versi pelayan. (Saya nampak anda telah pun melakukan ini, tetapi saya akan meninggalkannya di sini untuk anak cucu.)

    Jalankan strace psql.... untuk melihat sejauh mana kegagalan itu berlaku.

Ini masih terdengar seperti isu rangkaian kepada saya. apa dah jadi arahan telnet awak bekerja dengan siapa? "IP Luaran" berbunyi sama seperti yang anda lakukan pada AWS. tetapan akses jauh kepada VPC mengambil banyak langkah. Adakah anda mempunyai perkhidmatan lain yang terbuka ke luar yang sedang berjalan?

Anda juga boleh menyelesaikan masalah dengan mematikan pelayan Postgres dan menggunakan nc untuk mendengar pada 5432 . Kemudian telnet dan lihat jika anda boleh menghantar data berulang-alik.

1

Paul, terima kasih atas cadangan. Saya membuat regangan dan menyemak versi. Dan anda betul, saya cuba menyambung daripada AWS. Ternyata ia adalah peringkat yang saya gunakan dalam pengimbang beban untuk hanya membenarkan akses kepada julat IP IP-2 yang diterbitkan oleh AWS. Apabila saya melumpuhkan irule saya dapat menyambung serta-merta. Jadi ini mesti logik nyata kerana saya menyemak IP awam contoh EC2 saya dan ia sememangnya disenaraikan dalam irule melalui pemberitahuan CIDR. -

Pentadbiran Sistem

Jawatan ini adalah arahan ringkas untuk pemula, bagi mereka yang memasang PostgreSQL buat kali pertama. Berikut ialah semua maklumat yang anda perlukan untuk bermula dengan PostgreSQL.

Menyambung ke DBMS

Perkara pertama yang perlu dilakukan ialah mendapatkan akses kepada PostgreSQL, akses sebagai pengguna super.
Tetapan pengesahan terletak dalam fail pg_hba.conf.
  1. tempatan semua rakan sebaya postgres
Baris ini menunjukkan bahawa pengguna postgres boleh menyambung ke mana-mana pangkalan data PostgreSQL tempatan melalui soket. Tidak perlu memasukkan kata laluan; sistem pengendalian akan menghantar nama pengguna, dan ia akan digunakan untuk pengesahan.
Mari sambung:
  1. $ sudo -u postgres psql postgres postgres
Untuk dapat menyambung melalui rangkaian, anda perlu menambah talian ke pg_hdba.conf:
  1. # JENIS PANGKALAN DATA KAEDAH ALAMAT PENGGUNA
  2. hossl semua semua 0.0.0.0/0 md5
Kaedah pengesahan md5 bermakna anda perlu memasukkan kata laluan untuk menyambung. Ini tidak begitu mudah jika anda kerap menggunakan konsol psql. Jika anda ingin mengautomasikan beberapa tindakan, berita buruknya ialah psql tidak menerima kata laluan sebagai hujah. Terdapat dua cara untuk menyelesaikan masalah ini: menetapkan pembolehubah persekitaran yang sesuai dan menyimpan kata laluan dalam fail .pgpass khas.

Menetapkan pembolehubah persekitaran PGPASSWORD

Saya akan mengatakan dengan segera bahawa lebih baik tidak menggunakan kaedah ini, kerana beberapa OS membolehkan anda melihat pengguna biasa pembolehubah persekitaran melalui ps. Tetapi jika anda mahu, anda perlu menulis di terminal:
  1. eksport PGPASSWORD=mypasswd
Pembolehubah akan tersedia dalam sesi semasa. Jika anda perlu menetapkan pembolehubah untuk semua sesi, maka anda perlu menambah baris daripada contoh kepada fail .bashrc atau .bash_profile

Menyimpan kata laluan dalam fail .pgpass

Jika kita bercakap tentang Linux, maka fail itu harus terletak di $HOME (/home/nama pengguna). Hanya pemilik (0600) mesti mempunyai hak menulis dan membaca. Anda perlu menulis baris seperti ini pada fail:
  1. nama hos:port:pangkalan data:nama pengguna:kata laluan
Anda boleh menulis "*" dalam empat medan pertama, yang bermaksud tiada penapisan (pilihan penuh).

Mendapatkan maklumat bantuan

\? - akan memberikan segala-galanya arahan yang tersedia berserta penerangan ringkas mereka,
\h - akan memaparkan senarai semua pertanyaan yang tersedia,
\h CREATE - akan memberikan bantuan untuk permintaan tertentu.

pengurusan pengguna DBMS

Bagaimana untuk mendapatkan senarai pengguna PostgreSQL? Atau anda boleh menanyakan jadual pg_user.
  1. PILIH * DARI pg_user ;

Mencipta pengguna PostgreSQL baharu

daripada cangkerang psql ini boleh dilakukan menggunakan arahan CREATE.
  1. CIPTA nama pengguna PENGGUNA DENGAN kata laluan "kata laluan" ;
Atau anda boleh menggunakan terminal.
  1. createuser -S -D -R -P nama pengguna
Anda akan diminta untuk memasukkan kata laluan.

Menukar kata laluan pengguna

  1. UBAH nama pengguna PENGGUNA DENGAN "kata laluan" ;

Menukar peranan pengguna

Untuk memberi kebenaran kepada pengguna untuk mencipta pangkalan data, jalankan pertanyaan berikut:
  1. UBAH nama pengguna PERANAN DENGAN CREATEDB ;

Pengurusan Pangkalan Data

Memaparkan senarai pangkalan data dalam terminal psql: Begitu juga dari terminal Linux:
  1. psql -l
Mencipta pangkalan data dari psql (PostgreSQL Terminal)
  1. CIPTA PANGKALAN DATA dbname OWNER dbadmin ;
Ciptaan pangkalan baru data menggunakan terminal:
  1. createdb -O nama pengguna dbname;

Menyediakan hak akses pangkalan data

Jika pengguna adalah pemilik pangkalan data, maka dia mempunyai semua hak. Tetapi jika anda ingin memberikan akses kepada pengguna lain, anda boleh melakukan ini menggunakan arahan GRANT. Pertanyaan di bawah akan membolehkan pengguna menyambung ke pangkalan data. Tetapi jangan lupa tentang fail konfigurasi pg_hba.conf, ia juga mesti mempunyai kebenaran sambungan yang sesuai.
  1. BERI SAMBUNG PADA PANGKALAN DATA dbname KEPADA dbadmin ;

PostgreSQL ialah DBMS perhubungan objek silang platform dengan terbuka kod sumber. Artikel ini akan menunjukkan kepada anda cara memasang PostgreSQL dalam Ubuntu Linux, sambung kepadanya dan lakukan pasangan pertanyaan SQL mudah, serta cara menyediakan sandaran.

Untuk memasang PostgreSQL 9.2 pada Ubuntu 12.10, jalankan arahan berikut:

sudo apt-add-repository ppa:pitti/ postgresql
sudo apt-get kemas kini
sudo apt-get install postgresql-9.2

Mari cuba bekerja dengan DBMS melalui shell:

sudo -u postgres psql

Mari buat pangkalan data ujian dan pengguna ujian:

CIPTA PANGKALAN DATA test_database;
BUAT PENGGUNA test_user DENGAN kata laluan "qwerty" ;
BERIKAN SEMUA PADA PANGKALAN DATA test_database KEPADA test_user;

Untuk keluar dari shell, masukkan arahan \q .

Sekarang mari kita cuba bekerja dengan pangkalan data yang dibuat bagi pihak test_user:

psql -h localhost test_database test_user

Mari buat jadual baharu:

BUAT URUTAN user_id;
CIPTA pengguna JADUAL (
id INTEGER PRIMARY KEY DEFAULT NEXTVAL ("user_ids") ,
log masuk CHAR(64),
kata laluan CHAR(64));

Sila ambil perhatian bahawa, tidak seperti beberapa DBMS lain, PostgreSQL tidak mempunyai lajur dengan sifat auto_increment. Sebaliknya, Postgres menggunakan jujukan. hidup masa ini ia cukup untuk mengetahui bahawa menggunakan fungsi nextval yang kita boleh dapatkan nombor unik untuk urutan tertentu:

PILIH NEXTVAL ("user_id" );

Dengan menetapkan nilai lalai untuk medan id jadual pengguna kepada NEXTVAL("user_id"), kami telah mencapai kesan yang sama seperti yang diberikan oleh auto_increment. Apabila menambah rekod baharu pada jadual, kami mungkin tidak menentukan id, kerana id unik akan dijana secara automatik. Berbilang jadual boleh menggunakan urutan yang sama. Dengan cara ini kami boleh menjamin bahawa nilai beberapa medan dalam jadual ini tidak bertindih. Dalam pengertian ini, jujukan adalah lebih fleksibel daripada auto_increment.

Jadual yang sama boleh dibuat menggunakan hanya satu arahan:

CIPTA pengguna JADUAL2 (
id KUNCI UTAMA SIRI ,
log masuk CHAR(64),
kata laluan CHAR(64));

Dalam kes ini, urutan untuk medan id dibuat secara automatik.

Kini menggunakan perintah \d anda boleh melihat senarai semua jadual yang tersedia dan menggunakan \d pengguna anda boleh melihat penerangan jadual pengguna. Jika anda tidak mendapat maklumat yang anda cari, cuba \d+ bukannya \d . Anda boleh mendapatkan senarai pangkalan data dengan perintah \l dan bertukar kepada pangkalan data tertentu dengan perintah \c dbname. Untuk memaparkan bantuan arahan, sebut \? .

Adalah penting untuk ambil perhatian bahawa dalam PostgreSQL, secara lalai, nama jadual dan lajur dihantar ke huruf kecil. Jika anda tidak mahu tingkah laku ini, anda boleh menggunakan petikan berganda:

CIPTA JADUAL "satu lagi Jadual" ("someValue" VARCHAR (64 ) );

Satu lagi ciri PostgreSQL yang mungkin menyebabkan kesukaran apabila mula bekerja dengan DBMS ini ialah apa yang dipanggil "skema". Skema ialah sesuatu seperti ruang nama untuk jadual, seperti direktori dengan jadual di dalam pangkalan data.

Membuat skema:

BUAT tempahan SKEMA;

Tukar kepada skema:

TETAPKAN laluan_carian KEPADA tempahan;

Anda boleh melihat senarai skema sedia ada menggunakan arahan \dn. Skema lalai dinamakan awam. Pada dasarnya, anda boleh berjaya menggunakan PostgreSQL tanpa mengetahui tentang kewujudan skema. Tetapi apabila bekerja dengan kod warisan, dan dalam beberapa kes kelebihan, mengetahui tentang skema boleh menjadi sangat berguna.

Jika tidak, bekerja dengan PostgreSQL tidak jauh berbeza daripada bekerja dengan mana-mana DBMS hubungan lain:

MASUKKAN KE DALAM pengguna (log masuk, kata laluan)
NILAI ("afiskon" , "123456" );
PILIH * DARI pengguna;

Jika anda kini cuba menyambung ke Postgres dari mesin lain, anda akan gagal:

psql -h 192.168.0.1 test_database test_user

Psql: tidak dapat menyambung ke pelayan: Sambungan ditolak
Adakah pelayan berjalan pada hos "192.168.0.1" dan menerima
Sambungan TCP/IP pada port 5432?

Untuk membetulkannya, tambahkan baris:

listen_addresses = "localhost,192.168.0.1"

...ke fail /etc/postgresql/9.2/main/postgresql.conf juga.