Làm thế nào để cấu hình postgresql lần đầu tiên?


197

Tôi vừa cài đặt postgresql và tôi đã chỉ định mật khẩu x trong khi cài đặt. Khi tôi cố gắng làm createdbvà chỉ định bất kỳ mật khẩu nào, tôi nhận được thông báo:

createdb: không thể kết nối với cơ sở dữ liệu postgres: FATAL: xác thực mật khẩu không thành công cho người dùng

Tương tự cho createuser.

Tôi nên bắt đầu như thế nào? Tôi có thể thêm mình là người dùng vào cơ sở dữ liệu không?



4
Điều này rất giống với câu hỏi này đã được hỏi một năm sau đó. Nhưng, tôi tin rằng điều này có một câu trả lời chính nguy hiểm . Bạn không nên thiết lập postgresngười dùng. Đó là SUPostgreSQL và nó mở ra cho bạn các cuộc tấn công đăng nhập chống lại nó. Tạo một siêu người dùng khác và bảo lưu khóa postgrescho quản trị viên UNIX bằng root.
Evan Carroll

Câu trả lời:


328

Các câu trả lời khác không hoàn toàn thỏa mãn với tôi. Đây là những gì đã làm việc cho postgresql-9.1 trên Xubfox 12.04.1 LTS.

  1. Kết nối với cơ sở dữ liệu mặc định với các postgres của người dùng:

    sudo -u postgres psql template1

  2. Đặt mật khẩu cho người dùng postgres, sau đó thoát psql (Ctrl-D):

    THAY ĐỔI NGƯỜI DÙNG postgres với mật khẩu được mã hóa 'xxxxxxx';

  3. Chỉnh sửa pg_hba.conftập tin:

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

    và thay đổi "ngang hàng" thành "md5" trên dòng liên quan đến postgres:

    địa phương tất cả các      postgres      ngang hàng md5

    Để biết phiên bản postgresql nào bạn đang chạy, hãy tìm thư mục phiên bản bên dưới /etc/postgresql. Ngoài ra, bạn có thể sử dụng Nano hoặc trình chỉnh sửa khác thay vì VIM.

  4. Khởi động lại cơ sở dữ liệu:

    sudo /etc/init.d/postgresql khởi động lại

    (Ở đây bạn có thể kiểm tra nếu nó làm việc với psql -U postgres).

  5. Tạo người dùng có cùng tên với bạn (để tìm tên, bạn có thể nhập whoami):

    người tạo sudo -U postgres -d -e -E -l -P -r -s <my_name>

    Các tùy chọn cho postgresql tạo một người dùng có thể đăng nhập, tạo cơ sở dữ liệu, tạo vai trò mới, là một siêu người dùng và sẽ có mật khẩu được mã hóa. Những cái thực sự quan trọng là -P -E, do đó bạn được yêu cầu nhập mật khẩu sẽ được mã hóa và -d để bạn có thể thực hiện a createdb.

    Cảnh giác với mật khẩu : trước tiên, nó sẽ hỏi bạn hai lần mật khẩu mới (đối với người dùng mới), lặp đi lặp lại và sau đó một lần mật khẩu postgres (mật khẩu được chỉ định ở bước 2).

  6. Một lần nữa, chỉnh sửa pg_hba.conftệp (xem bước 3 ở trên) và thay đổi "ngang hàng" thành "md5" trên dòng liên quan đến "tất cả" người dùng khác:

    địa phương tất      cả các      đồng nghiệp md5

  7. Khởi động lại (như trong bước 4) và kiểm tra xem bạn có thể đăng nhập mà không cần -U postgres:

    mẫu ps1

    Lưu ý rằng nếu bạn chỉ thực hiện một lần psql, nó sẽ thất bại vì nó sẽ cố gắng kết nối bạn với cơ sở dữ liệu mặc định có cùng tên với bạn (tức là whoami). template1 là cơ sở dữ liệu quản trị ở đây từ đầu.

  8. Bây giờ createdb <dbname>nên làm việc.


Quy trình này cũng hoạt động rất tốt trên Ubuntu 13.10. Chỉ cần nhớ sudo trong bước 5 khi tạo người dùng.
David den Haring

