2013-11-20 128 views
-2

我正在創建一個Rails應用程序並使用Postgresql數據庫。我創建了幾個表和一個用戶,core,它是每個表的所有者。Postgresql的密碼驗證失敗

postgres=# create user core with password 'n7zD5FG5'; 
CREATE ROLE 
postgres=# create database core_apps_prod with owner core; 
CREATE DATABASE 
postgres=# create database core_apps_dev with owner core; 
CREATE DATABASE 
postgres=# create database core_apps_test with owner core; 
CREATE DATABASE 

而且我database.yml文件:

development: 
    adapter: postgresql 
    database: core_apps_dev 
    username: core 
    password: n7zD5FG5 
    host: localhost 

然而,當我運行rake db:migrate,我得到的錯誤

rake aborted! 
FATAL: password authentication failed for user "core" 

我也無法連接到psql手動:psql -U core -W -d core_apps_dev - 我得到的同樣的錯誤。

我如何允許core連接到PostgreSQL的localhost

SELECT * FROM pg_roles where rolname='core';輸出是:

rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid 
---------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+------- 
core | f  | t   | f    | f   | f   | t   | f    |   -1 | ******** |    |   | 16392 
+0

添加'-h localhost'給psql連接到本地主機,否則它的使用具有不同的身份驗證規則的Unix域套接字。另外通過使用'-W',你不知道服務器是否需要密碼,這在解決密碼問題時增加了混淆。只是省略'-W' –

+0

我試過,通過運行命令'psql -h localhost -U core -d core_apps_dev'並輸入密碼,但它仍然顯示'psql:FATAL:用戶密碼驗證失敗「核心」 。我通過運行'ALTER USER核心口令'n7zD5FG5';'確保密碼是正確的,但它仍然失敗。 – josh

+0

你做了什麼爲我工作。在這一點上,我懷疑有幾種可能性:1.在不同的PG實例上創建帳戶。 2. [pgadmin bug on valuntil](http://stackoverflow.com/questions/14564644),儘管你從未提到過pgadmin。 3. pg_hba.conf中的怪異。 4.驗證選項中postgresql.conf中的怪異。爲了清楚一點,我將auth方法設置爲在相關行上的pg_hba.conf中「trust」,重新加載PG並重試。它應該連接而不要求輸入密碼。 –

回答

0

問題竟然是與港口的問題。 Postgresql Activerecord適配器defaults to port 5432,而我的配置中的端口是端口5433。我database.yml現在看起來是這樣的:

development: 
    adapter: postgresql 
    database: core_apps_dev 
    username: core 
    password: n7zD5FG5 
    host: localhost 
    port: 5433 
-1

新創建的用戶可能是缺乏數據庫權限。有許多不同的權限可以賦予用戶。

假設你有psql的管理員帳戶訪問,進入PSQL和運行

GRANT ALL PRIVILEGES ON DATABASE core_apps_dev to core;

+0

當它是所有者時,它不具有數據庫的所有特權? – josh

+0

是的,您將以這種方式授予管理員權限。 [更多關於postgresql的數據庫特權...](http://www.postgresql.org/docs/9.0/static/sql-grant.html) –

+0

所以,如果我用擁有者'core'創建數據庫,它應該對數據庫擁有所有權限? – josh

0

你需要在創建它的權限添加到角色。要允許在登錄和使用rake db:create使用以下命令:

create role core with login createdb password 'n7zD5FG5'; 

解決您的問題,嘗試改變角色,讓登錄:

alter role core with login; 

如果不工作,看是否使登錄永遠有效的工作原理:

alter role core valid until 'infinity'; 

更多的角色:http://www.postgresql.org/docs/8.2/static/sql-createrole.html

編輯:

我也不得不這樣做,當我安裝的Postgres:

$ psql postgres -c 'CREATE EXTENSION "adminpack";' 
+0

我相信'core'具有登錄權限。我運行了'SELECT * FROM pg_roles;'和'core'具有角色'rolcanlogin'。 – josh

+0

是的,剛剛閱讀'創建用戶'意味着登錄角色。看看密碼是否有效,如果不是這樣,不知道是什麼 – AJcodez

-1

能不能請你

alter role core with password "n7zD5FG5";