Вопрос или проблема
Мы хотим только 1 роль, владеющую 1 базой данных, Domain-unix Socket, без пароля
postgres@luciol-essai:~$ more /etc/postgresql/8.4/main/pg_hba.conf | grep jppstphp
local essais_php jppstphp trust
postgres@luciol-essai:~$
Успех с psql :
envol@luciol-essai:~$ psql -U jppstphp essais_php
psql (8.4.15)
essais_php=>
Неудача с pgadmin3 :
Это ошибка.
Ошибка подключения к серверу: FATAL: authentification Ident ?chou?e pour l'utilisateur << jppstphp >>
Похоже, PgAdmin-III пытается подключиться к localhost
или 127.0.0.1
, поэтому он использует TCP/IP, тогда как psql не получает спецификацию хоста, поэтому использует UNIX-сокеты (local
).
Оставьте поле имени хоста в pgadmin3 пустым или добавьте еще одну запись в pg_hba.conf
для host essais_php jppstphp 127.0.0.1/32 trust
.
Вам следует проверить ваш файл pg_hba.conf
целиком, порядок директив важен. Я думаю, вы оставили в нем строку по умолчанию:
local all all ident
Если эта строка присутствует перед вашей конкретной строкой о jppstphp
, сервер postgresql сначала попытается идентифицировать вас по вашему имени пользователя UNIX, которое, похоже, envol
. Это не удастся, потому что вы пытаетесь подключиться как пользователь/роль postgres jppstphp
.
Если моё предположение верно, удаление вышеуказанной строки (и, возможно, аналогичной записи с аутентификацией паролем md5
) или размещение вашей строки jppstphp
перед ней должно позволить вам подключиться через локальный сокет.
Для подключения через локальный сокет достаточно оставить поле хоста пустым, как вы и сделали.
Я столкнулся с той же проблемой с psql через командную строку, подключаясь, и pgAdmin не подключался к RDS на AWS. У меня было установлено, что мой RDS доступен для общего доступа. Я убедился, что мои ACL и группы безопасности были полностью открыты, и всё равно проблема, поэтому я сделал следующее:
sudo find . -name *.conf
затем sudo nano ./data/pg_hba.conf
затем добавил в верхнюю часть директив в файле pg_hba.conf host all all 0.0.0.0/0 md5
и pgAdmin автоматически вошел в систему.
К тому же, мой RDS находился в моем VPC по умолчанию. У меня был идентичный экземпляр RDS в моем не по умолчанию VPC с идентичной группой безопасности, настройками ACL и группами безопасности к моему VPC по умолчанию, и я не смог его запустить. Не знаю почему, но это на другой день.
Я столкнулся с проблемой на своем Mac, и я почти сошел с ума.
Я ошибочно нажал “Нет” давным-давно на всплывающее окно, которое iOS запрашивает, когда приложение пытается получить доступ к локальному IP в первый раз и спрашивает, разрешено ли приложению это делать.
Перейдите в настройки > конфиденциальность и безопасность > локальная сеть и проверьте, что pgAdmin разрешен…
Ответ или решение
Вопрос о подключении к PostgreSQL через psql и pgAdmin, где psql успешно соединяется, а pgAdmin выдает ошибки, является довольно распространенной проблемой. Данная ситуация может вызывать недоумение, особенно если используются одинаковые учетные данные для подключения. Давайте рассмотрим основные причины, подходы к решению данной проблемы и необходимые проверки.
1. Проверка конфигурации pg_hba.conf
В вашем случае конфигурация файла pg_hba.conf
имеет ключевое значение. Сейчас мы видим следующее:
local essais_php jppstphp trust
Это означает, что для подключения к базе данных essais_php
от пользователя jppstphp
будет применяться метод аутентификации trust
, если используется UNIX-сокет. Однако, вы упомянули, что pgAdmin пытается подключиться, возможно, через TCP/IP, что приводит к ошибке аутентификации.
2. Различие в методах подключения
Когда вы используете psql
, вы не указываете хост, и он использует локальный UNIX-сокет. Напротив, pgAdmin, как правило, пытается подключиться через TCP/IP, если в поле хоста указано localhost
или 127.0.0.1
. Это приводит к тому, что pgAdmin будет искать подходящую запись в pg_hba.conf
, и если она недостаточно специфична, это может вызвать ошибку:
FATAL: authentification Ident ?chou?e pour l'utilisateur << jppstphp >>
3. Настройка pg_hba.conf для разрешения подключения через TCP/IP
Чтобы разрешить pgAdmin подключаться, вам необходимо добавить соответствующую запись в pg_hba.conf
. Например:
host essais_php jppstphp 127.0.0.1/32 trust
Эта строка позволит пользователю jppstphp
подключаться к базе essais_php
через TCP с локального адреса. Убедитесь, что эта запись находится перед любой общей записью, такой как local all all ident
.
4. Порядок записей в pg_hba.conf
Порядок записей в pg_hba.conf
имеет значение: PostgreSQL рассматривает записи сверху вниз. Если выше вашей записи будет находиться строка с методом аутентификации ident
, сервер попытается сначала использовать его. Это означает, что требуется либо переместить вашу строку выше, либо полностью удалить или изменить записи, которые могут конфликтовать.
5. Настройка в pgAdmin
При подключении через pgAdmin оставьте поле имени хоста пустым, чтобы подключаться через локальный UNIX-сокет, если вы не хотите вносить изменения в pg_hba.conf
. Если же необходимо использовать TCP/IP, убедитесь, что вы настроили соответствующую запись в pg_hba.conf
.
6. Дополнительные рекомендации
Если после всех проверок проблема все еще сохраняется, вот несколько дополнительных шагов для устранения неполадок:
- Проверьте, разрешает ли брандмауэр и другие сетевые настройки соединение с PostgreSQL.
- Убедитесь, что pgAdmin имеет доступ к сети, если используется удаленный сервер (помимо локальной установки).
- Проверьте разрешения на уровне операционной системы и настройки безопасности, которые могут препятствовать подключению (например, настройки конфиденциальности на Mac).
Заключение
Решение проблемы «pgsql может подключиться, pgAdmin не может» обычно связано с конфигурацией pg_hba.conf
и методами подключения. Убедившись в правильности настройок и их порядке, вы сможете устранить данную проблему. Надеюсь, эти советы помогут вам в успешном подключении к PostgreSQL с использованием pgAdmin. Если возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.