Я получаю ошибку:
FATAL: Peer authentication failed for user "postgres"
когда я пытаюсь заставить postgres работать с Rails.
Здесь мой pg_hba.conf
, мой database.yml
и дамп полной трассировки.
Я изменил аутентификацию на md5 в pg_hba и пробовал разные вещи, но, похоже, ничего не работает.
Я также попытался создать нового пользователя и базу данных в соответствии с Rails 3.2, FATAL: неудачная аутентификация для пользователя (PG :: Error)
Но они не отображаются на pgadmin или даже когда я запускаю sudo -u postgres psql -l
.
Есть идеи, где я иду не так?
Проблема по-прежнему в вашем pg_hba.conf
(/etc/postgresql/9.1/main/pg_hba.conf*). Эта строка:
local all postgres peer
Должно быть
local all postgres md5
* Если вы не можете найти этот файл, запуск locate pg_hba.conf
покажет вам, где находится файл.
После изменения этого файла не забудьте перезапустить ваш сервер PostgreSQL. Если вы работаете в Linux, это будет sudo service postgresql restart
.
Это краткое описание обеих опций в соответствии с официальными документами PostgreSQL по методам аутентификации.
Метод одноранговой аутентификации работает путем получения имени пользователя операционной системы клиента из ядра и использования его в качестве разрешенного имени пользователя базы данных (с необязательным отображением имени пользователя). Этот метод поддерживается только на локальных соединениях.
Методы аутентификации на основе пароля - это md5 и пароль. Эти методы работают аналогично, за исключением того, что пароль передается по соединению, а именно, MD5-хэшированный и открытый текст соответственно.
Если вас вообще беспокоят атаки с "перехватом" пароля, тогда md5 предпочтительнее. Простой пароль всегда следует избегать, если это возможно. Однако md5 нельзя использовать с функцией db_user_namespace. Если соединение защищено шифрованием SSL, пароль можно использовать безопасно (хотя аутентификация SSL-сертификата может быть лучшим выбором, если она зависит от использования SSL).
Пример местоположения для pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf
/etc/init.d/postgresql reload
вам потребуется перезагрузить службу postgresql.
/etc/postgresql/9.1/main/pg_hba.conf
После установки Postgresql я сделал следующие шаги.
pg_hba.conf
для Ubuntu, он будет в /etc/postgresql/9.x/main
и измените эту строку:local all postgres peer
к
local all postgres trust
sudo service postgresql restart
psql -U postgres
ALTER USER postgres with password 'your-pass';
pg_hba.conf
наlocal all postgres trust
к
local all postgres md5
После перезапуска сервера postgresql вы можете получить к нему доступ со своим собственным паролем
Подробные сведения об аутентификации:
доверие - любой, кто может подключиться к серверу, имеет право на доступ к базе данных
одноранговое имя пользователя операционной системы клиента в качестве имени пользователя базы данных для доступа к ней.
md5 - аутентификация на основе пароля
для дополнительной справки здесь.
Если вы подключаетесь через localhost (127.0.0.1), вы не должны испытывать эту конкретную проблему. Я бы не стал гадоваться с pg_hba.conf, но вместо этого я бы отредактировал вашу строку соединения:
psql -U someuser -h 127.0.0.1 database
где someuser - ваш пользователь, с которым вы подключаетесь, а база данных - это база данных, к которой у пользователя есть разрешение для подключения.
Вот что я делаю в Debian для установки postgres:
http://www.postgresql.org/download/linux/debian/ (Wheezy 7.x)
as root …
root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
root@www0:~# apt-get update
root@www0:~# apt-get install postgresql-9.4
root@www0:~# su - postgres
postgres@www0:~$ createuser --interactive -P someuser
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
postgres@www0:~$ createdb -O someuser database
postgres@www0:~$ psql -U someuser -h 127.0.0.1 database
Наслаждайтесь!
host: 127.0.0.1
с по умолчанию на localhost в config / database.yml - это на той же машине, поэтому я не понимаю, почему
Это сработало для меня!
sudo -u postgres psql
В моем случае:
$> sudo nano /etc/postgresql/9.3/main/pg_hba.conf
Так что это будет изменено на:
Административный вход в базу данных с помощью сокета домена Unix local все pegres 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 md5
Это:
Административный вход в базу данных через сокет домена Unix локальный все postgres MD5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Затем перезапустите сервер pg:
$> перезапуск службы sudo после перезапуска
Ниже приведен список методов, используемых для соединения с postgres:
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.
Примечание. Если вы еще не создали пользователя postgres. Создайте это, и теперь вы можете получить доступ к серверу postgres, используя учетные данные этого пользователя.
СОВЕТ: Если после перезапуска postgres он не работает, закройте терминал и снова откройте.
Если у вас есть проблема, вам нужно найти свой pg_hba.conf
. Команда:
find / -name 'pg_hba.conf' 2>/dev/null
и после этого измените файл конфигурации:
Postgresql 9,3
Postgresql 9,4
Следующий шаг: Перезапуск вашего экземпляра БД:
service postgresql-9.3 restart
Если у вас возникли проблемы, вам нужно снова установить пароль:
ALTER USER db_user with password 'db_password';
У меня была та же проблема.
Решение от депы абсолютно корректно.
Просто убедитесь, что у пользователя настроено использование PostgreSQL.
Проверьте файл:
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
Разрешение этого файла должно быть предоставлено пользователю, с которым вы зарегистрировали свой psql.
Далее. Если вы добрались до сих пор..
Обновление согласно инструкциям @depa.
то есть.
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
а затем внесите изменения.
-rw-r----- 1 postgres postgres 4640 Jun 16 09:59 /etc/postgresql/9.5/main/pg_hba.conf
Если вы хотите сохранить конфигурацию по умолчанию, но хотите, чтобы аутентификация md5 с подключением сокета для одного конкретного подключения пользователя /db, добавьте "локальную" строку ПЕРЕД ПОЛНОЙ ВСЕЙ/ВСЕЙ:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local username dbname md5 # <-- this line
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Используйте host=localhost
в подключении.
PGconn *conn = PQconnectdb(
"host=localhost user=postgres dbname=postgres password=123"
);
Редакции выше работали для меня, после того как я понял, что мне нужно перезапустить сервер postgres после их создания. Для ubuntu:
sudo /etc/init.d/postgresql restart
Я перемещал каталог данных на клонированном сервере и имел проблемы с регистрацией в качестве postgres. Сброс пароля postgres как это сработало для меня.
root# su postgres
postgres$ psql -U postgres
psql (9.3.6)
Type "help" for help.
postgres=#\password
Enter new password:
Enter it again:
postgres=#
Изменение метода peer до доверия в pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf | строка 85) решает проблему. Добавление md5 запрашивает пароль, поэтому, если есть требование избежать использования паролей, используйте trust вместо md5.
команда ниже работает для меня:
psql -d myDb -U username -W
-W --password Force psql to prompt for a password before connecting to a database. This option is never essential, since psql will automatically prompt for a password if the server demands password authentication. However, psql will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.
Многие другие ответы относятся к настройкам в различных файлах конфигурации, а те, которые относятся к pg_hba.conf
, применяются и на 100% правильны. Однако убедитесь, что вы изменяете правильные файлы конфигурации.
Как уже упоминалось, расположение конфигурационных файлов может быть переопределено различными настройками внутри основного файла конфигурации, а также указать путь к основному файлу конфигурации в командной строке с опцией -D
.
Вы можете использовать следующую команду в сеансе psql, чтобы показать, где читаются ваши файлы конфигурации (при условии, что вы можете запустить psql). Это всего лишь шаг устранения неполадок, который может помочь некоторым людям:
select * from pg_settings where setting~'pgsql';
Вы также должны убедиться, что домашний каталог для вашего пользователя postgres - это то место, где вы ожидаете. Я говорю об этом, потому что это довольно легко упустить из-за того, что в вашем приглашении будет отображаться "~
" вместо фактического пути вашего домашнего каталога, что делает его не столь очевидным. Во многих установках по умолчанию используется домашний каталог пользователя postgres для /var/lib/pgsql
.
Если он не настроен на то, что он должен быть, остановите службу postgresql и используйте следующую команду при входе в систему под именем root. Также убедитесь, что пользователь postgres не входит в другой сеанс:
usermod -d /path/pgsql postgres
Наконец, убедитесь, что ваша переменная PGDATA установлена правильно, набрав echo $PGDATA
, которая должна выводить что-то похожее на:
/path/pgsql/data
Если он не установлен или показывает что-то отличное от того, что вы ожидаете, проверьте свои файлы запуска или RC, такие как .profile или .bash.rc - это сильно изменится в зависимости от вашей ОС и вашей оболочки. После того, как вы определили правильный запуск script для своего компьютера, вы можете вставить следующее:
export PGDATA=/path/pgsql/data
Для моей системы я разместил ее в /etc/profile.d/profile.local.sh
, чтобы она была доступна для всех пользователей.
Теперь вы должны иметь возможность инициализировать базу данных как обычно, и все ваши настройки пути psql должны быть правильными!
Вам нужно просто настроить метод, чтобы доверять.
#TYPE DATABASE USER ADDRESS METHOD
local all all trust
И перезагрузите сервер postgres.
# service postgresql-9.5 reload
Изменения в pg_hba.conf не требуют сервера postgres RESTART. просто RELOAD.
Если вы пытаетесь найти этот файл в Cloud 9, вы можете сделать
sudo vim /var/lib/pgsql9/data/pg_hba.conf
Нажмите I
для редактирования/вставки, нажмите ESC
3 раза и введите :wq
сохранит файл и выйдет
Моя проблема была в том, что я не набирал ни одного сервера. Я думал, что это по умолчанию из-за заполнителя, но когда я набрал localhost, это сработало.
Если вы столкнулись с этой проблемой, связанной с rails, и знаете, что вы уже создали это имя пользователя с паролем и правильными правами, то вам просто нужно добавить следующее в конец файла database.yml.
host: localhost
общий файл будет выглядеть ниже
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: root
password: admin
host: localhost
Вам вообще не нужно прикасаться к файлу pg_hba.conf
. Удачного кодирования
sudo psql --host=localhost --dbname=database-name --username=postgres
Это решило мою проблему