2013-03-09 86 views
23

我有密碼匹配的database.ymlPG對等身份驗證失敗

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) 

這指定的一個錯誤

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

這裏用戶是我的pg_hba.conf:

# 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 

以前以前「信任」是md5,但我改變了看看是否有幫助。

這裏是我的database.yml:

# 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 

回答

82

「對等身份驗證」指的是它使用Unix套接字,並期待連接UNIX用戶具有相同的UNIX用戶名作爲用戶名的PostgreSQL。

由於本地UNIX用戶名是funkdified和你試圖通過Unix域套接字(local)連接,用戶goodsounds連接您的pg_hba.conf指定peer認證,PG正確地拒絕你的連接嘗試。

這是使用unix套接字時許多安裝的默認行爲。

您可以:

  • 通過TCP/IP連接在你的數據庫連接設置指定主機名;
  • 編輯pg_hba.conf使用md5密碼驗證代替peer驗證爲unix套接字(local連接類型)所以Pg接受密碼驗證;或者
  • 連接PostgreSQL用戶名與您的unix用戶名相同,並在PostgreSQL中創建用戶(如果它尚不存在)。

請參閱the docs for pg_hba.conf和其餘的client authentication chapter of the documentation

請注意,對pg_hba.conf的更改不會立即生效,您必須重新啓動或至少重新加載PostgreSQL以使其重新讀取pg_hba.conf。噢,並且,如果你安裝了多個PostgreSQL版本,你可能會有一個版本的libpq和另一個版本的服務器。在這種情況下,確保默認情況下libpq連接到的unix套接字的位置與服務器的unix_socket_directories相同,或者在連接字符串中使用(例如)host=/tmp覆蓋它。

+2

如果我能給你更多的分數,我 將。謝謝Craig ... – Abram 2013-03-09 10:28:03

+1

'在數據庫連接設置中指定主機名'是否意味着'將'host:localhost'添加到database.yml'中?因爲那對我不起作用。 – Maarten 2013-09-29 07:42:15

+1

@MaarrenSep yep。如果它對您「不起作用」,請發佈一個帶有詳細信息的新問題(版本,pg_hba.conf和database.yml內容,確切的錯誤消息等)。請鏈接回此內容並在此處添加評論,並提供指向您新問題的鏈接。 – 2013-10-06 05:42:55

7

如果「同行認證」不起作用,請嘗試md5認證。

要指定主機嘗試是這樣的:

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

或本:

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

這個問題與'psql'無關,因此指定'psql'命令行選項對於這個問題並不是有用的答案。這是問爲什麼'rake db:create'不能用看起來合理配置的Rails應用程序。 – 2017-02-16 00:36:01

9

我面臨的Ubuntu機器上同樣的問題,所以我通過以下一些步驟刪除此錯誤。 切換到postgres用戶

$ sudo su - postgres

它會詢問密碼,默認密碼爲postgres

切換用戶Postgres的,開放的psql控制檯後

$ psql 

所以檢查版本postgres如果有多個版本可用

psql=# select VERSION(); 

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

現在打開postgres user

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

9.1是版本申報表上的命令

並更換

local all    postgres        peer 

local all    postgres        md5 

sudo service postgresql restart

我寫步驟,在我的博客也

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

+0

這個問題與'psql'無關,因此指定'psql'命令行選項對於這個問題並不是一個有用的答案。這是問爲什麼'rake db:create'不能用看起來合理配置的Rails應用程序。 – 2017-02-16 00:37:25

1

編輯/etc/postgresql/9.3/main/pg_hba.conf

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

變化以下行,它的工作原理對我來說

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