2013-11-20 3 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: аутентификация пароля не удалась для пользователя« core »' , Я дважды убедился в правильности пароля, выполнив «ALTER USER core PASSWORD» n7zD5FG5 '; ', но он все еще не прошел. – josh

+0

Что вы делали для меня. На данный момент я подозреваю несколько возможностей: 1. создав учетную запись на другом экземпляре PG. 2. [pgadmin bug on valuntil] (http://stackoverflow.com/questions/14564644), хотя вы никогда не упоминали pgadmin. 3. Странность в pg_hba.conf. 4. странность в postgresql.conf по параметрам auth. Чтобы немного разобраться, я бы установил метод auth 'trust' в pg_hba.conf в соответствующей строке, перезагрузите 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

Edit:

Я также должен был сделать это, когда я установил Postgres:

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

Я считаю, что 'core' имеет привилегию входа. Я выполнил 'SELECT * FROM pg_roles;' и 'core' имеет роль' rolcanlogin'. – josh

+0

Да, просто прочитайте 'create user' означает роль входа. посмотрите, действительно ли пароль, и если это не так, не уверен, что такое – AJcodez

-1

Можете ли вы попробовать

alter role core with password "n7zD5FG5"; 
Смежные вопросы