2
Cũng hoạt động rất tốt trên Ubuntu 14.04 LTS
ilhnctn

2
giống như một ghi chú, dòng trong pg_hba.confphải là dòng đầu tiên, nếu không nó có thể bị bỏ qua vì các quy tắc khác (pssql 9.3.5 trên F21). Tôi đã mất một thời gian để tìm hiểu điều này, rằng việc không chú ý và thay đổi các dòng đã được nhận xét cho người dùng postgresql sẽ không chỉ đơn giản là làm.
bảnh bao

Tôi nghĩ rằng điều này đã thay đổi trong PG 9.4, vì tôi chỉ có local all all peerđiểm 3 mà bây giờ tôi đã thay đổi md5. Đồng ý?
Léo Léopold Hertz

1
Hãy cập nhật câu trả lời cho năm 2017! PostgreSQL 9.6 và UBUNTU 16 LTS ... Không có cách nào đơn giản ??
Peter Krauss

55

Trong Linux PostgresQL thường được cấu hình để cho phép người dùng root đăng nhập dưới dạng siêu người dùng postgres postgrestừ shell (console hoặc ssh).

$ psql -U postgres

Sau đó, bạn sẽ chỉ cần tạo một cơ sở dữ liệu mới như bình thường:

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

Điều này sẽ làm việc mà không cần chạm vào pg_hba.conf. Nếu bạn muốn có thể làm điều này bằng cách sử dụng một số công cụ GUI qua mạng - thì bạn sẽ cần phải xử lý pg_hba.conf.


Tôi đang làm việc trên windows Tôi đã chạy initdb cho thư mục của mình và có sẵn các tệp cấu hình. bây giờ createdb hoạt động nhưng khi tôi thực hiện kiểm tra psql tôi nhận được thông báo CẢNH BÁO: Trang mã bảng điều khiển (437) khác với trang mã Windows (1252) Các ký tự 8 bit có thể không hoạt động chính xác. Xem trang tham khảo psql "Ghi chú cho người dùng Windows" để biết chi tiết. và không có lệnh nào hoạt động.
Rohit Banga

7
psql: FATAL: Peer authentication failed for user "postgres"ngay cả với sudo.
Peter Krauss

Câu trả lời hoàn hảo, tôi không muốn chạm vào các tệp cấu hình và điều này hoạt động hoàn hảo trên PostgreQuery 10.10 trên Ubuntu. Bạn sẽ có thể kết nối sau đó với psql -d mydatatabase -U myuser.
ranu

21

Đây là giải pháp của tôi:

su root
su postgres
psql

4
Điều này sẽ hoạt động trong nhiều trường hợp vì nhiều trang web sẽ có pg_hba.conf xác thực người dùng db postgres dựa trên tài khoản hệ thống postgres (phương thức ngang hàng). Tuy nhiên, đăng nhập thành công, cuối cùng sẽ phụ thuộc vào nội dung của pg_hba.conf cho bất kỳ trang web cụ thể nào.
Sậy Sandberg

1
Đã làm cho tôi. Tôi thay thế dòng đầu tiên với sudo bash.
eje211

Tôi không hiểu làm thế nào điều này giúp ích, .. từ sự hiểu biết của tôi, điều này đăng nhập vào root và postgres, và chạy psql. Chính xác thì chuyện gì đang xảy ra? Cảm ơn!
olleh

20

Có hai phương pháp bạn có thể sử dụng. Cả hai đều yêu cầu tạo người dùng cơ sở dữ liệu.

  1. Sử dụng trình tạo và createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Sử dụng các lệnh quản trị SQL và kết nối với mật khẩu qua TCP

    $ sudo -u postgres psql postgres

    Và, sau đó trong shell psql

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

    Sau đó, bạn có thể đăng nhập,

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

    Nếu bạn không biết cổng, bạn luôn có thể lấy nó bằng cách chạy như sau, với tư cách là postgresngười dùng,

    SHOW port;

    Hoặc là,

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

Sidenote: postgresngười dùng

