У меня есть сервер PostgreSQL, работающий на удаленном сервере Debian Squeeze. Я хочу войти под пользователем Postgres используя идентификатор и мкр5 метод в то же время. Первый нужен для обслуживания debian. Последний для подключения моего локального клиента postgresql через перенаправление портов ssh.
Мой первый подход заключался в том, чтобы добавить следующие строки с пользовательским прогрессом:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres ident
local all postgres md5
По-видимому, это не работает, и официальная документация объясняет:
Первая запись с совпадающим типом соединения, адресом клиента, запрошенной базой данных и именем пользователя используется для аутентификации. Отсутствует «провал» или «резервное копирование»: если выбрана одна запись и аутентификация не удалась, последующие записи не рассматриваются. Если ни одна запись не соответствует, доступ запрещен.
Поскольку первые три столбца совпадают, postgresql просто выберет первый, с которым столкнется.
Мой обходной путь - создать второго суперпользователя с именем root
CREATE ROLE root LOGIN SUPERUSER CREATEROLE CREATEDB PASSWORD 'newpassword';
и поместите в pg_hba.conf следующее:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres ident
local all root md5
Есть ли лучшее решение без создания второго пользователя?
Поскольку вы подключаетесь через переадресацию портов, ваше соединение будет host
в любом случае введите соединение, и его следует настроить как таковое. Я предполагаю, что это соединение будет от 127.0.0.1/32
чтобы вы настроили
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres ident
host all postgres 127.0.0.1/32 md5