Почему PostgreSQL не запрашивает пароль?

Вопрос или проблема

В PostgreSQL у меня следующая конфигурация в pg_hba.conf:

local   all     sec_eng                 scram-sha-256
host    all     sec_eng                 scram-sha-256
hostssl all     app_server  192.168.1.0/32      scram-sha-256   clientcert=verify-full

Других строк конфигурации нет.

Когда я пытаюсь подключиться к PostgreSQL с помощью sudo psql -U sec_eng, клиент аутентифицирует меня как peer и не запрашивает пароль, в результате аутентификация не проходит.

Если я попробую sudo psql -U sec_eng -h localhost, меня аутентифицируют как Ident, пароль не запрашивается, и поэтому аутентификация не проходит.

Что я делаю не так? Как я могу подключиться к PostgreSQL через Unix Socket, используя свое имя пользователя и пароль?

Ответ или решение

Ваша проблема заключается в том, что PostgreSQL не запрашивает пароль при попытке подключения по сокету Unix и при использовании команды sudo. Давайте разберем эту ситуацию подробнее, проанализировав настройки аутентификации и предложив возможные решения.

1. Анализ конфигурации pg_hba.conf

Ваша конфигурация в файле pg_hba.conf выглядит следующим образом:

local   all     sec_eng                 scram-sha-256
host    all     sec_eng                 scram-sha-256
hostssl all     app_server  192.168.1.0/32      scram-sha-256   clientcert=verify-full
  • Конфигурация local: Запись local all sec_eng scram-sha-256 указывает, что при подключении по Unix-сокету (локально) пользователь sec_eng должен аутентифицироваться с использованием метода scram-sha-256. Однако при использовании sudo, вы подключаетесь как системный пользователь, который, по умолчанию, использует метод peer authentication (проверка идентичности пользователя на уровне операционной системы).

  • Конфигурация host: Запись host all sec_eng scram-sha-256 требует, чтобы пользователь sec_eng использовал scram-sha-256 при удаленных подключениях. Это применимо только при использовании IP-адресов, а не Unix-сокетов.

2. Причины отсутствия запроса пароля

Неправильное поведение при подключении связано с тем, что sudo psql -U sec_eng использует аутентификацию типа peer, а не scram-sha-256, и не запрашивает пароль. То же самое происходит, когда вы используете sudo psql -U sec_eng -h localhost, поскольку PostgreSQL распознает это как требуется идентификация через идентификатор (Ident), что также предполагает отсутствие запроса пароля.

3. Решения

Для того чтобы использовать пароль при подключении к PostgreSQL с использованием Unix-сокетов, можно рассмотреть несколько вариантов:

Вариант 1: Изменить файл pg_hba.conf

Добавьте следующую строку в начало вашего файла pg_hba.conf:

local   all     sec_eng                 md5

Это изменит метод аутентификации на md5, что позволит вводить пароль при подключении. После изменения не забудьте перезагрузить PostgreSQL, чтобы новые настройки вступили в силу:

sudo systemctl restart postgresql

Вариант 2: Подключение без sudo

Если вы хотите подключиться к базам данных от имени пользователя sec_eng, попробуйте выполнить команду без использования sudo. Например:

psql -U sec_eng -h /var/run/postgresql

Путь /var/run/postgresql указывает на стандартное местоположение сокетов PostgreSQL. Это позволит использовать метод аутентификации scram-sha-256, подразумевающий ввод пароля.

Вариант 3: Использование переменной окружения

Вы также можете установить переменную окружения PGPASSWORD, чтобы указать пароль:

export PGPASSWORD='your_password'
psql -U sec_eng

Это позволит вам подключиться без необходимости ввода пароля вручную.

Заключение

Отсутствие запроса пароля при подключении к PostgreSQL связано с аутентификацией peer или Ident. Изменив настройки файлов pg_hba.conf или используя подходы, описанные выше, вы сможете успешно подключиться с использованием пароля. Убедитесь, что всегда после редактирования конфигурации базы данных вы перезагружаете сервер PostgreSQL для применения изменений.

Если у вас будут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...