В Fedora 12 я настраиваю для себя тестовую базу данных, а pg_hba.conf по умолчанию содержит следующее:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Я хочу включить логины md5, чтобы пользователь PostgreSQL с именем «foo» мог получить доступ к базе данных с именем «foo». Однако, когда я добавляю эту строку и перезапускаю postgres:
local foo foo md5
Запуск psql -U 'foo' с моей учетной записью обычного пользователя по-прежнему выдает сообщение:
psql: FATAL: Ident authentication failed for user "foo"
Мне нужно удалить первую локальную строку (с идентификатором), прежде чем я смогу войти через md5 в 'foo'.
Как я могу включить аутентификацию md5 для 'foo', сохранив идентификацию, как я уже сделал?
https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html указывает, что порядок записей имеет значение, а именно:
Поскольку записи pg_hba.conf проверяются последовательно для каждой попытки подключения, порядок записей имеет значение. Как правило, более ранние записи будут иметь параметры точного соответствия и более слабые методы аутентификации, тогда как более поздние записи будут иметь более слабые параметры соответствия и более строгие методы аутентификации. Например, можно использовать доверительную аутентификацию для локальных соединений TCP / IP, но требовать пароль для удаленных соединений TCP / IP. В этом случае запись, определяющая аутентификацию доверия для соединений из 127.0.0.1, появится перед записью, определяющей аутентификацию по паролю для более широкого диапазона разрешенных IP-адресов клиентов.
(так что попробуйте поменять порядок - поместите строку, которую вы добавляете, вверху)