Ошибка при получении: Ошибка аутентификации сверстников для пользователя "postgres" при попытке заставить pgsql работать с рельсами
Я получаю ошибку:
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
.
Есть идеи, где я иду не так?
Ответы
Ответ 1
Проблема все еще в вашем файле 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
Ответ 2
После установки Postgresql я сделал следующие шаги.
откройте файл pg_hba.conf
для Ubuntu, он будет в /etc/postgresql/9.x/main
и измените эту строку:
local all postgres peer
в
local all postgres trust
Перезагрузите сервер
$ sudo service postgresql restart
Войдите в psql и установите свой пароль
$ psql -U postgres
db> ALTER USER postgres with password 'your-pass';
Наконец, измените pg_hba.conf
с
local all postgres trust
в
local all postgres md5
После перезапуска сервера postgresql вы можете получить к нему доступ со своим собственным паролем
Подробности методов аутентификации:
доверие - любой, кто может подключиться к серверу, имеет право доступа к базе данных
peer - используйте имя пользователя клиентской операционной системы в качестве имени пользователя базы данных для доступа к нему.
md5 - password-base authentication
для дальнейшей ссылки проверьте здесь
Ответ 3
Если вы подключаетесь через 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 …
[email protected]:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
[email protected]:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
[email protected]:~# apt-get update
[email protected]:~# apt-get install postgresql-9.4
[email protected]:~# su - postgres
[email protected]:~$ 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
[email protected]:~$ createdb -O someuser database
[email protected]:~$ psql -U someuser -h 127.0.0.1 database
Наслаждайтесь!
Ответ 4
Это сработало для меня!
sudo -u postgres psql
Ответ 5
Если у вас есть проблема, вам нужно найти свой pg_hba.conf
. Команда:
find / -name 'pg_hba.conf' 2>/dev/null
и после этого измените файл конфигурации:
Postgresql 9,3
![Postgresql 9.3]()
Postgresql 9,4
![Postgresql 9.3]()
Следующий шаг: Перезапуск вашего экземпляра БД:
service postgresql-9.3 restart
Если у вас возникли проблемы, вам нужно снова установить пароль:
ALTER USER db_user with password 'db_password';
Ответ 6
- Перейдите в этот /etc/postgresql/9.x/main/ и откройте файл pg_hba.conf
В моем случае:
$> sudo nano /etc/postgresql/9.3/main/pg_hba.conf
- Замените пира с md5
Так что это будет изменено на:
Административный вход в базу данных с помощью сокета домена 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 он не работает, закройте терминал и снова откройте.
Ответ 7
У меня была та же проблема.
Решение от депы абсолютно корректно.
Просто убедитесь, что у пользователя настроено использование PostgreSQL.
Проверьте файл:
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
Разрешение этого файла должно быть предоставлено пользователю, с которым вы зарегистрировали свой psql.
Далее. Если вы добрались до сих пор..
Обновление согласно инструкциям @depa.
то есть.
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
а затем внесите изменения.
Ответ 8
sudo psql --host=localhost --dbname=database-name --username=postgres
Это решило мою проблему
Ответ 9
Если вы хотите сохранить конфигурацию по умолчанию, но хотите, чтобы аутентификация 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
Ответ 10
Я перемещал каталог данных на клонированный сервер и не мог войти в систему как 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=#
Ответ 11
Редакции выше работали для меня, после того как я понял, что мне нужно перезапустить сервер postgres после их создания.
Для ubuntu:
sudo /etc/init.d/postgresql restart
Ответ 12
Используйте host=localhost
в подключении.
PGconn *conn = PQconnectdb(
"host=localhost user=postgres dbname=postgres password=123"
);
Ответ 13
команда ниже работает для меня:
psql -d myDb -U username -W
Ответ 14
Изменение метода peer до доверия в pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf | строка 85) решает проблему. Добавление md5 запрашивает пароль, поэтому, если есть требование избежать использования паролей, используйте trust вместо md5.
Ответ 15
Вам нужно просто настроить метод, чтобы доверять.
#TYPE DATABASE USER ADDRESS METHOD
local all all trust
И перезагрузите сервер postgres.
# service postgresql-9.5 reload
Изменения в pg_hba.conf не требуют сервера postgres RESTART. просто RELOAD.
Ответ 16
Многие другие ответы относятся к настройкам в различных файлах конфигурации, а те, которые относятся к 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 должны быть правильными!
Ответ 17
Моя проблема была в том, что я не набирал ни одного сервера. Я думал, что это по умолчанию из-за заполнителя, но когда я набрал localhost, это сработало.
Ответ 18
Если вы пытаетесь найти этот файл в Cloud 9, вы можете сделать
sudo vim /var/lib/pgsql9/data/pg_hba.conf
Нажмите I
для редактирования/вставки, нажмите ESC
3 раза и введите :wq
сохранит файл и выйдет
Ответ 19
Если вы столкнулись с этой проблемой, связанной с rails, и знаете, что вы уже создали это имя пользователя с паролем и правильными правами, то вам просто нужно добавить следующее в конец файла database.yml.
host: localhost
общий файл будет выглядеть ниже
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: root
password: admin
host: localhost
Вам вообще не нужно прикасаться к файлу pg_hba.conf
. Удачного кодирования
Ответ 20
pg_config предназначен для информации о комплиментах, чтобы помочь расширениям и клиентским программам компилироваться и связываться с PostgreSQL. Он ничего не знает об активных экземплярах PostgreSQL на компьютере, кроме двоичных файлов.
pg_hba.conf может появляться во многих других местах в зависимости от того, как был установлен Pg. Стандартное расположение - pg_hba.conf в каталоге data_directory базы данных (который может быть в /home,/var/lib/pgsql,/var/lib/postgresql/[версия]/,/opt/postgres/, и т.д. И т.д. И т.д. И т.д.) но пользователи и упаковщики могут положить его куда угодно. К сожалению.
Единственный действительный способ найти pg_hba.conf - это спросить работающий экземпляр PostgreSQL, где он находится, pg_hba.conf, или спросить системного администратора, где он находится. Вы даже не можете рассчитывать на то, что спросите, где находится datadir, и проанализировать postgresql.conf, потому что сценарий инициализации может передать такой параметр, как -c hba_file =/some/other/path, при запуске Pg.
Что вы хотите сделать, это спросить PostgreSQL:
SHOW hba_file;
Эта команда должна выполняться в сеансе суперпользователя, поэтому для сценариев оболочки вы можете написать что-то вроде:
psql -t -P format=unaligned -c 'show hba_file';
и установите переменные среды PGUSER, PGDATABASE и т.д., чтобы убедиться, что соединение установлено правильно.
Да, это в некоторой степени проблема курицы и яйца: в том случае, если пользователь не может подключиться (скажем, после того, как испортил редактирование pg_hba.conf), вы не можете найти pg_hba.conf, чтобы исправить это.
Другой вариант - просмотреть выходные данные команды ps и посмотреть, видим ли там аргумент каталога данных postmaster -D, например,
ps aux | grep 'postgres *-D'
поскольку файл pg_hba.conf будет находиться в каталоге данных (если вы не используете Debian/Ubuntu или некоторые производные и используете их пакеты).
Если вы нацелены конкретно на системы Ubuntu с PostgreSQL, установленным из пакетов Debian/Ubuntu, это станет немного проще. Вам не нужно иметь дело с ручным -c скомпилированным из источника Pg, для которого кто-то initdb сделал datadir в своем домашнем каталоге, или с установкой EnterpriseDB Pg в /opt и т.д. Вы можете задать pg_wrapper, Debian/Многофункциональный менеджер Pg в Ubuntu, где PostgreSQL использует команду pg_lsclusters из pg_wrapper.
Если вы не можете подключиться (Pg не запущен или вам нужно отредактировать pg_hba.conf для подключения), вам придется искать в системе файлы pg_hba.conf. В Mac и Linux что-то вроде sudo find / -type f -name pg_hba.conf подойдет. Затем проверьте файл PG_VERSION в том же каталоге, чтобы убедиться, что это правильная версия PostgreSQL, если у вас их больше одной. (Если pg_hba.conf находится в /etc/, игнорируйте это, вместо этого это имя родительского каталога). Если у вас есть несколько каталогов данных для одной и той же версии PostgreSQL, вам придется посмотреть на размер базы данных, проверьте командную строку запущенного postgres из ps, чтобы убедиться, что аргумент каталога данных -D совпадает с тем, где вы редактируете, и т.п.https://askubuntu.com/info/256534/how-Do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711