Bagaimana cara mengkonfigurasi postgresql untuk pertama kalinya?

197

Saya baru saja menginstal postgresql dan saya menentukan kata sandi x selama instalasi. Ketika saya mencoba melakukan createdbdan menentukan kata sandi apa pun, saya menerima pesan:

Createdb: tidak dapat terhubung ke postgres basis data: FATAL: otentikasi kata sandi gagal untuk pengguna

Sama untuk createuser.

Bagaimana saya memulai? Bisakah saya menambahkan diri saya sebagai pengguna ke database?

Rohit Banga
sumber
4
Ini sangat mirip dengan pertanyaan ini yang ditanyakan setahun kemudian. Tapi, saya yakin jawaban ini berbahaya . Anda seharusnya tidak mengatur postgrespengguna. Ini adalah SUPostgreSQL, dan membuka Anda untuk serangan masuk terhadapnya. Buat pengguna super lain , dan cadangan yang terkunci postgresuntuk admin UNIX dengan root.
Evan Carroll

Jawaban:

329

Jawaban lain tidak sepenuhnya memuaskan saya. Inilah yang bekerja untuk postgresql-9.1 di Xubuntu 12.04.1 LTS.

  1. Terhubung ke database default dengan postgres pengguna:

    sudo -u postgres psql template1

  2. Atur kata sandi untuk postgres pengguna, lalu keluar dari psql (Ctrl-D):

    ALTER USER postgres dengan kata sandi terenkripsi 'xxxxxxx';

  3. Edit pg_hba.conffile:

    sudo vim /etc/postgresql/9.1/main/pg_hba.conf

    dan ubah "peer" menjadi "md5" pada baris tentang postgres:

    local all      postgres      peer md5

    Untuk mengetahui versi postgresql yang Anda jalankan, cari folder versi di bawah /etc/postgresql. Anda juga dapat menggunakan Nano atau editor lain, bukan VIM.

  4. Mulai ulang basis data:

    sudo /etc/init.d/postgresql restart

    (Di sini Anda dapat memeriksa apakah itu berfungsi dengan psql -U postgres).

  5. Buat pengguna dengan nama yang sama dengan Anda (untuk menemukannya, Anda dapat mengetik whoami):

    sudo createuser -U postgres -d -e -E -l -P -r -s <my_name>

    Opsi memberi tahu postgresql untuk membuat pengguna yang bisa login, membuat database, membuat peran baru, adalah superuser, dan akan memiliki kata sandi terenkripsi. Yang sangat penting adalah -P -E, sehingga Anda diminta mengetikkan kata sandi yang akan dienkripsi, dan -d sehingga Anda dapat melakukan a createdb.

    Waspadai kata sandi : pertama-tama akan meminta Anda dua kali kata sandi baru (untuk pengguna baru), diulang, dan kemudian setelah kata sandi postgres (yang ditentukan pada langkah 2).

  6. Sekali lagi, edit pg_hba.conffile (lihat langkah 3 di atas), dan ubah "rekan" menjadi "md5" pada baris yang terkait dengan "semua" pengguna lain:

    local all      all      peer md5

  7. Mulai ulang (seperti pada langkah 4), dan periksa apakah Anda dapat masuk tanpa -U postgres:

    template psql1

    Perhatikan bahwa jika Anda melakukan sesuatu psql, itu akan gagal karena akan mencoba menghubungkan Anda ke database default yang memiliki nama yang sama dengan Anda (yaitu whoami). template1 adalah database admin yang ada di sini sejak awal.

  8. Sekarang createdb <dbname>harusnya bekerja.

