psql: FATAL: Не вдалося здійснити автентифікацію ідентифікатора для "postgres" користувача


372

Я встановив PostgreSQL і pgAdminIII на своєму полі Ubuntu Karmic.

Я можу успішно використовувати pgAdminIII (тобто підключитись / увійти), проте коли я намагаюся увійти на сервер, використовуючи те саме ім’я користувача / pwd у командному рядку (за допомогою psql), я отримую помилку:

psql: FATAL:  Ident authentication failed for user "postgres"

Хтось зараз, як вирішити це питання?


Це StackOverflow пост працював для мене: stackoverflow.com/a/18664239/2110769
Андреа Аральдо

Відповіді:


194

Ви встановили відповідні налаштування в pg_hba.conf?

Дивіться https://help.ubuntu.com/stable/serverguide/postgresql.html, як це зробити.


36
Це не працює для мене. Я витратив на це години! Все, що я хочу зробити, - це запустити команди psql у своєму терміналі. Що мені потрібно, щоб файл виглядав так, щоб це зробити ??
Шон

54
@SeanA вам потрібно щось на кшталт 'sudo -u postgres psql'
JLarky

8
Не забувайте ';' в кінці кожного висловлювання на psql. Звучить нерозумно, але це буває хе-хе.
omrsin

42
@Robert: "postgresql є непривітним для користувачів db"? Спробуйте якийсь день у Oracle, щоб отримати певну перспективу ... :)
mivk

5
Для тих, хто використовує рейли, мені довелося встановити pg_hba.conf і змінити "ident" на "пароль". Змінити його на довіру не вийшло.
Abe Petrillo

412

Наступні кроки працюють для нової установки postgres 9.1 на Ubuntu 12.04. (Також працював для постгресів 9.3.9 на Ubuntu 14.04.)

За замовчуванням postgres створює користувача під назвою "postgres". Ми входимо як її і надаємо їй пароль.

$ sudo -u postgres psql
\password
Enter password: ...
...

Вихід із системи psql, набравши текст\q або ctrl+d. Потім ми підключаємо як "postgres". -h localhostЧастина має важливе значення : він говорить psqlклієнту , що ми хочемо підключитися , використовуючи з'єднання TCP (який налаштований на використання перевірки автентичності пароля), а не в зв'язку PEER (який не дбає про пароль).

$ psql -U postgres -h localhost

13
Якщо встановлено, PGHOST=localhostвам не потрібно -hкожного разу вказувати параметр. Це також працює з іншими pg_*командами, такими як pg_dump.
Самєр

1
Це задокументовано тут: help.ubuntu.com/12.04/serverguide/postgresql.html
Хендра Узія

2
Це було потрібно, щоб включити встановлення Mediawiki на Debian за допомогою PostgreSQL.
mivk

2 роки потому, і мені потрібно це робити і на Mac .
Манав

1
погано, тому що виникає проблема безпеки, дивіться тут: serverfault.com/questions/110154/…
Erdinc Ay

161

Відредагуйте файл /etc/postgresql/8.4/main/pg_hba.confта замініть identабо peerбудь-яким md5або trust, залежно від того, чи хочете ви, щоб він запитав пароль на власному комп’ютері чи ні. Потім перезавантажте файл конфігурації за допомогою:

/etc/init.d/postgresql reload

4
одна команда перезапустити postgresql: /etc/init.d/ restagresql перезапуск
Тайлер Довгий

14
Навіщо перезапуск, коли потрібно все перезавантаження?
Френк Хайкенс

У цьому випадку: "/etc/init.d/postgresql-8.4 reload"
shaytac

1
цей тут працював на мене. Переходу від рівних до md5 було достатньо.
CD Jonatas

1
Гаразд, я nog postgresql noob, але мушу повідомити, що restartпрацював лише для мене, а не reload--- після змін на /etc/postgresql/9.5/main/pg_hba.conf(зміни peerна trust).
Майк О'Коннор

