2013-03-09 43 views
23

Tôi có một người dùng với mật khẩu phù hợp với một trong những quy định tại database.ymlPG xác thực Peer thất bại

postgres=# select * from pg_user 
; 
    usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig 
------------+----------+-------------+----------+-----------+---------+----------+----------+----------- 
goodsounds | 16386 | t   | t  | t   | t  | ******** |   | 
postgres |  10 | t   | t  | t   | t  | ******** |   | 
(2 rows) 

Đây là lỗi

[email protected] ~/rails_projects/goodsounds.org $ rake db:create 
FATAL: Peer authentication failed for user "goodsounds" 

Đây là pg_hba.conf tôi:

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

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          peer 
# IPv4 local connections: 
host all    all    127.0.0.1/32   trust 
# IPv6 local connections: 
host all    all    ::1/128     trust 
# Allow replication connections from localhost, by a user with the 
# replication privilege. 
#local replication  postgres        peer 
#host replication  postgres  127.0.0.1/32   trust 
#host replication  postgres  ::1/128     trust 

Trước đây "tin cậy" ở trên là md5 nhưng tôi đã thay đổi để xem liệu điều đó có hữu ích hay không.

Đây là database.yml của tôi:

# PostgreSQL. Versions 8.2 and up are supported. 
# 
# Install the pg driver: 
# gem install pg 
# On Mac OS X with macports: 
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config 
# On Windows: 
# gem install pg 
#  Choose the win32 build. 
#  Install PostgreSQL and put its /bin directory on your path. 
# 
# Configure Using Gemfile 
# gem 'pg' 
# 
development: 
    adapter: postgresql 
    encoding: unicode 
    database: goodsounds_development 
    pool: 5 
    username: goodsounds 
    password: test 

    # Connect on a TCP socket. Omitted by default since the client uses a 
    # domain socket that doesn't need configuration. Windows does not have 
    # domain sockets, so uncomment these lines. 
    host: localhost 
    port: 5432 

    # Schema search path. The server defaults to $user,public 
    #schema_search_path: myapp,sharedapp,public 

    # Minimum log levels, in increasing order: 
    # debug5, debug4, debug3, debug2, debug1, 
    # log, notice, warning, error, fatal, and panic 
    # The server defaults to notice. 
    #min_messages: warning 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: postgresql 
    encoding: unicode 
    database: goodsounds_test 
    pool: 5 
    username: goodsounds 
    password: test 

production: 
    adapter: postgresql 
    encoding: unicode 
    database: goodsounds_production 
    pool: 5 
    username: goodsounds 
    password: test 

Trả lời

82

"xác thực Peer" có nghĩa là nó được sử dụng một ổ cắm unix và mong người dùng kết nối với unix có tên người dùng unix giống như tên người dùng postgresql.

Kể từ tên unix địa phương của bạn là funkdified và bạn đang cố gắng để kết nối như người dùng goodsounds trên một ổ cắm miền unix (local) kết nối nơi mà bạn chỉ định pg_hba.confpeer xác thực, Thạc bác bỏ một cách chính xác nỗ lực kết nối của bạn.

Đây là hành vi mặc định cho nhiều lượt cài đặt khi sử dụng ổ cắm unix.

Bạn có thể:

  • Kết nối qua giao thức TCP/IP bằng cách xác định một hostname trong cài đặt kết nối cơ sở dữ liệu của bạn;
  • chỉnh sửa pg_hba.conf để sử dụng md5 xác thực mật khẩu thay vì peer xác thực cho ổ cắm unix (local loại kết nối) để Pg chấp nhận xác thực mật khẩu; hoặc
  • Kết nối với tên người dùng PostgreSQL giống với tên người dùng unix của bạn và tạo người dùng trong PostgreSQL nếu chưa tồn tại.

Xem the docs for pg_hba.conf và phần còn lại của client authentication chapter of the documentation.

Lưu ý rằng các thay đổi đối với pg_hba.conf không có hiệu lực ngay lập tức, bạn phải khởi động lại hoặc ít nhất tải lại PostgreSQL để làm cho nó đọc lại pg_hba.conf.


Ồ, ngoài ra, nếu bạn có nhiều phiên bản PostgreSQL được cài đặt, bạn có thể có libpq từ một phiên bản và máy chủ từ một phiên bản khác. Trong trường hợp này, hãy chắc chắn rằng vị trí cho ổ cắm unix mà libpq kết nối theo mặc định là giống như của máy chủ unix_socket_directories hoặc ghi đè nó bằng (ví dụ) host=/tmp trong chuỗi kết nối của bạn.

+2

Nếu tôi có thể cung cấp cho bạn nhiều điểm hơn, tôi sẽ. Cảm ơn Craig ... – Abram

+1

Có 'chỉ định tên máy chủ trong cài đặt kết nối cơ sở dữ liệu của bạn' có nghĩa là 'thêm' máy chủ: localhost' vào database.yml 'không? Bởi vì điều đó không hiệu quả với tôi. – Maarten

+1

@MaarrenSep yep. Nếu nó "không hoạt động" cho bạn, hãy đăng câu hỏi mới với các chi tiết (phiên bản, nội dung pg_hba.conf và database.yml, thông báo lỗi chính xác, v.v.). Liên kết quay lại nội dung này cho nội dung và thêm nhận xét có liên kết tới câu hỏi mới của bạn tại đây. –

7

Nếu "xác thực ngang hàng" không hoạt động, hãy thử md5 authenticaion.

Để xác định máy chủ thử một cái gì đó như thế này:

psql -d <dbname> -U <username> -h <hostname> 

hay này:

psql -d <dbname> -U <username> -h <hostname> -W 
+0

Câu hỏi không liên quan gì đến 'psql', vì vậy việc chỉ định các tùy chọn dòng lệnh' psql' không phải là câu trả lời hữu ích cho câu hỏi.Đây là lý do tại sao 'rake db: create' không hoạt động với ứng dụng Rails được cấu hình hợp lý. –

9

tôi đã phải đối mặt với cùng một vấn đề trên máy tính Ubuntu vì vậy tôi loại bỏ lỗi này bằng cách làm theo một số bước. Đổi thành postgres dùng

$ sudo su - postgres

nó sẽ yêu cầu mật khẩu và mật khẩu mặc định là postgres

Sau khi chuyển đổi người dùng postgres, mở psql console

$ psql 

để kiểm tra phiên bản số lượng bưu điện nếu nhiều phiên bản có sẵn

psql=# select VERSION(); 

PostgreSQL 9.1.13 on x86_64-unk....   # so version is 9.1 

Bây giờ mở postgres user

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

9.1 là hình thức quay trở lại phiên bản trên lệnh

và thay thế

local all    postgres        peer 

để

local all    postgres        md5 

sudo service postgresql restart

tôi viết bước trên blog của tôi cũng

http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html

+0

Câu hỏi không liên quan gì đến 'psql', vì vậy việc chỉ định các tùy chọn dòng lệnh' psql' không phải là câu trả lời hữu ích cho câu hỏi. Đây là lý do tại sao 'rake db: create' không hoạt động với ứng dụng Rails được cấu hình hợp lý. –

1

chỉnh sửa /etc/postgresql/9.3/main/pg_hba.conf

# "local" is for Unix domain socket connections only 
    local all    all          peer 

thay đổi xuống dưới dòng và nó hoạt động cho tôi

# "local" is for Unix domain socket connections only 
local all    all          md5 
Các vấn đề liên quan