Manur
sumber
Prosedur ini bekerja sangat baik pada Ubuntu 13.10 juga. Ingat saja sudo di langkah 5 saat membuat pengguna.
David den Haring
2
Bekerja dengan baik di Ubuntu 14.04 LTS juga
ilhnctn
2
hanya sebagai catatan, baris in pg_hba.confharus baris pertama, jika tidak maka bisa diabaikan karena aturan lain (hal. 9.3.5 pada F21). Butuh beberapa waktu untuk memikirkan hal ini, bahwa penghapusan komentar dan perubahan baris yang sudah dikomentari untuk pengguna postgresql tidak akan begitu saja dilakukan.
dashesy
Saya pikir ini telah berubah dalam PG 9.4, karena saya hanya memiliki local all all peerpada poin 3 yang sekarang saya ubah md5. Baik?
Léo Léopold Hertz 준영
1
Harap perbarui jawaban untuk 2017! PostgreSQL 9.6 dan UBUNTU 16 LTS ... Tidak ada cara sederhana ??
Peter Krauss
55

Di Linux PostgresQL biasanya dikonfigurasi untuk memungkinkan pengguna root untuk masuk sebagai superuser postgres postgresdari shell (konsol atau ssh).

$ psql -U postgres

Maka Anda hanya akan membuat database baru seperti biasa:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

Ini harus bekerja tanpa menyentuh pg_hba.conf. Jika Anda ingin dapat melakukan ini menggunakan beberapa alat GUI melalui jaringan - maka Anda perlu mengacaukannya pg_hba.conf.

Oliver Weichhold
sumber
Saya bekerja pada windows saya menjalankan initdb untuk direktori saya dan memiliki file konfigurasi. sekarang dibuatb berfungsi tetapi ketika saya melakukan tes psql saya mendapatkan pesan PERINGATAN: Halaman kode konsol (437) berbeda dari halaman kode Windows (1252) 8-bit karakter mungkin tidak bekerja dengan benar. Lihat halaman referensi psql "Catatan untuk pengguna Windows" untuk detailnya. dan tidak ada perintah yang berfungsi.
Rohit Banga
7
psql: FATAL: Peer authentication failed for user "postgres"bahkan dengan sudo.
Peter Krauss
Jawaban sempurna, saya tidak ingin menyentuh file konfigurasi dan ini bekerja dengan sempurna di PostgreSQL 10.10 melalui Ubuntu. Anda harus dapat terhubung dengan psql -d mydatatabase -U myuser.
Ranu
21

Ini solusi saya:

su root
su postgres
psql
Admdebian
sumber
4
Ini akan berfungsi dalam banyak kasus karena banyak situs akan memiliki pg_hba.conf mengotentikasi pengguna postgres db terhadap akun sistem postgres (metode peer). Namun login yang berhasil, pada akhirnya akan bergantung pada konten pg_hba.conf untuk situs tertentu.
Reed Sandberg
1
Bekerja untukku. Saya mengganti baris pertama dengan sudo bash.
eje211
saya tidak mengerti bagaimana ini membantu, .. dari pemahaman saya, ini log in root dan postgres, dan menjalankan psql. Apa yang sebenarnya terjadi? Terima kasih!
olleh
20

Ada dua metode yang bisa Anda gunakan. Keduanya membutuhkan pembuatan pengguna dan database.

  1. Menggunakan createuser dan createb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Menggunakan perintah administrasi SQL, dan menghubungkan dengan kata sandi melalui TCP

    $ sudo -u postgres psql postgres

    Dan, kemudian di shell psql

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;

    Kemudian Anda bisa masuk,

    $ psql -h localhost -d mydatabase -U myuser -p <port>

    Jika Anda tidak tahu porta, Anda selalu bisa mendapatkannya dengan menjalankan yang berikut, sebagai postgrespengguna,

    SHOW port;

    Atau,

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Sidenote: itu postgres pengguna

Saya sarankan TIDAK memodifikasi postgrespengguna.

  1. Biasanya terkunci dari OS. Tidak seorang pun diharapkan "masuk" ke sistem operasi sebagai postgres. Anda seharusnya memiliki root untuk mendapatkan otentikasi sebagaipostgres .
  2. Ini biasanya tidak dilindungi kata sandi dan mendelegasikan ke sistem operasi host. Ini hal yang baik . Ini biasanya berarti untuk masuk sebagai postgresyang setara dengan PostgreSQL dari SQL ServerSA , Anda harus memiliki akses tulis ke file data yang mendasarinya. Dan, itu berarti bahwa Anda biasanya bisa menghancurkan malapetaka.
  3. Dengan menjaga ini dinonaktifkan, Anda menghilangkan risiko serangan brute force melalui pengguna super bernama. Menyembunyikan dan mengaburkan nama superuser memiliki kelebihan.