91

Ви отримуєте цю помилку через те, що не вдалося пройти автентифікацію клієнта Виходячи з повідомлення про помилку, ймовірно, у вас є конфігурація postgres за замовчуванням, яка встановлює метод аутентифікації клієнта на "IDENT" для всіх з'єднань PostgreSQL.

Ви обов'язково повинні прочитати розділ 19.1 Аутентифікація клієнта в посібнику PostgreSQL, щоб краще зрозуміти наявні налаштування аутентифікації (для кожної записи в pg_hba.conf ), але ось відповідний фрагмент, який допоможе вирішити проблему (з посібника версії 9.5) ):

довіра

Дозвольте з'єднання беззастережно. Цей спосіб дозволяє кожному, хто може підключитися до сервера баз даних PostgreSQL, входити в систему як будь-який користувач PostgreSQL, якого вони бажають, без необхідності введення пароля або будь-якої іншої автентифікації. Детальніше див. Розділ 19.3.1.

відкинути

Відхиліть з'єднання беззастережно. Це корисно для "фільтрації" певних хостів із групи, наприклад, лінія відхилення може блокувати певний хост від підключення, тоді як пізніша лінія дозволяє підключитися до інших хостів у певній мережі.

md5

Потрібно від клієнта надати подвійний хешований пароль MD5 для аутентифікації. Докладніше див. Розділ 19.3.2.

пароль

Потрібно від клієнта надати незашифрований пароль для аутентифікації. Оскільки пароль надсилається чітким текстом по мережі, це не повинно використовуватися в ненадійних мережах. Докладніше див. Розділ 19.3.2.

gss

Використовуйте GSSAPI для автентифікації користувача. Це доступно лише для з'єднань TCP / IP. Докладніше див. Розділ 19.3.3.

sspi

Використовуйте SSPI для аутентифікації користувача. Це доступно лише в Windows. Докладніше див. Розділ 19.3.4.

ідентич

Отримайте ім'я користувача клієнтської операційної системи, звернувшись до ідентифікаційного сервера на клієнті та перевірте, чи відповідає воно запитуваному користувачеві імені бази даних. Перевірку автентичності можна використовувати лише на TCP / IP-з'єднаннях. Якщо вказано для локальних з'єднань, замість цього буде використано аутентифікацію рівних. Докладніше див. Розділ 19.3.5.

однолітка

Отримайте ім’я користувача операційної системи клієнта з операційної системи і перевірте, чи відповідає воно запитуваному користувачеві імені бази даних. Це доступно лише для локальних з'єднань. Докладніше див. Розділ 19.3.6.

ldap

Аутентифікувати за допомогою сервера LDAP. Докладніше див. Розділ 19.3.7.

радіус

Аутентифікувати за допомогою сервера RADIUS. Докладніше див. Розділ 19.3.8.

cert

Аутентифікувати за допомогою SSL-клієнтських сертифікатів. Докладніше див. Розділ 19.3.9.

пам

Аутентифікувати за допомогою послуги Pluggable Authentication Modules (PAM), що надається операційною системою. Детальніше див. Розділ 19.3.10.

Отже ... щоб вирішити проблему, яку ви зіткнулися, ви можете зробити одне з наступного:

  1. Змініть спосіб (и) аутентифікації, визначений у вашому pg_hba.conf файлі trust, на md5(або password(залежно від ваших потреб у безпеці та простоті)) для локальних записів підключення, які ви вказали там.

  2. Оновіть, pg_ident.confщоб вказати користувачів вашої операційної системи на користувачів PostgreSQL та надати їм відповідні права доступу, залежно від ваших потреб.

  3. Залиште налаштування IDENT у спокої та створіть користувачів у вашій базі даних для кожного користувача операційної системи, до якого ви хочете надати доступ. Якщо користувач вже має автентифікацію ОС і входить у систему, PostgreSQL не потребуватиме подальшої автентифікації та надасть доступ до цього користувача на основі будь-яких привілеїв (ролей), призначених йому в базі даних. Це конфігурація за замовчуванням.

