Làm cách nào tôi có thể lấy pg_dump để xác thực đúng cách


98

Tôi đã cố gắng sử dụng biến chủ PGPASSWORD.pgpassvà không ai trong số hai sẽ cho phép tôi để thẩm định cơ sở dữ liệu. Tôi có chmod'd .pgpasscho phép thích hợp và cũng đã cố gắng:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Mật khẩu KHÔNG chứa một \tuy nhiên tôi đã đặt nó trong dấu ngoặc kép PGPASS='mypass\'và nó vẫn sẽ không xác thực.

Tôi đang chạy:

pg_dump dbname -U username -Fc

và tôi vẫn nhận được

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"

1
Phần "... Xác thực ngang hàng ..." của thông báo lỗi có nghĩa là nó hoàn toàn không sử dụng xác thực bằng mật khẩu .
Milen A. Radev

Câu trả lời:


196

Giải pháp nhanh chóng

Vấn đề là nó đang cố gắng thực hiện peerxác thực cục bộ dựa trên tên người dùng hiện tại của bạn. Nếu bạn muốn sử dụng mật khẩu, bạn phải chỉ định tên máy chủ -h.

pg_dump dbname -U username -h localhost -F c

Giải trình

Điều này là do những điều sau đây trong pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Điều này yêu cầu Postgres sử dụng peerxác thực cho người dùng cục bộ yêu cầu tên người dùng postgres phải khớp với tên người dùng hệ thống hiện tại của bạn. Dòng thứ hai đề cập đến các kết nối sử dụng tên máy chủ và sẽ cho phép bạn xác thực bằng mật khẩu thông qua md5phương thức này.

Cấu hình phát triển ưa thích của tôi

LƯU Ý : Điều này chỉ nên được sử dụng trên các máy trạm một người dùng. Điều này có thể dẫn đến một lỗ hổng bảo mật lớn trên máy sản xuất hoặc nhiều người dùng.

Khi phát triển dựa trên một phiên bản postgres cục bộ, tôi muốn thay đổi phương thức xác thực cục bộ của mình thành trust. Điều này sẽ cho phép kết nối với postgres qua ổ cắm unix cục bộ với tư cách là bất kỳ người dùng nào không có mật khẩu. Nó có thể được thực hiện bằng cách chỉ cần thay đổi peerở trên thành trustvà tải lại các postgres.

# Don't require a password for local connections
local   all             all                                     trust

6
Đối với bất kỳ ai không chắc chắn tệp conf của bạn đang ở đâu: hãy sử dụng sudo locate pg_hba.conf- nó phải thật thông minh vì người dùng postgres sẽ là người duy nhất có quyền truy cập vào thư mục (tôi nghĩ vậy).
jcollum

lệnh của bạn làm việc cho tôi nhưng tôi không thể tìm ra nó ở đâu, hoặc tên của tệp là gì, làm thế nào tôi có thể tìm thấy tệp đó?
Sobhan

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.