Evan Carroll
sumber
Dengan metode pertama, pengguna berakhir tanpa hak istimewa. Saya akhirnya menggunakan ini alih-alih perintah pertama:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert
@FabienSnauwaert -smembuat pengguna superuser.
Evan Carroll
16

EDIT: Peringatan: Silakan, baca jawaban yang diposting oleh Evan Carroll . Tampaknya solusi ini tidak aman dan tidak disarankan.

Ini bekerja untuk saya dalam instalasi Ubuntu 14.04 64 bit standar .

Saya mengikuti instruksi, dengan modifikasi kecil, yang saya temukan di http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Instal postgreSQL (jika belum ada di mesin Anda):

sudo apt-get install postgresql

  1. Jalankan psql menggunakan pengguna postgres

sudo –u postgres psql postgres

  1. Tetapkan kata sandi baru untuk pengguna postgres:

\password postgres

  1. Keluar dari psql

\q

  1. Edit /etc/postgresql/9.3/main/pg_hba.conf dan ubah:

#Database administrative login by Unix domain socket local all postgres peer

Untuk:

#Database administrative login by Unix domain socket local all postgres md5

  1. Mulai ulang postgreSQL:

sudo service postgresql restart

  1. Buat database baru

sudo –u postgres createdb mytestdb

  1. Jalankan psql dengan pengguna postgres lagi:

psql –U postgres –W

  1. Daftar database yang ada (database baru Anda seharusnya ada di sana sekarang):

\l

Robert
sumber
1
Saya downvoted karena saya pikir mengaktifkan postgrespengguna adalah ide yang buruk. stackoverflow.com/a/41604969/124486
Evan Carroll
4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`
Suman Astani
sumber
3

Anda mungkin perlu memperbarui pg_hba.conffile Anda . File ini mengontrol apa yang pengguna dapat login dari alamat IP apa. Saya pikir bahwa pengguna postgres cukup dikunci secara default.

Neall
sumber
2
Untuk RHEL6.4 dan postgres 8.4 file tersebut berada di /var/lib/pgsql/data/pg_hba.conf. Ubah identke trustuntuk host(dan localjika Anda menggunakan ssh).
DavidG
3

Jika Anda menjalankan macOS seperti saya, Anda mungkin tidak memiliki pengguna postgres.

Saat mencoba lari sudo -u postgres psql saya mendapatkan kesalahansudo: unknown user: postgres

Untungnya ada file executable yang disediakan oleh postgres.

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

Kemudian saya dapat mengakses psqltanpa masalah.

psql
psql (10.2)
Type "help" for help.

nick=#

Jika Anda membuat instance postgres baru dari awal, berikut adalah langkah-langkah yang saya ambil. Saya menggunakan port non-default sehingga saya bisa menjalankan dua instance.

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

Kemudian saya edit /var/postgres/var-10-local/postgresql.confdengan port pilihan saya, 5433.

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

Selesai!

Nick Woodham
sumber
2

Di MacOS, saya mengikuti langkah-langkah di bawah ini untuk membuatnya berfungsi.

Untuk pertama kalinya, setelah instalasi, dapatkan nama pengguna sistem.

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

Sekarang Anda telah masuk ke sistem, dan Anda dapat membuat DB.

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT
SuperNova
sumber
0

Cukup telusuri ke direktori instalasi Anda dan jalankan file ini "pg_env.bat", jadi setelah masuk ke folder bin dan jalankan pgAdmin.exe. Ini pasti berhasil!

Wellington Ribeiro
sumber