Примітка: Місце розташування pg_hba.confта pg_ident.confзалежить від ОС.


4
Для мене це найкраща відповідь. Коли ви знаєте всі ці варіанти, ви можете легко налаштувати конф. І особливо, коли ви знаходитесь на машині Dev, ви можете просто встановити "ідентифікатор" для всіх записів, щоб не витрачати час. Дякую
venkatareddy

1
Це було корисно і для мене. У моєму випадку файл pg_hba.conf був встановлений на рівний, я змінив його на пароль. Зауважте, що після встановлення ванілі я також повинен був встановити пароль для користувача postgres, sudo su - postgres psql, \ password встановити пароль. Потім запустіть з'єднання за промовчанням з pdgadmin3 з postgres імені користувача та вашим паролем.
edencorbin

1
І де цей файл знайдений? Зрозуміло, вам може знадобитися скласти список, оскільки, здається, немає відповідності між версіями. Я думаю, що я просто запустити знайти на '/'.
JosephK

1
У Ubuntu-16.04 - це /etc/postgresql/9.6/main/pg_hba.conf.
Майк О'Коннор

1
Як хтось, хто не знайомий з psql, це величезна допомога, і це має бути прийнятою відповіддю, оскільки вона застосовує різні методи аутентифікації
Vyrnach,

45

Просте додавання -h localhostбіта було все, що потрібно для роботи


Ми знаємо, чому це виправляє?
Майкл Пелл

Значення за замовчуванням postgresql не встановлені розумно. Вони, можливо, це вже виправили, я не знаю. Очевидно, що URL- this_computer = 'http://localhost'
адресом

15

Ви можете встановити змінну середовища PGHOST=localhost:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:

15

Якщо жоден з перерахованих вище не працює для вас:

я зробив досить багато інсталяцій Postgres, але сьогодні він був керований системою RedHat 6.5 (встановлення Postgres 9.3). Моя типова конфігурація hba.conf, яку Арон показує вище, не працювала. Виявилося, що моя система використовувала IPV6 та ігнорувала конфігурацію IPV4. Додавання рядка:

host    all             all             ::1/128                 password

дозволив мені успішно ввійти.


Дякую Етану. Я запускаю Fedora 20, і я стикаюся з тим же питанням, що і в ОП. Після зміни IPV4 та IPV6 на пароль. Зв’язок був успішним.
Ібн Саїд

1
Вас дуже вітають Тому я багато разів користувався іншими публікаціями, коли стикався з проблемою програмування чи системи. Радий, що можу трохи віддати.
Етан Браун

1
Це врятувало мені життя на Fedora 32!
Рамі

12

З усіх вищезазначених відповідей мені нічого не вийшло. Мені довелося вручну змінити пароль користувачів у базі даних, і це раптом спрацювало.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

Я використовував наступні налаштування:

pg_hba.conf

local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            password  
# IPv6 local connections:
host    all             all             ::1/128                 password

З'єднання успішно, нарешті, для наступної команди:

psql -U produser -d dbname -h localhost -W 

Слідом за цим мені допоміг, Йосип. Тим більше, команда підключення в кінці, щоб допомогти мені протестувати це. Крім того, я б додав перезапуск служби Postgresql у випадку, коли хтось цікавиться (але я розумію, що це мається на увазі). Вдячний за це!
Харлін

10

Я виявив, що мені довелося встановити сервер ідентифікації, який слухає на порту 113.

sudo apt-get install pidentd
sudo service postgresql restart

І тоді ідент спрацював.


10

Гммм ...

Якщо ви можете підключитися з ім'ям користувача та паролем у pgAdminIII, але ви не можете підключитися psql ці дві програми, ймовірно, підключаються до бази даних по-різному.

[Якщо ви підключаєтесь до різних баз даних, спершу спробуйте підключитися до однієї бази даних. Дивись нижче.]