Tôi đề nghị KHÔNG sửa đổi postgresngười dùng.

  1. Nó thường bị khóa khỏi HĐH. Không ai có nghĩa vụ "đăng nhập" vào hệ điều hành như postgres. Bạn phải có root để xác thực là postgres.
  2. Nó thường không được bảo vệ bằng mật khẩu và ủy quyền cho hệ điều hành máy chủ. Đây là một điều tốt . Điều này thường có nghĩa là để đăng nhập postgrestương đương với PostgreSQL của SQL Server SA, bạn phải có quyền truy cập ghi vào các tệp dữ liệu cơ bản. Và, điều đó có nghĩa là bình thường bạn có thể phá hủy sự tàn phá.
  3. Bằng cách giữ cho điều này bị vô hiệu hóa, bạn loại bỏ nguy cơ bị tấn công bằng vũ lực thông qua một siêu người dùng có tên. Che giấu và che khuất tên của siêu người dùng có lợi thế.

Với phương thức đầu tiên, người dùng cuối cùng không có đặc quyền. Tôi đã kết thúc bằng cách sử dụng lệnh này thay vì lệnh đầu tiên:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert

@FabienSnauwaert -slàm cho người dùng trở thành một siêu người dùng.
Evan Carroll

16

EDIT: Cảnh báo: Xin vui lòng, đọc câu trả lời được đăng bởi Evan Carroll . Có vẻ như giải pháp này không an toàn và không được khuyến khích.

Điều này làm việc cho tôi trong cài đặt Ubuntu 14.04 64 bit tiêu chuẩn .

Tôi đã làm theo hướng dẫn, với những sửa đổi nhỏ, mà tôi đã tìm thấy trong http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Cài đặt postgreSQL (nếu chưa có trong máy của bạn):

sudo apt-get install postgresql

  1. Chạy psql bằng cách sử dụng người dùng postgres

sudo –u postgres psql postgres

  1. Đặt mật khẩu mới cho người dùng postgres:

\password postgres

  1. Thoát psql

\q

  1. Chỉnh sửa /etc/postgresql/9.3/main/pg_hba.conf và thay đổi:

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

Đến:

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

  1. Khởi động lại postgreSQL:

sudo service postgresql restart

  1. Tạo một cơ sở dữ liệu mới

sudo –u postgres createdb mytestdb

  1. Chạy lại psql với người dùng postgres:

psql –U postgres –W

  1. Liệt kê các cơ sở dữ liệu hiện có (cơ sở dữ liệu mới của bạn sẽ có ngay bây giờ):

\l


1
Tôi đánh giá thấp vì tôi nghĩ kích hoạt postgresngười dùng là một ý tưởng tồi. 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`

3

Bạn có thể cần phải cập nhật pg_hba.conftập tin của bạn . Tệp này kiểm soát những gì người dùng có thể đăng nhập từ địa chỉ IP nào. Tôi nghĩ rằng người dùng postgres mặc định bị khóa khá nhiều.


2
Đối với RHEL6.4 và postgres 8.4, tệp được đặt trong /var/lib/pgsql/data/pg_hba.conf. Thay đổi identthành trustcho host(và localnếu bạn đang sử dụng ssh).
DavidG

3

Nếu bạn đang chạy macOS như tôi, bạn có thể không có người dùng postgres.

Khi cố chạy sudo -u postgres psqltôi đã gặp lỗisudo: unknown user: postgres

May mắn thay, có những thực thi mà postgres cung cấp.

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

Sau đó, tôi đã có thể truy cập psqlmà không có vấn đề.

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

nick=#

Nếu bạn đang tạo một ví dụ postgres mới từ đầu, đây là các bước tôi đã thực hiện. Tôi đã sử dụng một cổng không mặc định để tôi có thể chạy hai trường hợp.

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

Sau đó, tôi chỉnh sửa /var/postgres/var-10-local/postgresql.confvới cổng ưa thích của mình, 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

Làm xong!


2

Trong MacOS, tôi đã làm theo các bước dưới đây để làm cho nó hoạt động.

Lần đầu tiên, sau khi cài đặt, lấy tên người dùng của hệ thống.

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

Bây giờ bạn đã đăng nhập vào hệ thống và bạn có thể tạo 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

0

Chỉ cần duyệt đến thư mục cài đặt của bạn và thực hiện tệp này "pg_env.bat", vì vậy sau khi vào thư mục bin và thực thi pgAdmin.exe. Điều này phải làm việc không có nghi ngờ!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.