Від PostgreSQL: Документація: 9.3: psql :

Якщо ви опустите ім'я хоста, psql підключиться через сокет Unix домену до сервера на локальному хості або через TCP / IP до localhost на машинах, у яких немає розеток домену Unix.

Якщо ви не запускаєте щось подібне psql ... -h host_name ..., а у вас працює Ubuntu, psqlслід підключатися через сокет Unix-домену, тому PostgreSQL, ймовірно, не налаштований, щоб дозволити один із методів аутентифікації пароля для постгресів .

Ви можете перевірити це, запустивши:

sudo -u postgres psql

Якщо вищезазначене працює, ваш сервер, ймовірно, налаштований використовувати аутентифікацію однорангових для локальних з'єднань користувачем postgres , тобто запитуючи ОС для вашого імені користувача, щоб підтвердити, що ви postgres .

Отже, це, ймовірно, ваш файл pg_hba.conf

Повний шлях файлу буде чимось на зразок /etc/postgresql/9.3/main/pg_hba.conf . Ви можете переглянути його, наприклад sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Якщо у вашій psqlкоманді пропущено ім'я хоста , ви зможете підключитися, якщо ви додасте наступний запис у файл pg_hba.conf :

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[ Коментовані рядки у файлі pg_hba.conf починаються з #.]

Якщо будуть в тому числі імені хоста в psqlкоманді, додайте цей запис замість:

# Connection type   Database   User       IP addresses   Method
host                all        postgres   127.0.0.1/32   md5

Потрібно поставити запис, перш ніж будь-які інші записи будуть узгоджені для вашого з'єднання через psql. Якщо ви сумніваєтесь у тому, куди його поставити, просто поставте його перед першим рядком без коментарів.

Більше про pg_hba.conf

Від PostgreSQL: Документація: 9.3: Файл pg_hba.conf [мій жирний акцент]:

Перша запис із відповідним типом з'єднання , адресою клієнта , запитуваною базою даних та іменем користувача використовується для аутентифікації. Не існує "пропускного" чи "резервного копіювання": якщо обраний один запис, а автентифікація не вдалася, наступні записи не враховуються. Якщо записи не збігаються, доступ заборонено.

Зауважте, що записи не відповідають методу аутентифікації. Отже, якщо ваш файл pg_hba.conf містить такий запис:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

Тоді ви не зможете підключитися через:

psql -u postgres

Якщо одна з цих записів не знаходиться у вашому файлі pg_hba.conf над попереднім записом:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!

2
пізно до гри, але, серйозно, дякую за те, що ви доклали зусиль, щоб правильно пояснити речі, щоб я зрозумів!
Jeffrey 'jf' Lim

10

У моєму випадку рішення тут: (для людей, які це стосуються) увійдіть у postgres:

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

з повагою


7

Проблема все ще залишається у вашому файлі pg_hba.conf. Цей рядок: Ви можете знайти цей файл у / etc / postgres / varion / main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

Це короткі описи обох варіантів відповідно до офіційних документів PostgreSQL про методи аутентифікації.

Peer аутентифікація

Метод аутентифікації рівних працює, отримуючи ім’я користувача операційної системи клієнта з ядра та використовуючи його як дозволене ім'я користувача бази даних (з необов'язкове відображення імен користувачів). Цей метод підтримується лише на локальних з'єднаннях.

Аутентифікація пароля

Методами аутентифікації на основі пароля є md5 та password. Ці методи діють аналогічно, за винятком способу надсилання пароля через з'єднання, а саме MD5 з хешем та чітким текстом відповідно.

Якщо ви взагалі переймаєтесь атаками "обнюхування паролем", тоді md5 є кращим. Потрібно уникати звичайного пароля, якщо це можливо. Однак md5 не можна використовувати з функцією простору db_user_names. Якщо з'єднання захищено шифруванням SSL, то пароль можна безпечно використовувати (хоча автентифікація сертифікатів SSL може бути кращим вибором, якщо такий залежить від використання SSL).

Змінивши цей файл, не забудьте перезапустити ваш PostgreSQL-сервер. Якщо ви працюєте в Linux, це було бsudo service postgresql restart.


7

Для fedora26 та постгресів9.6

По-перше, увійдіть як корінь користувача, а потім введіть у psql за допомогою наступних команд

$ su postgres  

тоді

$ psql

в psqlзнайти місце в hba_file ==> засобиpg_hba.conf

postgres=# show hba_file ; 
 hba_file  
--------------------------------------   
 /etc/postgresql/9.6/main/pg_hba.conf  
(1 row)  

у файлі pg_hba.confзмінити доступ користувача до цього

host all all 127.0.0.1/32 md5

6

моє рішення на PostgreSQL 9.3 на Mac OSX в bash shell було використовувати sudoдля переходу в папку даних, а потім додати необхідні рядки до pg_hba.confфайлу, щоб усі користувачі могли довіряти і мати можливість увійти. Це я зробив :

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W

1
Це добре для сервера розробки, але я б не рекомендував це для виробничого середовища, оскільки вам більше не потрібен пароль для підключення до бази даних з цими налаштуваннями.
Майкл


4

Я витратив більше часу на вирішення цієї помилки, яку я хочу визнати.

Порядок конфігурації аутентифікації в pg_hba.conf є релевантним у вашому випадку. Файл конфігурації за замовчуванням включає кілька рядків у ванільній установці. Ці параметри за замовчуванням можуть відповідати умовам ваших спроб аутентифікації, що призводить до невдалої автентифікації. Він не працює незалежно від додаткової конфігурації, доданої в кінці файлу .conf.

Щоб перевірити, який рядок конфігурації використовується, обов’язково перегляньте файл журналу за замовчуванням для повідомлень. Можливо, ви побачите щось подібне

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "host     all             all             127.0.0.1/32            ident"

Виявляється, цей рядок за замовчуванням викликає відхилення.

host    all             all             127.0.0.1/32            ident

спробуйте прокоментувати це.


3

Одним з таких проблем є редагування pg_hba.conf

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

Щоб тимчасово

# Database administrative login by Unix domain socket
local   all             postgres                                   trust

На цьому момент ви закінчите. Для безпеки тоді йдіть і

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

потім поверніться та встановіть pg_hba.conf назад у

# Database administrative login by Unix domain socket
local   all             postgres                                   md5

1

У мене була подібна проблема, і я виправив її в pg_hba.conf при видаленні всіх методів ідентифікації навіть для адреси IP6 (незважаючи на те, що у мене на машині є лише IP4).

host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5


0

Якщо ви користуєтесь ним у CentOS, можливо, вам доведеться перезавантажити постграми після прийняття вищезазначених рішень:

systemctl restart postgresql-9.3.service

Зараз простоpostgresql
Ніл Чоуддурі

Сервіс @NeilChowdhury postgresql все ще має версію в назві служби, принаймні, в системах Linux. Виконайте цю команду, щоб побачитиsystemctl status | grep postgres
Ікром,

0

Щоб вирішити цю проблему, мені довелося перевстановити pdAdmin

brew cask reinstall pgadmin4

0

Для Windows, якщо ви не хочете редагувати pb_gba.conf, тобто залишити метод MD5 (за замовчуванням), створіть нового користувача, запустивши цей запит в Інструменті запитів у PGadmin PGadmin

CREATE USER admin WITH PASSWORD 'secret'

то в смд

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

де dbname - ваш db у postgresql

введіть тут опис зображення


-3

Це працювало для мене: http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

local   all             postgres                                trust
local   all             myapp_usr                               trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust

1
Це дозволяє кожному з localhost входити як будь-який користувач. Така поведінка ніде у посиланні не згадується. І так, інформаційні сторінки debian містять те саме.
rkapl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.